1<?php
2/**
3 * @package tikiwiki
4 */
5// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
6//
7// All Rights Reserved. See copyright.txt for details and a complete list of authors.
8// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
9// $Id$
10
11include_once('tiki-setup.php');
12$categlib = TikiLib::lib('categ');
13$access->check_feature('feature_group_watches');
14$access->check_permission(['tiki_p_admin_users']);
15if (! isset($_REQUEST['objectId']) || ! isset($_REQUEST['watch_event'])) {
16	Feedback::errorPage(tr('Not enough information to display this page'));
17}
18
19$objectType = isset($_REQUEST['objectType']) ? $_REQUEST['objectType'] : null;
20
21$auto_query_args = ['objectId', 'objectType', 'objectName', 'watch_event', 'referer', 'objectHref'];
22$all_groups = $userlib->list_all_groups();
23$smarty->assign_by_ref('all_groups', $all_groups);
24if ($objectType == 'Category') {
25	$smarty->assign('cat', 'y');
26	$categoryIdentifier = $_REQUEST['objectId'];
27	if ($categoryIdentifier) {
28		$category = $categlib->get_category($_REQUEST['objectId']);
29		$extendedTargets = $category['descendants'];
30		$smarty->assign('isTop', 'n');
31	} else {
32		$extendedTargets = $categlib->getCategories();
33		$smarty->assign('isTop', 'y');
34	}
35	if (count($extendedTargets) > 0) {
36		$smarty->assign('desc', 'y');
37	}
38}
39
40if (! isset($_REQUEST['referer']) && isset($_SERVER['HTTP_REFERER'])) {
41	$_REQUEST['referer'] = $_SERVER['HTTP_REFERER'];
42}
43if (isset($_REQUEST['referer'])) {
44	$smarty->assign('referer', $_REQUEST['referer']);
45}
46
47if (isset($_REQUEST['assign']) && $access->checkCsrf()) {
48	$objectName = isset($_REQUEST['objectName']) ? $_REQUEST['objectName'] : null;
49	$objectHref = isset($_REQUEST['objectHref']) ? $_REQUEST['objectHref'] : null;
50	$addedGroups = [];
51	$deletedGroups = [];
52	if (! isset($_REQUEST['checked'])) {
53		$_REQUEST['checked'] = [];
54	}
55	$old_watches = $tikilib->get_groups_watching($_REQUEST['objectId'], $_REQUEST['watch_event'], $objectType);
56	foreach ($all_groups as $g) {
57		if (in_array($g, $_REQUEST['checked']) && ! in_array($g, $old_watches)) {
58			$tikilib->add_group_watch($g, $_REQUEST['watch_event'], $_REQUEST['objectId'], $objectType, $objectName, $objectHref);
59			$addedGroups[] = $g;
60		} elseif (! in_array($g, $_REQUEST['checked']) && in_array($g, $old_watches)) {
61			$tikilib->remove_group_watch($g, $_REQUEST['watch_event'], $_REQUEST['objectId'], $objectType);
62			$deletedGroups[] = $g;
63		}
64		$smarty->assign_by_ref('addedGroups', $addedGroups);
65		$smarty->assign_by_ref('deletedGroups', $deletedGroups);
66		$group_watches = $_REQUEST['checked'];
67	}
68	if ($objectType == 'Category') {
69		$addedGroupsDesc = [];
70		$deletedGroupsDesc = [];
71		$catTreeNodes = [];
72		foreach ($all_groups as $g) {
73			if (isset($_REQUEST[$g]) && $_REQUEST[$g] == 'cat_add_desc') {
74				$categlib->group_watch_category_and_descendants($g, $_REQUEST['objectId'], $objectName, false);
75				if ($g != 'Anonymous') {
76					$addedGroupsDesc[] = $g;
77				}
78			}
79			if (isset($_REQUEST[$g]) && $_REQUEST[$g] == 'cat_remove_desc') {
80				$categlib->group_unwatch_category_and_descendants($g, $_REQUEST['objectId'], false);
81				if ($g != 'Anonymous') {
82					$deletedGroupsDesc[] = $g;
83				}
84			}
85		}
86		$smarty->assign_by_ref('addedGroupsDesc', $addedGroupsDesc);
87		$smarty->assign_by_ref('deletedGroupsDesc', $deletedGroupsDesc);
88
89		if (! empty($addedGroupsDesc) || ! empty($deletedGroupsDesc)) {
90			foreach ($extendedTargets as $d) {
91				$catinfo = $categlib->get_category($d);
92				$catTreeNodes[] = [
93					'id' => $catinfo['categId'],
94					'parent' => $catinfo['parentId'],
95					'data' => $catinfo['name'],
96				];
97			}
98			include_once('lib/tree/BrowseTreeMaker.php');
99			$tm = new BrowseTreeMaker('categ');
100			$res = $tm->make_tree($catTreeNodes[0]['parent'], $catTreeNodes);
101			$smarty->assign('tree', $res);
102		}
103	}
104} else {
105	$group_watches = $tikilib->get_groups_watching($_REQUEST['objectId'], $_REQUEST['watch_event'], $objectType);
106}
107
108$smarty->assign_by_ref('group_watches', $group_watches);
109$smarty->assign('mid', 'tiki-object_watches.tpl');
110$smarty->display('tiki.tpl');
111