Last active
March 10, 2021 05:31
-
-
Save atsu666/5b65433658752dd713d1d9b8c5070d80 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| class ACMS_GET_Admin_Category_Index extends ACMS_GET_Admin | |
| { | |
| function get() | |
| { | |
| if (roleAvailableUser()) { | |
| if (!roleAuthorization('category_edit', BID)) { | |
| return false; | |
| } | |
| } else { | |
| if (!sessionWithCompilation()) { | |
| return false; | |
| } | |
| } | |
| $Tpl = new Template($this->tpl, new ACMS_Corrector()); | |
| $limits = configArray('admin_limit_option'); | |
| $limit = LIMIT ? LIMIT : $limits[config('admin_limit_default')]; | |
| $vars = array(); | |
| //---------------------- | |
| // category create auth | |
| if (0 | |
| || !roleAvailableUser() | |
| || (roleAvailableUser() && roleAuthorization('category_create', BID)) | |
| ) { | |
| $Tpl->add('action#categoryInsert'); | |
| } | |
| $layered = true; | |
| if (0 | |
| || config('admin_category_layered') === 'on' | |
| || TPL === 'ajax/arg/cid-reference.html' | |
| ) { | |
| $layered = false; | |
| } | |
| $_cid = $this->Get->get('_cid', 0); | |
| //--------- | |
| // refresh | |
| if (!$this->Post->isNull()) { | |
| $Tpl->add('refresh'); | |
| $vars['notice_mess'] = 'show'; | |
| } | |
| //------- | |
| // order | |
| $order = ORDER ? ORDER : 'sort-asc'; | |
| $vars['order:selected#' . $order] = config('attr_selected'); | |
| if ($order === 'sort-asc') { | |
| $vars['sortable'] = 'on'; | |
| } else { | |
| $vars['sortable'] = 'off'; | |
| } | |
| //------- | |
| // limit | |
| foreach ($limits as $val) { | |
| $_vars = array('limit' => $val); | |
| if ($limit == $val) { | |
| $_vars['selected'] = config('attr_selected'); | |
| } | |
| $Tpl->add('limit:loop', $_vars); | |
| } | |
| //----- | |
| // bid | |
| $target_bid = $this->Get->get('_bid', BID); | |
| $DB = DB::singleton(dsn()); | |
| $SQL = SQL::newSelect('category', 'master'); | |
| $SQL->addLeftJoin('blog', 'blog_id', 'category_blog_id'); | |
| $SQL->addLeftJoin('config_set', 'config_set_id', 'category_config_set_id'); | |
| ACMS_Filter::blogTree($SQL, $target_bid, 'ancestor-or-self'); | |
| $SQL->addSelect('category_id', null, 'master'); | |
| $SQL->addSelect('category_name', null, 'master'); | |
| $SQL->addSelect('category_parent', null, 'master'); | |
| $SQL->addSelect('category_left', null, 'master'); | |
| $SQL->addSelect('category_sort', null, 'master'); | |
| $SQL->addSelect('category_code', null, 'master'); | |
| $SQL->addSelect('category_status', null, 'master'); | |
| $SQL->addSelect('category_scope', null, 'master'); | |
| $SQL->addSelect('category_blog_id', null, 'master'); | |
| $SQL->addSelect('config_set_name'); | |
| $Where = SQL::newWhere(); | |
| $Where->addWhereOpr('category_blog_id', $target_bid, '=', 'OR', 'master'); | |
| $Where->addWhereOpr('category_scope', 'global', '=', 'OR', 'master'); | |
| $SQL->addWhere($Where); | |
| if ($layered) { | |
| $SQL->addWhereOpr('category_parent', $_cid, '=', 'AND', 'master'); | |
| } | |
| //--------- | |
| // keyword | |
| if (!!KEYWORD) { | |
| $SQL->addLeftJoin('fulltext', 'fulltext_cid', 'category_id', 'ft', 'master'); | |
| $keywords = preg_split(REGEX_SEPARATER, KEYWORD, -1, PREG_SPLIT_NO_EMPTY); | |
| foreach ( $keywords as $keyword ) { | |
| $SQL->addWhereOpr('fulltext_value', '%'.$keyword.'%', 'LIKE'); | |
| } | |
| } | |
| //-------- | |
| // amount | |
| $Amount = new SQL_Select($SQL); | |
| $Amount->addLeftJoin('entry', 'entry_category_id', 'category_id', 'entry', 'master'); | |
| $Amount->addSelect('entry_id', 'category_entry_amount', 'entry', 'COUNT'); | |
| $Amount->addGroup('category_id', 'master'); | |
| $Amount->addWhereOpr('entry_status', 'trash', '<>', 'AND', 'entry'); | |
| $cnts = $DB->query($Amount->get(dsn()), 'all'); | |
| if ($layered) { | |
| $Pager = new SQL_Select($SQL); | |
| $Pager->setSelect('DISTINCT(master.category_id)', 'category_amount', null, 'COUNT'); | |
| $Pager->setGroup(null); | |
| if (!$pageAmount = intval($DB->query($Pager->get(dsn()), 'one'))) { | |
| $Tpl->add('index#notFound'); | |
| $vars['notice_mess'] = 'show'; | |
| $Tpl->add(null, $vars); | |
| return $Tpl->get(); | |
| } | |
| $vars += $this->buildPager( | |
| PAGE, | |
| $limit, | |
| $pageAmount, | |
| config('admin_pager_delta'), | |
| config('admin_pager_cur_attr'), | |
| $Tpl, | |
| array(), | |
| array('admin' => ADMIN) | |
| ); | |
| $SQL->setLimit($limit, (PAGE - 1) * $limit); | |
| } | |
| foreach ($cnts as $cnt) { | |
| $total[$cnt['category_id']] = $cnt['category_entry_amount']; | |
| } | |
| ACMS_Filter::categoryOrder($SQL, $order); | |
| $q = $SQL->get(dsn()); | |
| $DB->query($q, 'fetch'); | |
| $row = $DB->fetch($q); | |
| $categoryIds = array(); | |
| $childCategories = array(); | |
| do { | |
| if (!empty($row['category_id'])) { | |
| $categoryIds[] = $row['category_id']; | |
| } | |
| } while ($row = $DB->fetch($q)); | |
| if ($layered) { | |
| $CHILD = SQL::newSelect('category'); | |
| $CHILD->addSelect('category_id'); | |
| $CHILD->addSelect('category_parent'); | |
| if (!empty($categoryIds)) { | |
| $CHILD->addWhereIn('category_parent', $categoryIds); | |
| } | |
| $all = $DB->query($CHILD->get(dsn()), 'all'); | |
| foreach ($all as $category) { | |
| $childCategories[$category['category_parent']] = $category['category_id']; | |
| } | |
| } | |
| $all = array(); | |
| $amount = array(); | |
| $parent = array(); | |
| $last = array(); | |
| $DB->query($q, 'fetch'); | |
| $row = $DB->fetch($q); | |
| do { | |
| $bid = intval($row['category_blog_id']); | |
| $cid = intval($row['category_id']); | |
| $pid = intval($row['category_parent']); | |
| $all[$pid][] = $row; | |
| $parent[$cid] = $pid; | |
| $last[$pid] = $cid; | |
| if (!isset($amount[$bid][$pid])) { | |
| $amount[$bid][$pid] = 0; | |
| } | |
| $amount[$bid][$pid] += 1; | |
| } while ($row = $DB->fetch($q)); | |
| $stack = array(); | |
| if ($layered) { | |
| $stack = isset($all[$_cid]) ? $all[$_cid] : array(); | |
| } else { | |
| $stack = $all[0]; | |
| } | |
| unset($all[0]); | |
| $last = array_flip($last); | |
| while ($row = array_shift($stack)) { | |
| $bid = intval($row['category_blog_id']); | |
| $cid = intval($row['category_id']); | |
| $pid = intval($row['category_parent']); | |
| $sort = intval($row['category_sort']); | |
| $Tpl->add('status#' . $row['category_status']); | |
| if (BID !== intval($row['category_blog_id'])) { | |
| $row['category_scope'] = 'parental'; | |
| $disabled = config('attr_disabled'); | |
| } else { | |
| $disabled = ''; | |
| } | |
| $blocks = array(); | |
| if (!empty($parent[$cid])) { | |
| $blocks[] = isset($last[$cid]) ? 'child#last' : 'child'; | |
| $_pid = $cid; | |
| while ($_pid = $parent[$_pid]) { | |
| if (empty($parent[$_pid])) { | |
| break; | |
| } | |
| $blocks[] = isset($last[$_pid]) ? 'descendant#last' : 'descendant'; | |
| } | |
| } | |
| $level = 0; | |
| foreach (array_reverse($blocks) as $block) { | |
| $Tpl->add($block); | |
| $Tpl->add('indent:loop'); | |
| $level++; | |
| } | |
| $Tpl->add('scope:touch#' . $row['category_scope']); | |
| $cvars = array( | |
| 'cid' => $cid, | |
| 'sort' => $sort, | |
| 'pcid' => $pid, | |
| 'name' => $row['category_name'], | |
| 'code' => $row['category_code'], | |
| 'scope' => $row['category_scope'], | |
| 'amount' => empty($total[$cid]) ? 0 : $total[$cid],//$row['category_entry_amount'], | |
| 'configSet' => $row['config_set_name'], | |
| 'disabled' => $disabled, | |
| 'level' => $level, | |
| ); | |
| $cbid = intval($row['category_blog_id']); | |
| if (BID === $cbid) { | |
| $Tpl->add('mine', array( | |
| 'itemLink' => acmsLink(array( | |
| 'bid' => BID, | |
| 'cid' => $cid, | |
| 'admin' => 'category_edit', | |
| )) | |
| )); | |
| } else { | |
| if (0 | |
| or (roleAvailableUser() && roleAuthorization('category_edit', $cbid)) | |
| or sessionWithAdministration($cbid) | |
| ) { | |
| $Tpl->add('notMinePermit', array( | |
| 'itemLink' => acmsLink(array( | |
| 'bid' => $cbid, | |
| 'cid' => $cid, | |
| 'admin' => 'category_edit', | |
| )) | |
| )); | |
| } else { | |
| $Tpl->add('notMine'); | |
| } | |
| } | |
| //------- | |
| // field | |
| $cvars += $this->buildField(loadCategoryField($cid), $Tpl, 'category:loop'); | |
| if (1 | |
| && $layered | |
| && isset($childCategories[$cid]) | |
| && $childCategories[$cid] > 0 | |
| ) { | |
| $Tpl->add(array('childLink', 'category:loop'), array( | |
| 'parent_cid' => $cid, | |
| 'pre_cid' => $_cid, | |
| 'childLink' => acmsLink(array( | |
| 'admin' => 'category_index', | |
| 'page' => 1, | |
| 'query' => array( | |
| '_cid' => $cid, | |
| 'pre' => $_cid, | |
| ), | |
| ), true), | |
| )); | |
| } | |
| $Tpl->add('category:loop', $cvars); | |
| if (isset($all[$cid])) { | |
| while ($_row = array_pop($all[$cid])) { | |
| array_unshift($stack, $_row); | |
| } | |
| unset($all[$cid]); | |
| } | |
| } | |
| $Tpl->add(null, $vars); | |
| return $Tpl->get(); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment