source: extensions/NBC_News/trunk/admin/news_perm.php @ 5179

Last change on this file since 5179 was 5179, checked in by Eric, 14 years ago

[NBC_News]

  • Initial commit for Piwigo 2.0.x : Not fully functionnal and a lot work to do...
  • Property svn:eol-style set to LF
File size: 13.8 KB
Line 
1<?php
2
3global $user, $template, $lang, $conf, $page;
4
5if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
6
7include_once(NBC_NEWS_PATH.'include/constants.php');
8include_once(NBC_NEWS_PATH.'include/functions_news.inc.php');
9include(get_language_filepath('plugin.lang.php', NBC_NEWS_PATH));
10 
11
12
13// Gestion des onglets
14include_once(PHPWG_ROOT_PATH . 'admin/include/functions_tabsheet.inc.php');
15
16$page['tab'] = 'NewsAdmin';
17
18$page_news_admin = get_admin_plugin_menu_link(dirname(__FILE__).'/news_admin.php');
19
20$page['tabsheet'] = array(
21    'NewsAdmin' => array('caption' => l10n('title_admin_news'), 'url' => add_url_params($page_news_admin, array('tab' => 'NewsAdmin'))),
22    'Users' => array('caption' => l10n('title_users'), 'url' => add_url_params($page_news_admin, array('tab' => 'Users'))),
23    'Groups' => array('caption' => l10n('title_groups'), 'url' => add_url_params($page_news_admin, array('tab' => 'Groups'))),
24    'Config' => array('caption' => l10n('config'), 'url' => add_url_params($page_news_admin, array('tab' => 'Config'))),
25    );
26
27$page['tabsheet'][$page['tab']]['selected'] = true;
28template_assign_tabsheet();
29
30
31
32// +-----------------------------------------------------------------------+
33// |                       variable initialization                         |
34// +-----------------------------------------------------------------------+
35
36// if the news is not correct (not numeric, not private)
37if (isset($_GET['new_id']) and is_numeric($_GET['new_id']))
38{
39  $query = '
40SELECT status
41  FROM '.NEWS_TABLE.' as n
42  WHERE n.id = '.$_GET['new_id'].'
43;';
44  list($status) = mysql_fetch_array(pwg_query($query));
45 
46  if ('private' == $status)
47  {
48    $page['new_id'] = $_GET['new_id'];
49  }
50}
51
52if (!isset($page['new_id']))
53{
54  $query = '
55SELECT id
56  FROM '.NEWS_TABLE.'
57  WHERE status = \'private\'
58  LIMIT 0,1
59;';
60
61  list($page['new_id']) = mysql_fetch_array(pwg_query($query));
62}
63
64// +-----------------------------------------------------------------------+
65// |                           form submission                             |
66// +-----------------------------------------------------------------------+
67
68if (isset($_POST) and false)
69{
70  echo '<pre>';
71  print_r($_POST);
72  echo '</pre>';
73}
74
75if ( isset($_POST['deny_granted_groups_submit'])
76     and isset($_POST['deny_groups'])
77     and count($_POST['deny_groups']) > 0
78     and !is_adviser() )
79{
80  // if you forbid access to a news
81  $query = '
82DELETE
83  FROM '.NEWS_GROUP_ACCESS_TABLE.'
84  WHERE group_id IN ('.implode(',', $_POST['deny_groups']).')
85    AND new_id = '.$page['new_id'].'
86;';
87  pwg_query($query);
88}
89else if (isset($_POST['deny_refused_groups_submit'])
90         and isset($_POST['refuse_groups'])
91         and count($_POST['refuse_groups']) > 0
92        and !is_adviser() )
93{
94  // if you forbid access to a news
95  $query = '
96DELETE
97  FROM '.NEWS_GROUP_REFUSED_TABLE.'
98  WHERE group_id IN ('.implode(',', $_POST['refuse_groups']).')
99    AND new_id = '.$page['new_id'].'
100;';
101  pwg_query($query);
102}
103else if (isset($_POST['grant_groups_submit'])
104         and isset($_POST['grant_groups'])
105         and count($_POST['grant_groups']) > 0
106         and !is_adviser() )
107{
108  $inserts = array();
109 
110  foreach ($_POST['grant_groups'] as $group_id)
111  {
112    array_push($inserts, array('group_id' => $group_id,
113                               'new_id' => $page['new_id']));
114  }
115
116  mass_inserts(NEWS_GROUP_ACCESS_TABLE, array('group_id','new_id'), $inserts);
117}
118else if (isset($_POST['refuse_groups_submit'])
119         and isset($_POST['grant_groups'])
120         and count($_POST['grant_groups']) > 0
121         and !is_adviser() )
122{
123  $inserts = array();
124 
125  foreach ($_POST['grant_groups'] as $group_id)
126  {
127    array_push($inserts, array('group_id' => $group_id,
128                               'new_id' => $page['new_id']));
129  }
130
131  mass_inserts(NEWS_GROUP_REFUSED_TABLE, array('group_id','new_id'), $inserts);
132}
133else if (isset($_POST['deny_granted_users_submit'])
134         and isset($_POST['deny_users'])
135         and count($_POST['deny_users']) > 0
136         and !is_adviser() )
137{
138  // if you forbid access to a news
139  $query = '
140DELETE
141  FROM '.NEWS_USER_ACCESS_TABLE.'
142  WHERE user_id IN ('.implode(',', $_POST['deny_users']).')
143    AND new_id = '.$page['new_id'].'
144;';
145  pwg_query($query);
146}
147else if (isset($_POST['deny_refused_users_submit'])
148         and isset($_POST['refuse_users'])
149         and count($_POST['refuse_users']) > 0
150         and !is_adviser() )
151{
152  // if you forbid access to a news
153  $query = '
154DELETE
155  FROM '.NEWS_USER_REFUSED_TABLE.'
156  WHERE user_id IN ('.implode(',', $_POST['refuse_users']).')
157    AND new_id = '.$page['new_id'].'
158;';
159  pwg_query($query);
160}
161else if (isset($_POST['grant_users_submit'])
162         and isset($_POST['grant_users'])
163         and count($_POST['grant_users']) > 0
164         and !is_adviser() )
165{
166  $inserts = array();
167 
168  foreach ($_POST['grant_users'] as $user_id)
169  {
170    array_push($inserts, array('user_id' => $user_id,
171                               'new_id' => $page['new_id']));
172  }
173
174  mass_inserts(NEWS_USER_ACCESS_TABLE, array('user_id','new_id'), $inserts);
175}
176else if (isset($_POST['refuse_users_submit'])
177         and isset($_POST['grant_users'])
178         and count($_POST['grant_users']) > 0
179         and !is_adviser() )
180{
181  $inserts = array();
182 
183  foreach ($_POST['grant_users'] as $user_id)
184  {
185    array_push($inserts, array('user_id' => $user_id,
186                               'new_id' => $page['new_id']));
187  }
188
189  mass_inserts(NEWS_USER_REFUSED_TABLE, array('user_id','new_id'), $inserts);
190}
191else if (isset($_POST['refuse_indirect_users_submit'])
192         and isset($_POST['grant_indirect_users'])
193         and count($_POST['grant_indirect_users']) > 0
194         and !is_adviser() )
195{
196  $inserts = array();
197 
198  foreach ($_POST['grant_indirect_users'] as $user_id)
199  {
200    array_push($inserts, array('user_id' => $user_id,
201                               'new_id' => $page['new_id']));
202  }
203
204  mass_inserts(NEWS_USER_REFUSED_TABLE, array('user_id','new_id'), $inserts);
205}
206
207// +-----------------------------------------------------------------------+
208// |                       template initialization                         |
209// +-----------------------------------------------------------------------+
210
211$template->set_filenames(array('news_perm' => NBC_NEWS_PATH . 'template/admin/news_perm.tpl'));
212
213  $query = '
214SELECT nt.title
215  FROM '.NEWS_TRANSLATION_TABLE.' as nt
216  INNER JOIN '.NEWS_TABLE.' as n ON n.id = nt.new_id
217  WHERE nt.new_id = '.$page['new_id'].'
218  AND nt.language = \''.$user['language'].'\'
219;';
220  $result = pwg_query($query);
221
222$row = mysql_fetch_array($result);
223
224$template->assign_vars(
225  array(
226    'NEWS_NAV' => '[ '.$page['new_id'].'] - '.$row['title'],
227    'U_HELP' => PHPWG_ROOT_PATH.'popuphelp.php?page=news_perm',
228    'F_ACTION' => add_url_params(get_admin_plugin_menu_link(dirname(__FILE__).'/news_perm.php'), array('new_id' => $page['new_id'])),
229    )
230  );
231
232// +-----------------------------------------------------------------------+
233// |                          form construction                            |
234// +-----------------------------------------------------------------------+
235
236// groups denied are the groups not granted. So we need to find all groups
237// minus groups granted to find groups denied.
238
239$groups = array();
240
241// -- Modif Nicco pour ordonner par name
242$query = '
243SELECT id, name
244  FROM '.GROUPS_TABLE.'
245  ORDER BY name
246;';
247// -- Modif Nicco pour ordonner par name
248$result = pwg_query($query);
249
250while ($row = mysql_fetch_array($result))
251{
252  $groups[$row['id']] = $row['name'];
253}
254
255// -- Modif Nicco pour ordonner par name
256$query = '
257SELECT ngdt.group_id, gt.name
258  FROM '.NEWS_GROUP_REFUSED_TABLE.' as ngdt, '.GROUPS_TABLE.' as gt
259  WHERE ngdt.new_id = '.$page['new_id'].'
260  AND ngdt.group_id = gt.id
261  ORDER BY gt.name
262;';
263// -- Modif Nicco pour ordonner par name
264
265$group_refused_ids = array_from_query($query, 'group_id');
266
267// groups refused to access the category
268foreach ($group_refused_ids as $group_id)
269{
270  $template->assign_block_vars(
271    'group_refused',
272    array(
273      'NAME'=>$groups[$group_id],
274      'ID'=>$group_id
275      )
276    );
277}
278
279// -- Modif Nicco pour ordonner par name
280$query = '
281SELECT ngat.group_id, gt.name
282  FROM '.NEWS_GROUP_ACCESS_TABLE.' as ngat, '.GROUPS_TABLE.' as gt
283  WHERE ngat.new_id = '.$page['new_id'].'
284  AND ngat.group_id = gt.id
285  ORDER BY gt.name
286;';
287// -- Modif Nicco pour ordonner par name
288
289$group_granted_ids = array_from_query($query, 'group_id');
290
291// groups granted to access the news
292foreach ($group_granted_ids as $group_id)
293{
294  $template->assign_block_vars(
295    'group_granted',
296    array(
297      'NAME'=>$groups[$group_id],
298      'ID'=>$group_id
299      )
300    );
301}
302
303// groups denied
304foreach (array_diff(array_keys($groups), array_merge($group_granted_ids, $group_refused_ids)) as $group_id)
305{
306  $template->assign_block_vars(
307    'group_denied',
308    array(
309      'NAME'=>$groups[$group_id],
310      'ID'=>$group_id
311      )
312    );
313}
314
315// users...
316$users = array();
317
318$query = '
319SELECT '.$conf['user_fields']['id'].' AS id,
320       '.$conf['user_fields']['username'].' AS username
321  FROM '.USERS_TABLE.'
322  ORDER BY username
323;';
324$result = pwg_query($query);
325while($row = mysql_fetch_array($result))
326{
327  $users[$row['id']] = $row['username'];
328}
329
330
331$query = '
332SELECT nud.user_id, u.username
333  FROM '.NEWS_USER_REFUSED_TABLE.' as nud, '.USERS_TABLE.' as u
334  WHERE new_id = '.$page['new_id'].'
335  AND nud.user_id = u.id
336  ORDER BY u.username
337;';
338
339$user_refused_direct_ids = array_from_query($query, 'user_id');
340
341foreach ($user_refused_direct_ids as $user_id)
342{
343  $template->assign_block_vars(
344    'user_refused',
345    array(
346      'NAME'=>$users[$user_id],
347      'ID'=>$user_id
348      )
349    );
350}
351
352$user_refused_indirect_ids = array();
353if (count($group_refused_ids) > 0)
354{
355  $refused_groups = array();
356
357  $query = '
358SELECT ug.user_id, ug.group_id, u.username
359  FROM '.USER_GROUP_TABLE.' as ug, '.USERS_TABLE.' as u
360  WHERE group_id IN ('.implode(',', $group_refused_ids).')
361  AND ug.user_id = u.id
362  ORDER BY u.username
363';
364  $result = pwg_query($query);
365  while ($row = mysql_fetch_array($result))
366  {
367    if (!isset($refused_groups[$row['group_id']]))
368    {
369      $refused_groups[$row['group_id']] = array();
370    }
371    array_push($refused_groups[$row['group_id']], $row['user_id']);
372  }
373
374  $user_refused_by_group_ids = array();
375
376  foreach ($refused_groups as $group_users)
377  {
378    $user_refused_by_group_ids = array_merge($user_refused_by_group_ids,
379                                             $group_users);
380  }
381  $user_refused_by_group_ids = array_unique($user_refused_by_group_ids);
382 
383 
384  $user_refused_indirect_ids = array_diff($user_refused_by_group_ids,
385                                          $user_refused_direct_ids);
386
387  foreach ($user_refused_indirect_ids as $user_id)
388  {
389    $group = '';
390   
391    foreach ($refused_groups as $group_id => $group_users)
392    {
393      if (in_array($user_id, $group_users))
394      {
395        $group = $groups[$group_id];
396        break;
397      }
398    }
399
400    $template->assign_block_vars(
401      'user_refused_indirect',
402      array(
403        'NAME'=>$users[$user_id],
404        'GROUP'=>$group
405        )
406      );
407  }
408}
409
410
411
412$query = '
413SELECT nuat.user_id, ut.username
414  FROM '.NEWS_USER_ACCESS_TABLE.' as nuat, '.USERS_TABLE.' as ut
415  WHERE new_id = '.$page['new_id'].'
416  AND nuat.user_id = ut.id
417  ORDER BY ut.username
418;';
419$user_granted_direct_ids = array_diff(array_from_query($query, 'user_id'), $user_refused_indirect_ids, $user_refused_direct_ids);
420
421foreach ($user_granted_direct_ids as $user_id)
422{
423  $template->assign_block_vars(
424    'user_granted',
425    array(
426      'NAME'=>$users[$user_id],
427      'ID'=>$user_id
428      )
429    );
430}
431
432$user_granted_indirect_ids = array();
433if (count($group_granted_ids) > 0)
434{
435  $granted_groups = array();
436
437  $query = '
438SELECT ugt.user_id, ugt.group_id, ut.username
439  FROM '.USER_GROUP_TABLE.' as ugt, '.USERS_TABLE.' as ut
440  WHERE group_id IN ('.implode(',', $group_granted_ids).')
441  AND ugt.user_id = ut.id
442  ORDER BY ut.username
443';
444  $result = pwg_query($query);
445  while ($row = mysql_fetch_array($result))
446  {
447    if (!isset($granted_groups[$row['group_id']]) or isset($refused_groups[$row['group_id']]))
448    {
449      $granted_groups[$row['group_id']] = array();
450    }
451    array_push($granted_groups[$row['group_id']], $row['user_id']);
452  }
453
454  $user_granted_by_group_ids = array();
455
456  foreach ($granted_groups as $group_users)
457  {
458    $user_granted_by_group_ids = array_merge($user_granted_by_group_ids,
459                                             $group_users);
460  }
461  $user_granted_by_group_ids = array_unique($user_granted_by_group_ids);
462 
463 
464  $user_granted_indirect_ids = array_diff($user_granted_by_group_ids,
465                                          $user_granted_direct_ids,
466                                          $user_refused_indirect_ids,
467                                          $user_refused_direct_ids);
468
469  foreach ($user_granted_indirect_ids as $user_id)
470  {
471    $group = '';
472   
473    foreach ($granted_groups as $group_id => $group_users)
474    {
475      if (in_array($user_id, $group_users))
476      {
477        $group = $groups[$group_id];
478        break;
479      }
480    }
481
482    $template->assign_block_vars(
483      'user_granted_indirect',
484      array(
485        'ID'=>$user_id,
486        'NAME'=>$users[$user_id],
487        'GROUP'=>$group
488        )
489      );
490  }
491}
492
493$user_denied_ids = array_diff(array_keys($users),
494                              $user_granted_indirect_ids,
495                              $user_granted_direct_ids,
496                              $user_refused_indirect_ids,
497                              $user_refused_direct_ids);
498
499foreach ($user_denied_ids as $user_id)
500{
501  $template->assign_block_vars(
502    'user_denied',
503    array(
504      'NAME'=>$users[$user_id],
505      'ID'=>$user_id
506      )
507    );
508}
509
510
511// +-----------------------------------------------------------------------+
512// |                           sending html code                           |
513// +-----------------------------------------------------------------------+
514$template->assign_var_from_handle('ADMIN_CONTENT', 'news_perm');
515
516?>
Note: See TracBrowser for help on using the repository browser.