|
12 | 12 | /** |
13 | 13 | * XOOPS tag management module |
14 | 14 | * |
15 | | - * @package tag |
| 15 | + * @package XoopsModules\Tag |
16 | 16 | * @copyright {@link http://sourceforge.net/projects/xoops/ The XOOPS Project} |
17 | 17 | * @license {@link http://www.fsf.org/copyleft/gpl.html GNU public license} |
18 | 18 | * @author Taiwen Jiang <phppp@users.sourceforge.net> |
|
26 | 26 | require_once __DIR__ . '/admin_header.php'; |
27 | 27 | require_once $GLOBALS['xoops']->path('/class/xoopsformloader.php'); |
28 | 28 |
|
29 | | -$adminObject = \Xmf\Module\Admin::getInstance(); |
30 | | - |
31 | 29 | xoops_cp_header(); |
32 | 30 |
|
33 | | -require_once $GLOBALS['xoops']->path('/modules/tag/include/vars.php'); |
| 31 | +/** @var XoopsModules\Tag\Helper $helper */ |
| 32 | +require_once $helper->path('include/vars.php'); |
| 33 | + |
| 34 | +/** @var Xmf\Module\Admin $adminObject */ |
34 | 35 | $adminObject->displayNavigation(basename(__FILE__)); |
35 | 36 |
|
36 | 37 | $limit = $GLOBALS['xoopsModuleConfig']['items_perpage']; |
37 | 38 | $modid = Request::getInt('modid', Constants::DEFAULT_ID); |
38 | 39 | $start = Request::getInt('start', Constants::BEGINNING); |
39 | 40 | $status = Request::getInt('status', Constants::STATUS_ALL, 'GET'); |
40 | | -///** @var \XoopsModules\Tag\TagHandler $tagHandler */ |
41 | | -//$tagHandler = xoops_getModuleHandler('tag', $moduleDirName); |
42 | | -//$linkHandler = xoops_getModuleHandler('link', $moduleDirName); |
43 | 41 |
|
44 | | -/** @var Tag\TagHandler $tagHandler */ |
45 | | -/** @var Tag\LinkHandler $linkHandler */ |
| 42 | +/** |
| 43 | + * @var XoopsModules\Tag\TagHandler $tagHandler |
| 44 | + * @var XoopsModules\Tag\LinkHandler $linkHandler |
| 45 | + */ |
46 | 46 | $tagHandler = Tag\Helper::getInstance()->getHandler('Tag'); |
47 | 47 | $linkHandler = Tag\Helper::getInstance()->getHandler('Link'); |
48 | 48 |
|
49 | | -$postTags = Request::getArray('tags', [], 'POST'); |
50 | | -if (!empty($postTags)) { |
51 | | - $msgDBUpdated = ''; |
52 | | - foreach ($postTags as $tag => $tag_status) { |
| 49 | +$post_tags = Request::getArray('tags', [], 'POST'); |
| 50 | +if (!empty($post_tags)) { |
| 51 | + $msg_db_updated = ''; |
| 52 | + /** {@internal - Test using following code to reduce dB accesses }} */ |
| 53 | + /* |
| 54 | + $postTagIdArray = array_keys($post_tags); |
| 55 | + $postTagIdArray = array_map('intval', $postTagIdArray); |
| 56 | + $postTagIdArray = array_unique($postTagIdArray); |
| 57 | + $criteria = new \Criteria('tag_id', '(' . implode(',', $postTagIdArray) . ')', 'IN'); |
| 58 | + $tagObjArray = $tagHandler->getAll($criteria); |
| 59 | + foreach ($post_tags as $tagId => $postTagStatus) { |
| 60 | + if ($tagObjArray[$tagId]->isNew() || !$tagObjArray[$tagId]->getVar('tag_id')) { |
| 61 | + continue; |
| 62 | + } |
| 63 | + if ($postTagStatus < Constants::STATUS_ACTIVE) { |
| 64 | + $tagHandler->delete($tagObjArray[$tagId]); |
| 65 | + } elseif ($postTagStatus != $tagObjArray[$tagId]->getVar('tag_status')) { |
| 66 | + $tagObjArray[$tagId]->setVar('tag_status', $postTagStatus); |
| 67 | + $tagHandler->insert($tagObjArray[$tagId]); |
| 68 | + $msg_db_updated = _AM_TAG_DB_UPDATED; |
| 69 | + } |
| 70 | + } |
| 71 | + */ |
| 72 | + foreach ($post_tags as $tag => $tag_status) { |
53 | 73 | $tag_obj = $tagHandler->get($tag); |
54 | 74 | if (!($tag_obj instanceof Tag\Tag) || !$tag_obj->getVar('tag_id')) { |
55 | 75 | continue; |
|
59 | 79 | } elseif ($tag_status != $tag_obj->getVar('tag_status')) { |
60 | 80 | $tag_obj->setVar('tag_status', $tag_status); |
61 | 81 | $tagHandler->insert($tag_obj); |
62 | | - $msgDBUpdated = _AM_TAG_DB_UPDATED; |
| 82 | + $msg_db_updated = _AM_TAG_DB_UPDATED; |
63 | 83 | } |
64 | 84 | } |
65 | | - redirect_header("admin.tag.php?modid={$modid}&start={$start}&status={$status}", Constants::REDIRECT_DELAY_MEDIUM, $msgDBUpdated); |
| 85 | + $helper->redirect("admin/admin.tag.php?modid={$modid}&start={$start}&status={$status}", Constants::REDIRECT_DELAY_MEDIUM, $msg_db_updated); |
66 | 86 | } |
67 | 87 |
|
68 | | -$sql = 'SELECT tag_modid, COUNT(DISTINCT tag_id) AS count_tag'; |
69 | | -$sql .= ' FROM ' . $GLOBALS['xoopsDB']->prefix('tag_link'); |
70 | | -$sql .= ' GROUP BY tag_modid'; |
71 | 88 | $counts_module = []; |
72 | 89 | $module_list = []; |
73 | | -$result = $GLOBALS['xoopsDB']->query($sql); |
| 90 | + |
| 91 | +/** {#internal use direct SQL instead of Tag\TagHandler CRUD operations because XOOPS can't handle COUNT(DISTINCT xx) }} */ |
| 92 | +$sql = 'SELECT tag_modid, COUNT(DISTINCT tag_id) AS count_tag' . ' FROM ' . $GLOBALS['xoopsDB']->prefix('tag_link') . ' GROUP BY tag_modid'; |
| 93 | +$result = $GLOBALS['xoopsDB']->query($sql); |
| 94 | + |
74 | 95 | if (false === $result) { |
75 | 96 | xoops_error($GLOBALS['xoopsDB']->error()); |
76 | 97 | } else { |
|
83 | 104 | $module_list = $moduleHandler->getList(new \Criteria('mid', '(' . implode(', ', array_keys($counts_module)) . ')', 'IN')); |
84 | 105 | } |
85 | 106 | } |
86 | | - |
87 | | -$opform = new \XoopsSimpleForm('', 'moduleform', xoops_getenv('PHP_SELF'), 'get', true); |
| 107 | +// |
| 108 | +$opform = new \XoopsSimpleForm('', 'moduleform', $_SERVER['SCRIPT_NAME'], 'get', true); |
| 109 | +//$opform = new \XoopsSimpleForm('', 'moduleform', xoops_getenv('SCRIPT_NAME'), 'post', true); |
88 | 110 | $tray = new \XoopsFormElementTray(''); |
89 | 111 | $mod_select = new \XoopsFormSelect(_SELECT, 'modid', $modid); |
90 | 112 | $mod_select->addOption(0, _ALL); |
|
103 | 125 |
|
104 | 126 | $criteria = new \CriteriaCompo(); |
105 | 127 | $criteria->setSort('a'); |
106 | | -$criteria->setOrder('ASC'); |
| 128 | +$criteria->order = 'ASC'; // patch for XOOPS <= 2.5.10, does not set order correctly using setOrder() method |
107 | 129 | $criteria->setStart($start); |
108 | 130 | $criteria->setLimit($limit); |
109 | 131 | if ($status >= Constants::STATUS_ACTIVE) { |
|
112 | 134 | if (!empty($modid)) { |
113 | 135 | $criteria->add(new \Criteria('l.tag_modid', $modid)); |
114 | 136 | } |
115 | | -$tags = &$tagHandler->getByLimit(0, 0, $criteria, null, false); |
| 137 | +$tags = $tagHandler->getByLimit(0, 0, $criteria, null, false); |
116 | 138 |
|
117 | 139 | $form_tags = "<form name='tags' method='post' action='" |
118 | | - . xoops_getenv('PHP_SELF') |
| 140 | + . $_SERVER['SCRIPT_NAME'] |
119 | 141 | . "'>\n" |
120 | | - . "<table style='border-width: 0px; margin: 1px; padding: 4px;' cellspacing='1' class='outer width100'>\n" |
| 142 | + . "<table style='margin: 1px; padding: 4px;' class='outer width100 bnone bspacing1'>\n" |
121 | 143 | . " <thead>\n" |
122 | 144 | . " <tr class='txtcenter'>\n" |
123 | 145 | . " <th class='bg3'>" |
|
139 | 161 | $form_tags .= " <tr><td colspan='4'>" . _NONE . "</td></tr>\n"; |
140 | 162 | } else { |
141 | 163 | $class_tr = 'odd'; |
142 | | - $i = 0; |
143 | 164 | foreach (array_keys($tags) as $key) { |
144 | 165 | $form_tags .= " <tr class='{$class_tr}'>\n" |
145 | 166 | . ' <td>' |
|
161 | 182 | . " </tr>\n"; |
162 | 183 | $class_tr = ('even' === $class_tr) ? 'odd' : 'even'; |
163 | 184 | } |
| 185 | + |
164 | 186 | if (!empty($start) || (count($tags) >= $limit)) { |
165 | 187 | $count_tag = $tagHandler->getCount($criteria); |
166 | 188 |
|
|
0 commit comments