0) { $style = 'background-color:#666;'; $style.= 'color:white;'; $style.= 'padding:1px 5px;'; $style.= '-moz-border-radius:10px;'; $style.= '-webkit-border-radius:10px;'; $style.= '-border-radius:10px;'; $style.= 'margin-left:5px;'; $name.= ''.$page['community_nb_pendings'].''; if (defined('IN_ADMIN') and IN_ADMIN and $page['page'] == 'intro') { global $template; $template->set_prefilter('intro', 'community_pendings_on_intro'); $template->assign( array( 'COMMUNITY_PENDINGS' => sprintf( ''.l10n('%u pending photos').'', get_root_url().'admin.php?page=plugin-community-pendings', $page['community_nb_pendings'] ), ) ); } } array_push( $menu, array( 'NAME' => $name, 'URL' => get_root_url().'admin.php?page=plugin-community' ) ); return $menu; } function community_pendings_on_intro($content, &$smarty) { $pattern = '#
  • \s*{\$DB_ELEMENTS\}#ms'; $replacement = '
  • {$COMMUNITY_PENDINGS}
  • {$DB_ELEMENTS}'; return preg_replace($pattern, $replacement, $content); } add_event_handler('init', 'community_load_language'); function community_load_language() { if (!defined('IN_ADMIN') or !IN_ADMIN) { load_language('admin.lang'); } load_language('plugin.lang', COMMUNITY_PATH); } add_event_handler('loc_end_section_init', 'community_section_init'); function community_section_init() { global $tokens, $page; if ($tokens[0] == 'add_photos') { $page['section'] = 'add_photos'; } } add_event_handler('loc_end_index', 'community_index'); function community_index() { global $page; if (isset($page['section']) and $page['section'] == 'add_photos') { include(COMMUNITY_PATH.'add_photos.php'); } } add_event_handler('blockmanager_apply' , 'community_gallery_menu', EVENT_HANDLER_PRIORITY_NEUTRAL+10); function community_gallery_menu($menu_ref_arr) { global $conf, $user; // conditional : depending on community permissions, display the "Add // photos" link in the gallery menu $user_permissions = community_get_user_permissions($user['id']); if (count($user_permissions['upload_categories']) == 0 and !$user_permissions ['create_whole_gallery']) { return; } $menu = & $menu_ref_arr[0]; if (($block = $menu->get_block('mbMenu')) != null ) { load_language('plugin.lang', COMMUNITY_PATH); array_splice( $block->data, count($block->data), 0, array( '' => array( 'URL' => make_index_url(array('section' => 'add_photos')), 'TITLE' => l10n('Upload your own photos'), 'NAME' => l10n('Upload Photos') ) ) ); } } add_event_handler('ws_invoke_allowed', 'community_switch_user_to_admin', EVENT_HANDLER_PRIORITY_NEUTRAL, 3); function community_switch_user_to_admin($res, $methodName, $params) { global $user, $community; if (is_admin()) { return $res; } $community = array('method' => $methodName); if ('pwg.images.addSimple' == $community['method']) { $community['category'] = $params['category']; } elseif ('pwg.images.add' == $community['method']) { $community['category'] = $params['categories']; $community['md5sum'] = $params['original_sum']; } // $print_params = $params; // unset($print_params['data']); // file_put_contents('/tmp/community.log', '['.$methodName.'] '.json_encode($print_params)."\n" ,FILE_APPEND); // conditional : depending on community permissions, display the "Add // photos" link in the gallery menu $user_permissions = community_get_user_permissions($user['id']); if (count($user_permissions['upload_categories']) == 0 and !$user_permissions ['create_whole_gallery']) { return $res; } // if level of trust is low, then we have to set level to 16 $methods = array(); $methods[] = 'pwg.tags.add'; $methods[] = 'pwg.images.exist'; $methods[] = 'pwg.images.add'; $methods[] = 'pwg.images.addSimple'; $methods[] = 'pwg.images.addChunk'; $methods[] = 'pwg.images.checkUpload'; $methods[] = 'pwg.images.checkFiles'; $methods[] = 'pwg.images.setInfo'; if (in_array($methodName, $methods)) { $user['status'] = 'admin'; } if ('pwg.categories.add' == $methodName) { if (in_array($params['parent'], $user_permissions['create_categories']) or $user_permissions['create_whole_gallery']) { $user['status'] = 'admin'; } } return $res; } add_event_handler('ws_add_methods', 'community_ws_replace_methods', EVENT_HANDLER_PRIORITY_NEUTRAL+5); function community_ws_replace_methods($arr) { global $conf, $user; $service = &$arr[0]; if (is_admin()) { return; } $user_permissions = community_get_user_permissions($user['id']); if (count($user_permissions['permission_ids']) == 0) { return; } // the plugin Community is activated, the user has upload permissions, we // use a specific function to list available categories, assuming the user // wants to list categories where upload is possible for him $service->addMethod( 'pwg.categories.getList', 'community_ws_categories_getList', array( 'cat_id' => array('default'=>0), 'recursive' => array('default'=>false), 'public' => array('default'=>false), 'tree_output' => array('default'=>false), 'fullname' => array('default'=>false), ), 'retrieves a list of categories' ); $service->addMethod( 'pwg.tags.getAdminList', 'community_ws_tags_getAdminList', array(), 'administration method only' ); } /** * returns a list of categories (web service method) */ function community_ws_categories_getList($params, &$service) { global $user, $conf; if ($params['tree_output']) { if (!isset($_GET['format']) or !in_array($_GET['format'], array('php', 'json'))) { // the algorithm used to build a tree from a flat list of categories // keeps original array keys, which is not compatible with // PwgNamedArray. // // PwgNamedArray is useful to define which data is an attribute and // which is an element in the XML output. The "hierarchy" output is // only compatible with json/php output. return new PwgError(405, "The tree_output option is only compatible with json/php output formats"); } } $where = array('1=1'); $join_type = 'LEFT'; $join_user = $user['id']; if (!$params['recursive']) { if ($params['cat_id']>0) $where[] = '(id_uppercat='.(int)($params['cat_id']).' OR id='.(int)($params['cat_id']).')'; else $where[] = 'id_uppercat IS NULL'; } else if ($params['cat_id']>0) { $where[] = 'uppercats '.DB_REGEX_OPERATOR.' \'(^|,)'. (int)($params['cat_id']) .'(,|$)\''; } if ($params['public']) { $where[] = 'status = "public"'; $where[] = 'visible = "true"'; $join_user = $conf['guest_id']; } $user_permissions = community_get_user_permissions($user['id']); $upload_categories = $user_permissions['upload_categories']; if (count($upload_categories) == 0) { $upload_categories = array(-1); } $where[] = 'id IN ('.implode(',', $upload_categories).')'; $query = ' SELECT id, name, permalink, uppercats, global_rank, comment, nb_images, count_images AS total_nb_images, date_last, max_date_last, count_categories AS nb_categories FROM '.CATEGORIES_TABLE.' '.$join_type.' JOIN '.USER_CACHE_CATEGORIES_TABLE.' ON id=cat_id AND user_id='.$join_user.' WHERE '. implode(' AND ', $where); $result = pwg_query($query); $cats = array(); while ($row = pwg_db_fetch_assoc($result)) { $row['url'] = make_index_url( array( 'category' => $row ) ); foreach( array('id','nb_images','total_nb_images','nb_categories') as $key) { $row[$key] = (int)$row[$key]; } if ($params['fullname']) { $row['name'] = strip_tags(get_cat_display_name_cache($row['uppercats'], null, false)); } else { $row['name'] = strip_tags( trigger_event( 'render_category_name', $row['name'], 'ws_categories_getList' ) ); } $row['comment'] = strip_tags( trigger_event( 'render_category_description', $row['comment'], 'ws_categories_getList' ) ); array_push($cats, $row); } usort($cats, 'global_rank_compare'); if ($params['tree_output']) { return categories_flatlist_to_tree($cats); } else { return array( 'categories' => new PwgNamedArray( $cats, 'category', array( 'id', 'url', 'nb_images', 'total_nb_images', 'nb_categories', 'date_last', 'max_date_last', ) ) ); } } function community_ws_tags_getAdminList($params, &$service) { $tags = get_available_tags(); // keep orphan tags include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); $orphan_tags = get_orphan_tags(); if (count($orphan_tags) > 0) { $orphan_tag_ids = array(); foreach ($orphan_tags as $tag) { $orphan_tag_ids[] = $tag['id']; } $query = ' SELECT * FROM '.TAGS_TABLE.' WHERE id IN ('.implode(',', $orphan_tag_ids).') ;'; $result = pwg_query($query); while ($row = pwg_db_fetch_assoc($result)) { $tags[] = $row; } } usort($tags, 'tag_alpha_compare'); return array( 'tags' => new PwgNamedArray( $tags, 'tag', array( 'name', 'id', 'url_name', ) ) ); } add_event_handler('sendResponse', 'community_sendResponse'); function community_sendResponse($encodedResponse) { global $community, $user; if (!isset($community['method'])) { return; } if ('pwg.images.addSimple' == $community['method']) { $response = json_decode($encodedResponse); $image_id = $response->result->image_id; } elseif ('pwg.images.add' == $community['method']) { $query = ' SELECT id FROM '.IMAGES_TABLE.' WHERE md5sum = \''.$community['md5sum'].'\' ORDER BY id DESC LIMIT 1 ;'; list($image_id) = pwg_db_fetch_row(pwg_query($query)); } else { return; } $image_ids = array($image_id); // $category_id is set in the photos_add_direct_process.inc.php included script $category_infos = get_cat_info($community['category']); // should the photos be moderated? // // if one of the user community permissions is not moderated on the path // to gallery root, then the upload is not moderated. For example, if the // user is allowed to upload to events/parties with no admin moderation, // then he's not moderated when uploading in // events/parties/happyNewYear2011 $moderate = true; $user_permissions = community_get_user_permissions($user['id']); $query = ' SELECT cp.category_id, c.uppercats FROM '.COMMUNITY_PERMISSIONS_TABLE.' AS cp LEFT JOIN '.CATEGORIES_TABLE.' AS c ON category_id = c.id WHERE cp.id IN ('.implode(',', $user_permissions['permission_ids']).') AND cp.moderated = \'false\' ;'; $result = pwg_query($query); while ($row = pwg_db_fetch_assoc($result)) { if (empty($row['category_id'])) { $moderate = false; } elseif (preg_match('/^'.$row['uppercats'].'(,|$)/', $category_infos['uppercats'])) { $moderate = false; } } if ($moderate) { $inserts = array(); $query = ' SELECT id, date_available FROM '.IMAGES_TABLE.' WHERE id IN ('.implode(',', $image_ids).') ;'; $result = pwg_query($query); while ($row = pwg_db_fetch_assoc($result)) { array_push( $inserts, array( 'image_id' => $row['id'], 'added_on' => $row['date_available'], 'state' => 'moderation_pending', ) ); } mass_inserts( COMMUNITY_PENDINGS_TABLE, array_keys($inserts[0]), $inserts ); // the level of a user upload photo with moderation is 16 $level = 16; } else { // the level of a user upload photo with no moderation is 0 $level = 0; } $query = ' UPDATE '.IMAGES_TABLE.' SET level = '.$level.' WHERE id IN ('.implode(',', $image_ids).') ;'; pwg_query($query); invalidate_user_cache(); } add_event_handler('delete_user', 'community_delete_user'); function community_delete_user($user_id) { $query = ' DELETE FROM '.COMMUNITY_PERMISSIONS_TABLE.' WHERE user_id = '.$user_id.' ;'; pwg_query($query); community_reject_user_pendings($user_id); } add_event_handler('delete_categories', 'community_delete_category'); function community_delete_category($category_ids) { // $category_ids includes all the sub-category ids $query = ' DELETE FROM '.COMMUNITY_PERMISSIONS_TABLE.' WHERE category_id IN ('.implode(',', $category_ids).') ;'; pwg_query($query); community_update_cache_key(); } add_event_handler('invalidate_user_cache', 'community_refresh_cache_update_time'); function community_refresh_cache_update_time() { community_update_cache_key(); } add_event_handler('init', 'community_uploadify_privacy_level'); function community_uploadify_privacy_level() { if (script_basename() == 'uploadify' and !is_admin()) { $_POST['level'] = 16; } } ?>