Пример #1
0
    /**
     * @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']);
    }
Пример #2
0
 /**
  * @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']);
 }