source: extensions/virtualAutoGrant/virtual_categories_granted_to_creator.php @ 15907

Revision 9996, 6.3 KB checked in by Eric, 9 years ago (diff)

Compatibility with Piwigo 2.2.0
New plugin version 2.2.0 hard coded for publication

Line 
1<?php
2/* Virtual AutoGrant */
3if (!defined('PHPWG_ROOT_PATH') or !defined('VAG_DIR')) die('Hacking attempt!');
4global $conf;
5include_once( VAG_PATH . 'VAG_default.php');
6
7// Internal case
8if ( defined('IN_ADMIN') and IN_ADMIN and !function_exists( 'VAG_internal_add_case' ) ) {
9                add_event_handler('invalidate_user_cache', 'VAG_internal_add_case', 21 );
10  function VAG_internal_add_case($full) {
11    if ( !defined('PHOTOS_ADD_BASE_URL') ) return false; # Nothing else to do
12    global $conf, $user, $page, $category_id, $image_ids, $category_name;
13    load_language('plugin.lang', VAG_PATH);
14    $vag = & $conf['virtual_AutoGrant'];
15      # Note:  don't change it if existing
16    if ( 'new' == $_POST['category_type'] ) {
17      if ( $vag['set_private'] == 1 ) set_cat_status(array($category_id), 'private');
18        else set_cat_status(array($category_id), 'public');
19      if ( $vag['grant_to_creator'] == 1 ) $insert[] = array('user_id' => $user['id'], 'cat_id' => $category_id);
20      if ( $user['id'] != $conf['webmaster_id'] and $vag['grant_to_webmaster'] == 1 )
21        $insert[] = array('user_id' => $conf['webmaster_id'], 'cat_id' => $category_id);
22      if ( $vag['grant_to_creator'] == 1 or $vag['grant_to_webmaster'] == 1 and $vag['set_private'] == 1 )
23        mass_inserts(USER_ACCESS_TABLE, array('user_id','cat_id'), $insert);
24      array_push( $page['infos'], sprintf( l10n('You have got a private access to %s'), '<em>'.$category_name.'</em>') );
25    }
26    // Who can see New image_ids
27    if (count($image_ids) == 0) return true;
28    if ( $vag['set_who_can_see'] == 0 ) return true;
29    if ( is_webmaster() and $vag['webmaster_set_who_can_see'] == 1) return true;
30    // New image_ids which are associated to a public category at least
31    if ($vag['ignore_who_can_see_on_private'] == 1)
32      $image_ids = array_from_query('SELECT image_id FROM ' . IMAGE_CATEGORY_TABLE 
33          . ' WHERE category_id IN (SELECT id FROM ' . CATEGORIES_TABLE . ' WHERE status = \'public\')'
34          . ' AND image_id IN ('.implode(',', $image_ids).');');
35    if (count($image_ids) > 0) { 
36      $r = pwg_query('UPDATE '.IMAGES_TABLE.' SET level = ' . $user['level'] . ' WHERE level < '. $user['level'] 
37            . ' AND id IN ('.implode(',', $image_ids).');');
38      array_push( $page['infos'], 
39        l10n_dec( 'Virtual AutoGrant has forced "Who can see" on %d image', 
40                  'Virtual AutoGrant has forced "Who can see" on %d images', 
41                  pwg_db_changes($r) ) . ' - ' .
42        sprintf( l10n('Privacy level set to "%s"'), l10n( sprintf('Level %d', $user['level']) ) )
43        );
44    }
45    return true;
46  }
47} 
48
49// API cases : Just do it   
50if ( !function_exists( 'VAG_add_case_by_API' ) ) {
51        add_event_handler('invalidate_user_cache', 'VAG_add_case_by_API', 22 );
52
53        function  VAG_add_case_by_API($full) {
54    if ( !function_exists( 'ws_categories_add' ) ) return false; // That isn't an API request
55          global $user, $conf;
56    $vag = & $conf['virtual_AutoGrant'];
57    if ( isset($_REQUEST['method']) and $_REQUEST['method'] == 'pwg.categories.add' ) {
58      list($inserted_id) = pwg_db_fetch_row(pwg_query('SELECT MAX(id) FROM '.CATEGORIES_TABLE
59      . ' WHERE name = \'' .pwg_db_real_escape_string($_REQUEST['name']) . '\' AND site_id IS NULL;'));
60      # Note:  AND site_id IS NULL because synchro could be running in //
61      if ( $vag['set_private_by_API'] == 1 ) set_cat_status(array($inserted_id), 'private');
62        else set_cat_status(array($inserted_id), 'public');
63      if ( ($vag['grant_to_creator'] == 1 or $vag['grant_to_webmaster'] == 1 ) and $vag['set_private_by_API'] == 1 ) {
64        if ( $vag['grant_to_creator'] == 1 ) $insert[] = array('user_id' => $user['id'], 'cat_id' => $inserted_id);
65        if ( $user['id'] != $conf['webmaster_id'] and $vag['grant_to_webmaster'] == 1 )
66          $insert[] = array('user_id' => $conf['webmaster_id'], 'cat_id' => $inserted_id);
67        mass_inserts(USER_ACCESS_TABLE, array('user_id','cat_id'), $insert);
68      }
69    }
70    // "Who can see" management ( only for API, Synchro or old HTTP management on gallery side are ignored )
71    if ( isset($_REQUEST['method']) and $_REQUEST['method'] == 'pwg.images.add' and isset($_REQUEST['original_sum']) 
72        and $vag['set_who_can_see'] == 1 ) {
73      # image to update
74      if ('md5sum' == $conf['uniqueness_mode']) $where_clause = "md5sum = '".pwg_db_real_escape_string($_REQUEST['original_sum'])."'";
75      if ('filename' == $conf['uniqueness_mode'] and isset($_REQUEST['original_filename']) ) 
76          $where_clause = "file = '".pwg_db_real_escape_string($_REQUEST['original_filename'])."'";
77      if ( !isset($where_clause) or (is_webmaster() and $vag['webmaster_set_who_can_see'] == 1) ) return false;
78      if ( $user['level'] == $conf['available_permission_levels'][0] ) return false;   // Non privacy level won't force it
79      if (!isset($_REQUEST['categories'])) return false;
80      $tokens = explode(';', pwg_db_real_escape_string($_REQUEST['categories']));
81      $cat_ids = array();
82      foreach ($tokens as $token) {
83        list($cat_id) = explode(',', $token);
84        if (!preg_match('/^\d+$/', $cat_id)) continue;
85        array_push($cat_ids, $cat_id);
86      }
87      $cat_ids = array_unique($cat_ids);
88      if (count($cat_ids) != 0) $w = ' AND id IN ('.implode(',', $cat_ids).')'; else $w ='';
89      list($count_public_cat) = pwg_db_fetch_row(pwg_query('SELECT count(*) FROM '.CATEGORIES_TABLE
90      . ' WHERE status = \'public\' ' . $w . ' AND site_id IS NULL;'));
91      // No public category = all are private => maybe we can ignore "Who can see"
92      if ( $count_public_cat == 0 and $vag['ignore_who_can_see_on_private'] == 1 ) return false;
93      $r = pwg_query('UPDATE '.IMAGES_TABLE.' SET level = ' . $user['level'] . ' WHERE level < '. $user['level'] 
94          .' AND ' . $where_clause . ';');
95    }
96        }
97}
98// Configuration menu
99if ( !function_exists( 'VAG_admin_menu' ) ) {
100        if ( defined('IN_ADMIN') and IN_ADMIN ) {
101                add_event_handler('get_admin_plugin_menu_links', 'VAG_admin_menu');
102    function VAG_admin_menu($menu) {
103        global $conf;
104        array_push($menu, array(
105                'NAME' => 'Virtual AutoGrant',
106                'URL' => get_root_url().'admin.php?page=plugin-'.basename(VAG_PATH)
107        ));
108        return $menu;
109    }
110  }
111}
112?>
Note: See TracBrowser for help on using the repository browser.