/** * @return string HTML * @param integer $obj - Экземпляр объекта (ormObject, ormPage) * @param string $action - Тип действия: "upd" - изменение, "add" - добавление * @desc Выводит форму изменения прав доступа для объекта */ public static function getListForObject($obj, $action) { if (file_exists(MODUL_DIR . '/users/template/right_list_object.tpl')) { include MODUL_DIR . '/users/template/right_list_object.tpl'; } if (isset($_POST['query'])) { // Формируем список подсказок для пользователя $sel = new ormSelect('user'); $sel->fields('login'); $sel->where('id', '<>', '29'); $sel->where('login', 'LIKE', '%' . $_POST['query'] . '%'); $users = ''; while ($user = $sel->getObject()) { $zapi = $sel->getObjectNum() != 0 ? ', ' : ''; $users .= $zapi . "'" . $user->login . "'"; } echo "{ query:'" . $_POST['query'] . "', suggestions:[" . $users . "], data:[] }"; system::stop(); } else { if (isset($_POST['user_name'])) { // Добавляем выбранного пользователя в список $sel = new ormSelect('user'); $sel->fields('login'); $sel->where('id', '<>', '29'); $sel->where('login', '=', $_POST['user_name']); $sel->limit(1); $user = $sel->getObject(); if ($user instanceof ormObject) { page::assign("group.id", $user->id); page::assign("group.name", $user->login); page::assign("checked_edit", ''); page::assign("checked_view", 'checked'); echo page::parse($TEMPLATE['group']); } system::stop(); } } // Выводим список групп $sel = new ormSelect('user_group'); $sel->where('id', '<>', '32'); $sel->orderBy('name', asc); $groups = $sel->getData(); $rights = array(); if ($action == 'upd') { $users = db::q('SELECT o_id, login o_name FROM <<rights>>, <<objects>>, <<__user>> WHERE r_obj_id = "' . $obj->id . '" and r_group_id = o_id and obj_id = o_id and o_class_id <> 33;', records); $groups = array_merge($groups, $users); $tmp = db::q('SELECT r_state, r_group_id FROM <<rights>> WHERE r_obj_id = "' . $obj->id . '";', records); while (list($key, $right) = each($tmp)) { $rights[$right['r_group_id']] = $right['r_state']; } $select_all = count($tmp) == 1 && empty($tmp[0]['r_group_id']) ? $tmp[0]['r_state'] : false; } else { $select_all = 2; } $items = ''; $num = $edit_num = $view_num = 0; while (list($key, $group) = each($groups)) { $state = isset($rights[$group['o_id']]) ? $rights[$group['o_id']] : 0; if ($state == 2) { $edit_num++; } $checked_edit = $state == 2 || $select_all == 2 ? 'checked' : ''; page::assign("checked_edit", $checked_edit); if ($state > 0) { $view_num++; } $checked_view = $state > 0 || $select_all > 0 ? 'checked' : ''; page::assign("checked_view", $checked_view); page::assign("group.id", $group['o_id']); page::assign("group.name", $group['o_name']); $items .= page::parse($TEMPLATE['group']); $num = $key + 1; } $checked_edit = $select_all == 2 || $num == $edit_num ? 'checked' : ''; page::assign("checked_edit", $checked_edit); $checked_view = $select_all > 0 || $num == $view_num ? 'checked' : ''; page::assign("checked_view", $checked_view); page::assign("text.all_user", lang::get('STRUCTURE_RIGHT_ALL_USER')); page::assign("text.title", lang::get('STRUCTURE_RIGHT_TITLE')); page::assign("groups", $items); return page::parse($TEMPLATE['frame']); }
/** * @return HTML * @param int $obj_id - ID раздела, из которого необходимо вывести список голосований. * Если вывести список всех голосований на сайте, укажите "all". * @param string $templ_name - Шаблон оформления. * @param int $max_count - Максимальное количество элементов в списке. * @param string $order_by - Способ сортировки элементов списка. SQL-подобный синтаксис, например: "name DESC". * @desc МАКРОС: Выводит список голосований из указанного раздела. */ public function objList($obj_id = 'all', $templ_name = 'default', $max_count = 10, $order_by = 0) { $templ_file = '/voting/' . $templ_name . '.tpl'; $TEMPLATE = page::getTemplate($templ_file); if (!is_array($TEMPLATE)) { return page::errorNotFound('voting.objList', $templ_file); } $key = 'vote-list' . $obj_id . $templ_name . $max_count; if (!($data = cache::get($key)) || $order_by == 'random') { if ($obj_id != 'all') { $info = ormPages::getSectionByPath($obj_id); if ($info['section'] === false) { return ''; } if ($info['section'] instanceof ormPage) { $section = $info['section']; $obj_id = $section->id; } } // Получаем список голосований $sel = new ormSelect('vote'); $sel->findInPages(); $sel->where('active', '=', 1); $sel->where('view_in_menu', '=', 1); // Сортировка списка if (!empty($order_by)) { $pos = strpos($order_by, ' '); if ($pos) { $parram = substr($order_by, $pos + 1); $order_by = substr($order_by, 0, $pos); } else { $parram = ''; } $sel->orderBy($order_by, $parram); } else { $sel->orderBy('publ_date', desc); } $sel->limit($max_count); if (is_numeric($obj_id)) { $sel->where('parents', '=', $obj_id); } // Узнаем какие поля объектов будут участвовать в выборке $fields_str = 'close, multiselect'; $fields = page::getFields('obj', $TEMPLATE['vote_result'] . $TEMPLATE['vote']); if (isset($fields['obj'])) { while (list($okey, $val) = each($fields['obj'])) { if ($val != 'url' && $val != 'class' && $val != 'num') { $fields_str .= empty($fields_str) ? $val : ', ' . $val; } } } $sel->fields($fields_str); $data = $sel->getData(); // Записываем в кэш cache::set($key, $data); } // Выводим список на страницу $list = ''; foreach ($data as $obj) { $list .= $this->objView($obj, $TEMPLATE); } page::assign('list', $list); return page::parse($TEMPLATE['frame']); }