예제 #1
0
 /**
  * @return NULL
  * @param int $goods_id - ID товара
  * @param int $count - Количество товаров
  * @desc Добавляет товар в корзину
  */
 static function addGoods($goods_id, $count)
 {
     if (!isset($_SESSION['basket'])) {
         $_SESSION['basket'] = array();
     }
     // Получаем экземпляр товара
     if (is_numeric($goods_id)) {
         $goods = ormPages::get($goods_id, 'goods');
     } else {
         if ($goods_id instanceof ormPage) {
             $goods = $goods_id;
         } else {
             $goods = false;
         }
     }
     // Добавляем в корзину
     if ($goods instanceof ormPage && $goods->isInheritor('goods')) {
         if (!reg::getKey('/eshop/check_count') || reg::getKey('/eshop/min_count') < $goods->count) {
             if (isset($_SESSION['basket'][$goods->id])) {
                 $_SESSION['basket'][$goods->id]['count']++;
             } else {
                 $_SESSION['basket'][$goods->id] = array('goods_id' => $goods->id, 'cost' => $goods->price, 'count' => $count);
             }
         }
     }
 }
예제 #2
0
 function upd()
 {
     // Устанавливаем кнопки для формы
     ui::setCancelButton('/comments/list');
     ui::newButton(lang::get('BTN_SAVE'), "javascript:sendForm('save');");
     ui::newButton(lang::get('BTN_APPLY'), "javascript:sendForm('apply');");
     if (file_exists(MODUL_DIR . '/comments/template/comment.tpl')) {
         include MODUL_DIR . '/comments/template/comment.tpl';
     }
     if (!($obj = comments::get(system::url(2)))) {
         system::redirect('/comments/list');
     }
     if ($obj->getUserId() != 0 && user::issetRight('user_upd', 'users')) {
         $url = system::au() . '/users/user_upd/' . $obj->getUserId();
         page::assign('user_link', $url);
         page::fParse('user_name', $TEMPLATE['user_link']);
     } else {
         page::fParse('user_name', $TEMPLATE['user_name']);
     }
     page::assign('obj.id', $obj->id());
     page::assign('obj.username', $obj->getUserName());
     page::assign('obj.email', $obj->getEmail());
     page::assign('obj.text', $obj->getText());
     page::assign('obj.date', date('d.m.Y H:i', strtotime($obj->getPublDate())));
     page::assign('obj.parram', $obj->getParram());
     ui::CheckBox('active', 1, $obj->isActive(), 'Проверен');
     // Информация о странице
     if ($page = ormPages::get($obj->getObjId())) {
         page::assign('page.id', $page->id);
         page::assign('page.url', $page->url);
         page::assign('page.name', $page->name);
     }
     return page::parse($TEMPLATE['frame']);
 }
예제 #3
0
 public function to_basketAction()
 {
     if ($goods = ormPages::get(system::url(2), 'goods')) {
         $count = system::issetUrl(3) ? system::url(3) : 1;
         basket::addGoods($goods, $count);
     }
     system::redirect('/eshop/basket');
 }
예제 #4
0
 public function unsubscribeAction()
 {
     if ($page = ormPages::get(system::url(3))) {
         comments::unsubscribe(system::url(2), system::url(3));
         page::globalVar('title', lang::get('COM_TITLE'));
         page::globalVar('h1', lang::get('COM_TITLE'));
         return lang::get('COM_UNSUBSCRIBE') . '"' . $page->name . '".';
     }
 }
예제 #5
0
 public function doAction()
 {
     $answers = system::POST('answers');
     $error = 2;
     $msg = '';
     if (count($answers) > 0) {
         if ($vote = ormPages::get(system::POST('vote_id'), 'vote')) {
             if (!$vote->close) {
                 $sel = new ormSelect('answer');
                 $sel->fields('name, count');
                 $sel->where('parents', '=', $vote->id);
                 while ($answ = $sel->getObject()) {
                     if (in_array($answ->id, $answers)) {
                         $answ->count = $answ->count + 1;
                         $answ->save();
                         if (!$vote->multiselect) {
                             break;
                         }
                     }
                 }
                 cache::delete('vote' . $vote->id . '1');
                 cache::delete('vote' . $vote->id . '0');
                 $_SESSION['voting_' . $vote->id] = 1;
                 $error = 0;
             } else {
                 // Голосование закрыто
                 $msg = lang::get('VOTING_MSG_CLOSE');
                 $error = 1;
             }
         } else {
             $msg = lang::get('VOTING_MSG_NOT_FOUND');
         }
     } else {
         $msg = lang::get('VOTING_MSG_CHOSE_VAR');
     }
     if (system::isAjax()) {
         if ($error < 2 && $vote instanceof ormPage) {
             $data = page::macros('voting')->objView($vote->id);
         }
         system::json(array('error' => 0, 'html' => $data, 'msg' => $msg));
     } else {
         if (!empty($_POST['back_url'])) {
             system::redirect($_POST['back_url'], true);
         } else {
             system::redirect('/');
         }
     }
 }
예제 #6
0
    /**
     * @return integer -	ID шаблона
     * @param integer $obj_id - ID раздела сайта
     * @desc Определяет популярный (часто используемый) шаблон в указанном разделе
     */
    static function getPopularForSection($obj_id)
    {
        $sql = empty($obj_id) ? ' r_parent_id is NULL and ' : ' r_parent_id = "' . $obj_id . '" and ';
        $mas = db::q('SELECT template_id, template2_id
    				FROM <<pages>>, <<objects>>, <<rels>>
    				WHERE ' . $sql . '
	        			  r_field_id is NULL and
	        			  r_children_id = o_id and
	        			  p_obj_id = o_id and
	        			  o_to_trash = 0
	        		GROUP BY o_id;', records);
        if (count($mas) > 0) {
            return array(self::getPopTemplate($mas, 'template_id'), self::getPopTemplate($mas, 'template2_id'));
        } else {
            if (!empty($obj_id)) {
                return array(ormPages::get($obj_id)->__get('template_id'), ormPages::get($obj_id)->__get('template2_id'));
            } else {
                return array(0, 0);
            }
        }
    }
예제 #7
0
 public function change_rateAction()
 {
     if ($page = ormPages::get(system::url(2))) {
         if (!isset($_SESSION['change_rate'][$page->id]) && $page->getClass()->issetField('rate')) {
             // Высчитываем новый рейтинг
             $rate = system::checkVar(system::url(3), isInt);
             if ($rate > 5) {
                 $rate = 5;
             } else {
                 if ($rate < 1) {
                     $rate = 1;
                 }
             }
             $new_rate = $page->rate != 0 ? ($page->rate + $rate) / 2 : $rate;
             // Сохраняем
             $page->rate = $new_rate;
             $page->save();
             $_SESSION['change_rate'][$page->id] = 1;
             system::json(array('error' => 0, 'new_rate' => $new_rate));
         }
     }
     system::json(array('error' => 1, 'new_rate' => 0));
 }
예제 #8
0
파일: ui.php 프로젝트: sunfun/Bagira.CMS
 static function checkObjectLinks()
 {
     if (system::url(0) == 'getObjectLinksTree') {
         if (file_exists(MODUL_DIR . '/mpanel/template/objectLinks.tpl')) {
             include MODUL_DIR . '/mpanel/template/objectLinks.tpl';
         }
         $tree = new ormTree(457, 0);
         $tree->miniStyle();
         $tree->setClass('ormPage');
         $tree->setRoot(0, reg::getKey(ormPages::getPrefix() . '/title_prefix'));
         $tree->setRightAjaxLoad('tree');
         page::assign('tree', $tree->getHTML());
         page::assign('parram', system::url(1));
         echo page::parse($TEMPLATE['tree_frame']);
         system::stop();
     } else {
         if (system::url(0) == 'getObjectLinks') {
             if (file_exists(MODUL_DIR . '/mpanel/template/objectLinks.tpl')) {
                 include MODUL_DIR . '/mpanel/template/objectLinks.tpl';
                 if (!($obj = ormPages::get(system::url(1)))) {
                     $obj = ormObjects::get(system::url(1));
                 }
                 if ($obj instanceof ormObject && !$obj->issetErrors()) {
                     page::assign('id', $obj->id);
                     page::assign('name', $obj->name);
                     page::assign('url', $obj->url);
                     page::assign('field_name', system::url(2));
                     page::assign('field_id', system::url(3));
                     if ($obj->getClass()->isPage()) {
                         echo page::parse($TEMPLATE['new_object_link']);
                     } else {
                         echo page::parse($TEMPLATE['object_link']);
                     }
                 }
             }
             system::stop();
         } else {
             if (system::url(0) == 'findObjectLinks' && isset($_POST['query'])) {
                 // Формируем список подсказок
                 $sel = new ormSelect();
                 $sel->findInPages();
                 $sel->fields('name');
                 $sel->where('name', 'LIKE', '%' . $_POST['query'] . '%');
                 $list = $list2 = '';
                 while ($obj = $sel->getObject()) {
                     $zapi = $sel->getObjectNum() != 0 ? ', ' : '';
                     $list .= $zapi . "'" . $obj->name . "'";
                     $list2 .= $zapi . " ['" . $obj->id . "', '" . system::url(1) . "' ]";
                 }
                 echo "{ query:'" . $_POST['query'] . "', suggestions:[" . $list . "], data:[" . $list2 . "] }";
                 system::stop();
             }
         }
     }
 }
예제 #9
0
 public function getObject()
 {
     if (!isset($this->cache['data'])) {
         $this->cache['data'] = $this->createQuery(1);
     }
     if (!isset($this->cache['num'])) {
         $this->reset();
     }
     $this->cache['num']++;
     if ($this->cache['num'] < count($this->cache['data'])) {
         $obj_data = $this->cache['data'][$this->cache['num']];
         if (($class = ormClasses::get($obj_data['o_class_id'])) && $class->isPage()) {
             return ormPages::get($obj_data);
         } else {
             return ormObjects::get($obj_data);
         }
     }
 }
예제 #10
0
 private function sendEmails()
 {
     $last_email = '';
     // Информация о новом комментарии
     page::assign('username', $this->getUserName());
     page::assign('comment', $this->getText());
     page::assign('comment_id', $this->id());
     // Информация о странице
     if ($page = ormPages::get($this->getObjId())) {
         page::assign('page.id', $page->id);
         page::assign('page.url', $page->url);
         page::assign('page.name', $page->name);
     }
     // Отправляем письмо автору предыдущего коммента
     if ($this->getParentId() != 0) {
         $old_comment = new comment($this->getParentId());
         if ($old_comment->getEmail() != $this->getEmail()) {
             $last_email = $old_comment->getEmail();
             page::assign('old_comment', $old_comment->getText());
             page::assign('name', $old_comment->getUserName());
             system::sendMail('/comments/mails/new_answer.tpl', $last_email);
         }
     }
     // Отправляем письма всем подписавщимся на уведомления
     $sql = 'SELECT c_username, c_email FROM <<comments>>
             WHERE c_obj_id = "' . $this->getObjId() . '" and
                   c_send_email = 1 and
                   c_id <> "' . $this->id() . '"
             GROUP BY c_email;';
     $list = db::q($sql, records);
     if (!empty($list)) {
         while (list($key, $val) = each($list)) {
             if ($val['c_email'] != $last_email && $val['c_email'] != $this->getEmail()) {
                 page::assign('name', $val['c_username']);
                 page::assign('index', str_replace(array('.', '@'), array('_', '__'), $val['c_email']));
                 system::sendMail('/comments/mails/new_comment.tpl', $val['c_email']);
             }
         }
     }
 }
예제 #11
0
 function getClassName($val, $obj)
 {
     if ($obj = ormPages::get($val)) {
         return $obj->getClass()->getName();
     }
 }
예제 #12
0
 public function send_messageAction()
 {
     if ($form_obj = ormObjects::get(system::POST('form_id'))) {
         $issetErrors = false;
         $answer = array();
         // Проверка капчи
         if ($form_obj->captcha && !system::validCapcha('random_image')) {
             $issetErrors = true;
             $answer = array('field' => 'random_image', 'msg' => lang::get('FEEDBACK_ERROR1'));
         }
         // Если указанно куда, добавляем объект в БД
         if (($form_obj->any_sections || $form_obj->section) && !$issetErrors) {
             // Определяем раздел, в который будем добавлять отзыв
             if ($form_obj->any_sections) {
                 $section = system::POST('section_id', isInt);
             } else {
                 $section = $form_obj->section;
                 $section = !empty($section) ? $section[0] : 0;
             }
             // Создаем объект обратной связи
             $obj = new ormPage();
             $obj->setParent($section);
             $obj->setClass($form_obj->form_class);
             $obj->tabuList('pseudo_url', 'h1', 'keywords', 'title', 'description', 'answer', 'active', 'is_home_page', 'view_in_menu', 'view_submenu', 'in_search', 'in_index', 'in_new_window', 'other_link', 'img_act', 'img_no_act', 'img_h1');
             $obj->loadFromPost();
             $obj->active = 0;
             $obj->view_in_menu = 1;
             $obj->view_submenu = 1;
             $obj->in_search = 1;
             $obj->in_index = 1;
             $obj->is_home_page = 0;
             if ($obj->name != '') {
                 $obj->h1 = $obj->name;
                 $obj->title = $obj->name;
             }
             $obj->pseudo_url = rand(1000, 9999);
             $obj->template_id = ($sect = ormPages::get($form_obj->section)) ? $sect->template_id : 1;
             $obj->form_id = $form_obj->id;
             $obj->setRightForAll(2);
             $obj_id = $obj->save();
             if ($obj_id) {
                 $obj->pseudo_url = $obj_id;
                 $obj->save();
                 $obj = new ormPage($obj_id);
             } else {
                 $issetErrors = true;
                 $f = $obj->getErrorFields();
                 $answer = array('field' => $f['focus'], 'msg' => $obj->getErrorListText(' '));
             }
         }
         if (!$issetErrors) {
             // Отправка нужных писем
             page::assign('site_name', domains::curDomain()->getSiteName());
             page::assign('site_url', domains::curDomain()->getName());
             page::assign('base_email', domains::curDomain()->getEmail());
             while (list($key, $val) = each($_POST)) {
                 page::assign($key, system::checkVar($val, isText));
             }
             if (isset($obj)) {
                 $fields = $obj->getClass()->loadFields();
                 foreach ($fields as $field) {
                     if (in_array($field['f_type'], array(70, 75, 80, 85))) {
                         $fsname = $field['f_sname'];
                         $fvalue = $obj->{$fsname};
                         if ($fvalue != '') {
                             page::assign($fsname, $fvalue);
                         }
                     }
                 }
             }
             // Если указан список адресатов, отправляем письма
             if ($form_obj->mailing_list != '') {
                 $mail = new phpmailer();
                 $mail->From = $this->parse($form_obj->admin_sender_address);
                 $mail->FromName = $this->parse($form_obj->admin_sender_name);
                 /*
                                   if (!empty($this->files))
                 for($i = 0; $i < count($this->files); $i++)
                    $mail->AddAttachment($this->files[$i][0], $this->files[$i][1]);
                 */
                 $mail->AddAddress($form_obj->mailing_list);
                 $mail->WordWrap = 50;
                 $mail->IsHTML(true);
                 $mail->Subject = $this->parse($form_obj->admin_subject);
                 $mail->Body = $this->parse($form_obj->admin_template);
                 $mail->Send();
             }
             // Если нужно, отправляем уведомление пользователю
             if ($form_obj->send_notice && !$issetErrors) {
                 $mail = new phpmailer();
                 $mail->From = $this->parse($form_obj->notice_sender_address);
                 $mail->FromName = $this->parse($form_obj->notice_sender_name);
                 $mail->AddAddress(system::POST('email'));
                 $mail->WordWrap = 50;
                 $mail->IsHTML(true);
                 $mail->Subject = $this->parse($form_obj->notice_subject);
                 $mail->Body = $this->parse($form_obj->notice_template);
                 $mail->Send();
             }
             // Показываем результат
             if (system::isAjax()) {
                 if ($form_obj->msg != '') {
                     $text = $form_obj->msg;
                 } else {
                     $text = lang::get('FEEDBACK_MSG_1');
                 }
                 system::json(array('field' => 0, 'msg' => strip_tags($text)));
             } else {
                 system::redirect('/feedback/ok/' . $form_obj->id);
             }
         } else {
             // Произошли ошибки
             if (system::isAjax()) {
                 system::json($answer);
             } else {
                 system::savePostToSession();
                 system::saveErrorToSession('feedback', $answer);
                 if (empty($_POST['back_url'])) {
                     $_POST['back_url'] = '/structure/map';
                 }
                 system::redirect($_POST['back_url'], true);
             }
         }
         system::stop();
     } else {
         system::stop();
     }
 }
예제 #13
0
    public function defAction()
    {
        $_SESSION['STRUCTURE_LIST_FLAG'] = 1;
        // Если страниц нет, предлагаем добавить новую
        if (ormPages::getCountOfSection(0) == 0) {
            ui::MessageBox(lang::get('STRUCTURE_PAGE_NOT_FOUND'), lang::get('STRUCTURE_PAGE_NOT_FOUND2'));
            system::redirect('/structure/page_add');
        }
        $obj_id = system::issetUrl(2) ? system::url(2) : 0;
        function getPageNotice($page)
        {
            $notice = '';
            if ($page->is_home_page) {
                $notice = lang::get('STRUCTURE_TREE_TEXT12');
            }
            if ($page->other_link != '') {
                $notice = lang::get('STRUCTURE_TREE_TEXT32');
            }
            if (!$page->view_in_menu) {
                if (!empty($notice)) {
                    $notice .= ', ';
                }
                $notice .= lang::get('STRUCTURE_TREE_TEXT22');
            }
            if (!empty($notice)) {
                return '(' . $notice . ')';
            } else {
                return '';
            }
        }
        // Вывод дерева объектов
        $tree = new ormTree(328, 57);
        $tree->setClass('ormPage');
        $tree->setRoot(0, reg::getKey(ormPages::getPrefix() . '/title_prefix'), 'list/0');
        $tree->setNotice('getPageNotice');
        $tree->setRightEdit('list');
        $tree->setRightActive('page_proc_act');
        $tree->setRightRemove('page_proc_moveto');
        $tree->setRightAjaxLoad('list');
        $tree->setDelMessage(lang::get('STRUCTURE_DEL_TITLE'), lang::get('STRUCTURE_DEL_TEXT'));
        $tree->addRight('page_upd', lang::right('page_upd'), 'compose_image');
        $tree->addRight('page_add', lang::right('page_add'), 'add_image');
        //, 'class_list', $class_list
        ui::setLeftPanel($tree->getHTML());
        // Заголовок страницы
        ui::setHeader(lang::right('tree'));
        if (!empty($obj_id) && ($obj = ormPages::get($obj_id))) {
            ui::setNaviBar(lang::right('list'));
            ui::setHeader($obj->name);
            ui::setBackButton('/structure/list/' . $obj->getParentId());
        } else {
            $obj_id = 0;
        }
        // Формируем список классов для быстрого добавления
        $class_name = ormPages::getPopularClass($obj_id);
        $class = ormClasses::get($class_name);
        $types = ormClasses::get('section')->getAllInheritors();
        $no_edit = reg::getList(ormPages::getPrefix() . '/no_edit');
        $elem_list = $cat_list = '';
        while (list($id, $name) = each($types)) {
            if (!in_array($id, $no_edit)) {
                $bc = ormClasses::get($id);
                $pach = '/css_mpanel/tree/images/';
                $ico = 'classes/' . $bc->getSName() . '.png';
                if (!file_exists(ROOT_DIR . $pach . $ico)) {
                    $ico = 'file1.gif';
                }
                if ($bc->isInheritor('category') || $bc->getSName() == 'section') {
                    $cat_list .= '
			    	<li><img src="' . $pach . $ico . '">
			    	<a href="' . system::au() . '/structure/page_add/' . $obj_id . '/' . $bc->getSName() . '">' . $bc->getName() . '</a></li>';
                } else {
                    $elem_list .= '
			    	<li ><img src="' . $pach . $ico . '">
			    	<a href="' . system::au() . '/structure/page_add/' . $obj_id . '/' . $bc->getSName() . '">' . $bc->getName() . '</a></li>';
                }
            }
        }
        $class_list = '<ul>' . $cat_list . '</ul><ul>' . $elem_list . '</ul>';
        ui::newButton(lang::get('PANEL_BTN_ADD_PART') . $class->getPadej(0), "/structure/page_add/" . $obj_id, 'class_list', $class_list);
        // Формируем выборку страниц для таблицы
        $sel = new ormSelect();
        $sel->findInPages();
        $sel->where('parents', '=', $obj_id);
        // Определяем способ сортировки списка
        $order_by = !empty($obj_id) ? $obj->order_by : '';
        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(position, asc);
        }
        // Вывод таблицы
        $table = new uiTable($sel);
        $table->formatValues(true);
        $table->showSearch(true);
        $table->hideEmptyColumns(true);
        $table->addColumn('name', lang::get('STRUCTURE_TABLE_FIELD_1'), 500, true);
        $table->addColumn('image', lang::get('STRUCTURE_TABLE_FIELD_2'), 400, false, false);
        $table->addColumn('price', lang::get('STRUCTURE_TABLE_FIELD_3'), 400);
        $table->addColumn('publ_date', lang::get('STRUCTURE_TABLE_FIELD_4'), 400);
        $table->defaultRight('page_upd');
        $table->addRight('page_upd', 'edit', single);
        $table->addRight('list', 'list', single);
        $table->addRight('page_history', 'history', single);
        $table->addRight('page_proc_act', 'active', multi);
        $table->addRight('page_del', 'drop', multi);
        $table->setDelMessage(lang::get('STRUCTURE_DEL_TITLE'), lang::get('STRUCTURE_DEL_TITLE'));
        $table->setMultiDelMessage(lang::get('STRUCTURE_DEL_TITLE_MULTI'), lang::get('STRUCTURE_DEL_TEXT_MULTI'));
        return $table->getHTML();
    }
예제 #14
0
 public function getParent($class_name = '')
 {
     if (empty($class_name)) {
         if ($this instanceof ormPage) {
             return ormPages::get($this->getParentId());
         } else {
             return ormObjects::get($this->getParentId());
         }
     } else {
         if ($class = ormClasses::get($class_name)) {
             // Ищем родителя нужного класса
             $this->getParents();
             reset($this->parents);
             while (list($obj_id, $val) = each($this->parents)) {
                 if ($val['parent_class'] == $class->id()) {
                     if ($class->isPage()) {
                         return ormPages::get($obj_id);
                     } else {
                         return ormObjects::get($obj_id);
                     }
                 }
             }
         }
     }
     return false;
 }
예제 #15
0
 public static function getSectionByPath($path)
 {
     $section = '';
     if (is_numeric($path)) {
         if ($path == 0) {
             $section = 'root';
             $class_name = '';
         } else {
             $section = ormPages::get($path);
             $class_name = '';
         }
     } else {
         if (strpos($path, '..')) {
             // Выборка всех подразделов раздела, например "454 .. pages"
             $str = str_replace(' ', '', $path);
             // Определяем класс
             $section_id = 0;
             $pos = strpos($str, '..');
             if ($pos) {
                 $class_name = substr($str, $pos + 2);
                 $section_id = substr($str, 0, $pos);
             } else {
                 $class_name = '';
             }
             $section = self::getAllSubSections($section_id);
         } else {
             if (strpos($path, '>')) {
                 // Обычная цепочка, вида "455 > #5 > category goods"
                 $str = str_replace(array('> ', ' >'), '>', $path);
                 // Определяем класс
                 $pos = strpos($str, ' ');
                 if ($pos) {
                     $class_name = substr($str, $pos + 1);
                     $str = substr($str, 0, $pos);
                 } else {
                     $class_name = '';
                 }
                 // Получаем путь
                 $list = array();
                 $mas = explode('>', $str);
                 while (list($key, $val) = each($mas)) {
                     $val = trim($val);
                     if (!empty($val)) {
                         $list[] = $val;
                     }
                 }
                 // Определяем объект
                 $parent_id = 0;
                 reset($list);
                 while (list($key, $val) = each($list)) {
                     if (is_numeric($val)) {
                         // Указан ID
                         if (empty($key)) {
                             $parent_id = $val;
                         }
                     } else {
                         if ($val[0] == '#') {
                             // Указан порядковый номер в списке
                             $num = str_replace('#', '', $val) - 1;
                             $sel = new ormSelect();
                             $sel->findInPages();
                             $sel->fields('id');
                             $sel->where('active', '=', 1);
                             if (!empty($parent_id)) {
                                 $sel->where('parents', '=', $parent_id);
                             } else {
                                 $sel->where('parents', '=', 0);
                             }
                             $sel->limit($num, 1);
                             $sel->orderBy(position, asc);
                             if ($section = $sel->getObject()) {
                                 $parent_id = $section->id;
                             } else {
                                 $section = false;
                                 break;
                             }
                         } else {
                             // Указан класс
                             $sel = new ormSelect($val);
                             $sel->findInPages();
                             $sel->fields('id');
                             $sel->where('active', '=', 1);
                             if (!empty($parent_id)) {
                                 $sel->where('parents', '=', $parent_id);
                             } else {
                                 $sel->where('parents', '=', 0);
                             }
                             $sel->limit(1);
                             $sel->orderBy(position, asc);
                             if ($section = $sel->getObject()) {
                                 $parent_id = $section->id;
                             } else {
                                 $section = false;
                                 $section;
                             }
                         }
                     }
                 }
             } else {
                 $pos = strpos($path, ' ');
                 if ($pos) {
                     $obj_id = substr($path, 0, $pos);
                     if (is_numeric($obj_id)) {
                         $class_name = substr($path, $pos + 1);
                         if ($obj_id == 0) {
                             $section = 'root';
                         } else {
                             $section = ormPages::get($obj_id);
                         }
                     } else {
                         $class_name = $path;
                     }
                 } else {
                     $class_name = $path;
                 }
             }
         }
     }
     return array('section' => $section, 'class' => $class_name);
 }
예제 #16
0
 public function goodsList($order_id, $templ_name = 'goods_list')
 {
     $templ_file = '/eshop/' . $templ_name . '.tpl';
     $TEMPLATE = page::getTemplate($templ_file);
     if (!is_array($TEMPLATE)) {
         return page::errorNotFound('eshop.goodsList', $templ_file);
     }
     if ($order = ormObjects::get($order_id, 'eshop_order')) {
         $fields = page::getFields('obj', $TEMPLATE['list']);
         $sel = new ormSelect('eshop_goods');
         $sel->where('parents', '=', $order_id);
         $list = '';
         $num = $cost = 0;
         while ($goods = $sel->getObject()) {
             if ($obj = ormPages::get($goods->goods_id, 'goods')) {
                 $num++;
                 if (isset($fields['obj'])) {
                     while (list($key, $val) = each($fields['obj'])) {
                         if ($val != 'url' && $val != 'class' && $val != 'num') {
                             page::assign('obj.' . $val, $obj->__get($val));
                         }
                     }
                 }
                 page::assign('obj.num', $num);
                 page::assign('class-first', $num == 1 ? 'first' : '');
                 page::assign('class-last', $num == $sel->getObjectCount() ? 'last' : '');
                 page::assign('class-odd', $num % 2 == 0 ? 'odd' : '');
                 page::assign('class-even', $num % 2 != 0 ? 'even' : '');
                 page::assign('class-third', $num % 3 == 0 ? 'third' : '');
                 page::assign('obj.id', $obj->id);
                 page::assign('obj.name', $obj->name);
                 page::assign('obj.cost', $goods->cost);
                 page::assign('obj.count', $goods->count);
                 page::assign('obj.url', $obj->url);
                 $cost_all = $goods->cost * $goods->count;
                 page::assign('obj.cost_all', $cost_all);
                 $cost += $cost_all;
                 $list .= page::parse($TEMPLATE['list']);
             }
         }
         if (!empty($list)) {
             page::assign('cost', $cost);
             page::assign('list', $list);
             return page::parse($TEMPLATE['frame']);
         } else {
             return page::parse($TEMPLATE['empty']);
         }
     }
 }
예제 #17
0
 public function del()
 {
     if (system::issetUrl(2) && is_numeric(system::url(2))) {
         // Одиночное удаление
         if ($obj = ormPages::get(system::url(2))) {
             $obj->toTrash();
             echo 'delete';
         }
     } else {
         if (isset($_POST['objects'])) {
             // Множественное удаление
             while (list($id, $val) = each($_POST['objects'])) {
                 if ($obj = ormPages::get($id)) {
                     $obj->toTrash();
                 }
             }
             echo 'delete';
         }
     }
     system::stop();
 }
예제 #18
0
 public function tagAction()
 {
     $templ_file = '/search/gettag.tpl';
     $TEMPLATE = page::getTemplate($templ_file);
     if (!is_array($TEMPLATE)) {
         return page::errorNotFound('search.getTag', $templ_file);
     }
     if (system::issetUrl(2) && ($tag = tags::infoTag(system::url(2)))) {
         $msg = lang::get('SEARCH_H1_TAGS') . ' "' . $tag['name'] . '"';
         page::globalVar('h1', $msg);
         page::globalVar('title', $msg);
         // Получаем список классов
         $classes_filter = array();
         if (!empty($_POST['classes'])) {
             $tmp = explode(",", $_POST['classes']);
             $classes_filter = array();
             foreach ($tmp as $v) {
                 $v = trim($v);
                 if (!empty($v)) {
                     $classes_filter[] = $v;
                 }
             }
         }
         $max_count = reg::getKey(ormPages::getPrefix('search') . '/max_count');
         $start = (system::getCurrentNavNum() - 1) * $max_count;
         $result = tags::find(array($tag['id']), $max_count, $start, $classes_filter);
         $list = '';
         while (list($num, $val) = each($result['pages'])) {
             if ($page = ormPages::get($val['page_id'])) {
                 page::assign('obj.id', $page->id);
                 page::assign('obj.num', $num + $start + 1);
                 page::assign('obj.name', $page->name);
                 page::assign('obj.url', $page->_url);
                 //page::assign('obj.content', $page->content);
                 $cn = $page->getClass()->getSName();
                 $block_name = isset($TEMPLATE['list_' . $cn]) ? 'list_' . $cn : 'list';
                 $list .= page::parse($TEMPLATE[$block_name]);
             }
         }
         page::assign('count_page', ceil($result['count'] / $max_count));
     } else {
         $list = '';
         $msg = lang::get('SEARCH_H1_TAGS2');
         page::globalVar('h1', $msg);
         page::globalVar('title', $msg);
     }
     if (!empty($list)) {
         page::assign('list', $list);
         page::fParse('list', $TEMPLATE['frame_list']);
     } else {
         page::fParse('list', $TEMPLATE['not_found']);
     }
     return page::parse($TEMPLATE['frame']);
 }
예제 #19
0
 public function copy()
 {
     if (system::url(2) == 0) {
         system::redirect('/structure');
     }
     if ($obj = ormPages::get(system::url(2))) {
         $obj->copy();
         if (isset($_SESSION['STRUCTURE_LIST_FLAG']) && $_SESSION['STRUCTURE_LIST_FLAG']) {
             system::redirect('/structure/list/' . $obj->getParentId());
         } else {
             system::redirect('/structure/tree');
         }
     }
 }
예제 #20
0
 /**
  * @return HTML
  * @param int $obj_id - ID голосования.
  * @param string $templ_name - Шаблон оформления.
  * @desc МАКРОС: Выводит указанное голосование.
  */
 public function objView($obj_id, $templ_name = 'default')
 {
     $html = '';
     $id = is_array($obj_id) ? $obj_id['o_id'] : $obj_id;
     $ses = empty($_SESSION['voting_' . $id]) ? '1' : '0';
     $key = 'vote' . $id . $ses;
     $ckey = md5(serialize($templ_name));
     if (($data = cache::get($key)) && isset($data[$ckey])) {
         $html = $data[$ckey];
     } else {
         if (!is_array($templ_name)) {
             $templ_file = '/voting/' . $templ_name . '.tpl';
             $TEMPLATE = page::getTemplate($templ_file);
         } else {
             $TEMPLATE = $templ_name;
         }
         if (!is_array($TEMPLATE)) {
             return page::errorNotFound('voting.viewVote', $templ_file);
         }
         if (is_array($obj_id)) {
             $obj = ormPages::get($obj_id);
         } else {
             $obj = ormPages::get($obj_id, 'vote');
         }
         if ($obj instanceof ormPage) {
             $all_count = 0;
             $result = !empty($_SESSION['voting_' . $obj->id]) || $obj->close ? '_result' : '';
             $fields = page::getFields('obj', $TEMPLATE['vote']);
             // Выводим список вариантов ответов
             if (isset($fields['mono']) && in_array('answers', $fields['mono'])) {
                 $list = '';
                 $num = $max = 0;
                 $sel = new ormSelect('answer');
                 $sel->fields('name, count');
                 $sel->where('parents', '=', $obj->id);
                 // Находим самый популярный ответ
                 while ($answ = $sel->getObject()) {
                     if ($max < $answ->count) {
                         $max = $answ->count;
                     }
                     $all_count += $answ->count;
                 }
                 $pr = $all_count / 100;
                 if ($pr == 0) {
                     $pr = 1;
                 }
                 // Выводим список вариантов ответов
                 $sel->reset();
                 while ($answ = $sel->getObject()) {
                     $num++;
                     page::assign('obj.num', $num);
                     page::assign('class-first', $num == 1 ? 'first' : '');
                     page::assign('class-last', $num == $sel->getObjectCount() ? 'last' : '');
                     page::assign('class-odd', $num % 2 == 0 ? 'odd' : '');
                     page::assign('class-even', $num % 2 != 0 ? 'even' : '');
                     page::assign('class-third', $num % 3 == 0 ? 'third' : '');
                     page::assign('obj.id', $answ->id);
                     page::assign('obj.parent_id', $obj->id);
                     page::assign('obj.name', $answ->name);
                     page::assign('obj.count', $answ->count);
                     $procent = round($answ->count / $pr, 2);
                     page::assign('obj.percent', $procent);
                     page::assign('obj.per1', round($procent));
                     page::assign('obj.per2', 100 - round($procent));
                     $best = $answ->count == $max ? 'best' : '';
                     page::assign('class-best', $best);
                     $list .= page::parse($TEMPLATE['answer' . $result]);
                 }
                 page::assign('answers', $list);
                 page::assign('type', $obj->multiselect ? 'checkbox' : 'radio');
             }
             // Парсим поля страницы
             if (isset($fields['obj'])) {
                 while (list($num, $name) = each($fields['obj'])) {
                     page::assign('obj.' . $name, $obj->__get($name));
                 }
             }
             page::assign('obj.count', $all_count);
             $html = page::parse($TEMPLATE['vote' . $result]);
         }
         // Записываем в кэш
         $data[$ckey] = $html;
         cache::set($key, $data);
     }
     return $html;
 }
예제 #21
0
 function getGoodsName($val, $obj)
 {
     if ($obj = ormPages::get($val, 'goods')) {
         return '<a href="' . $obj->url . '" target="_blank">' . $obj->name . '</a>';
     }
 }
예제 #22
0
 /**
  * @return HTML
  * @param int $section_id - ID новостной ленты, для которой необходимо построить RSS-ленту
  * @param string $templ_name - Шаблон оформления, по которому будет строится RSS-лента
  * @desc МАКРОС: Выводит содержимое RSS-ленты.
  */
 public function rss($section_id, $templ_name = 'rss')
 {
     $templ_file = '/structure/rss/' . $templ_name . '.tpl';
     $TEMPLATE = page::getTemplate($templ_file);
     if (!is_array($TEMPLATE)) {
         return page::errorNotFound('structure.rss', $templ_file);
     }
     $cur_domain = 'http://' . domains::curDomain()->getName();
     page::assign('channel.url', $cur_domain);
     page::assign('channel.date', date('r'));
     page::assign('channel.notice', '');
     // Определяем из каких категорий выводить ленту новостей
     $sections = array();
     if ($section_id == 'all') {
         // Из нескольких
         $sel = new ormSelect('news_feed');
         $sel->findInPages();
         $sel->fields('id');
         $sel->where('rss_export', '=', 1);
         $sel->where('active', '=', 1);
         while ($obj = $sel->getObject()) {
             $sections[] = $obj->id;
         }
         page::assign('channel.title', domains::curDomain()->getSiteName());
     } else {
         // Из одной
         $section_id = system::checkVar($section_id, isInt);
         if (empty($section_id)) {
             return '';
         }
         $sections[] = $section_id;
         if ($sect = ormPages::get($section_id)) {
             page::assign('channel.title', $sect->name);
         }
     }
     // Формируем выборку объектов
     $sel = new ormSelect();
     $sel->findInPages();
     $sel->fields('name, notice, publ_date');
     $sel->where('parents', '=', $sections, 'OR');
     $sel->where('active', '=', 1);
     $sel->orderBy('publ_date', desc);
     $sel->limit(3);
     // Формируем список
     $list = '';
     while ($obj = $sel->getObject()) {
         $num = $sel->getObjectNum() + 1;
         page::assign('obj.num', $num);
         page::assign('obj.id', $obj->id);
         page::assign('obj.url', $cur_domain . $obj->_url);
         page::assign('obj.name', $obj->name);
         $notice = str_replace('&nbsp;', '', strip_tags($obj->notice));
         page::assign('obj.notice', $notice);
         $date = date('r', strtotime($obj->publ_date));
         page::assign('obj.date', $date);
         /*
         if ($obj->podkast != '') {
             page::assign('obj.media_url', $cur_domain.$obj->podkast);
             page::fParse('media', $TEMPLATE['media']);
         } else
             page::assign('media', '');
         */
         if (isset($TEMPLATE['list'])) {
             $list .= page::parse($TEMPLATE['list']);
         } else {
             return page::errorBlock('structure.rss', $templ_file, 'list');
         }
     }
     if (!empty($list)) {
         page::assign('list', $list);
         if (isset($TEMPLATE['frame_list'])) {
             $list = page::parse($TEMPLATE['frame_list']);
         } else {
             return page::errorBlock('structure.rss', $templ_file, 'frame_list');
         }
     }
     return $list;
 }
예제 #23
0
    protected function changeParents($isUpd = true)
    {
        $ret = true;
        if ((!empty($this->new_parents) || $this->del_parents) && is_array($this->new_parents)) {
            // Удаляем все старые связи
            if ($isUpd && $this->del_parents) {
                $ret = db::q('DELETE FROM <<rels>> WHERE r_children_id = "' . $this->id . '" and r_field_id is NULL;');
            }
            $this->del_parents = false;
            // Добавляем новые связи
            reset($this->new_parents);
            while (list($key, $val) = each($this->new_parents)) {
                if (empty($val['parent_id'])) {
                    $parent_sql = 'r_parent_id is NULL and';
                    $parent_sql2 = '';
                } else {
                    $parent_sql = 'r_parent_id = "' . $val['parent_id'] . '" and';
                    $parent_sql2 = 'r_parent_id = "' . $val['parent_id'] . '",';
                }
                if (!$isUpd || empty($val['position'])) {
                    // Определяем позицию при добавлении объекта
                    $parent = ormPages::get($val['parent_id']);
                    if (!empty($val['parent_id']) && $parent->addto) {
                        $minmax = 'MIN';
                        $pos = -1;
                        // Избавляемся от отрицательных позиций
                        db::q('UPDATE <<rels>> r, <<pages>> p
		             			   SET r.r_position = r.r_position + 1
		                           WHERE ' . $parent_sql . '
			        				  	 r.r_field_id is NULL and
			        				  r.r_children_id = p.p_obj_id and
			        				  p.lang_id = "' . languages::curId() . '" and
		       		   				  p.domain_id = "' . domains::curId() . '";');
                    } else {
                        $minmax = 'MAX';
                        $pos = 1;
                    }
                    $sql = 'SELECT ' . $minmax . '(r_position)
	                	    		FROM <<rels>>, <<pages>>
			        				WHERE ' . $parent_sql . '
			        					  r_field_id is NULL and
			        					  r_children_id = p_obj_id and
			        					  lang_id = "' . languages::curId() . '" and
		       			   				  domain_id = "' . domains::curId() . '";';
                    $val['position'] = db::q($sql, value) + $pos;
                    if ($val['position'] < 0) {
                        $val['position'] = 0;
                    }
                } else {
                    if ($isUpd && !empty($val['position'])) {
                        $parent_sql = 'r.' . $parent_sql;
                        // Изменения при обновлении объекта
                        $old_pos = isset($this->parents[$val['parent_id']]) ? $this->parents[$val['parent_id']]['position'] : 0;
                        if (empty($old_pos) && !empty($val['position'])) {
                            // Если добавили нового родителя
                            db::q('UPDATE <<rels>> r, <<pages>> p
								   SET r.r_position = r.r_position + 1
			                       WHERE r.r_position >= "' . $val['position'] . '" and
			                             ' . $parent_sql . '
			        				  	 r.r_field_id is NULL and
			        				  r.r_children_id = p.p_obj_id and
			        				  p.lang_id = "' . languages::curId() . '" and
		       		   				  p.domain_id = "' . domains::curId() . '";');
                        } else {
                            if ($val['position'] < $old_pos) {
                                // Если перенесли ниже по списку
                                db::q('UPDATE <<rels>> r, <<pages>> p
		             			   SET r.r_position = r.r_position + 1
		                           WHERE r.r_position >= "' . $val['position'] . '" and
		                                 r.r_position < "' . $old_pos . '" and
		                                 ' . $parent_sql . '
			        				  	 r.r_field_id is NULL and
			        				  r.r_children_id = p.p_obj_id and
			        				  p.lang_id = "' . languages::curId() . '" and
		       		   				  p.domain_id = "' . domains::curId() . '";');
                            } else {
                                if ($val['position'] > $old_pos) {
                                    // Если перенесли выше по списку
                                    db::q('UPDATE <<rels>> r, <<pages>> p
		              			   SET r.r_position = r.r_position - 1
		                           WHERE r.r_position <= "' . $val['position'] . '" and
		                                 r.r_position > "' . $old_pos . '" and
		                                 ' . $parent_sql . '
			        				  	 r.r_field_id is NULL and
			        				  r.r_children_id = p.p_obj_id and
			        				  p.lang_id = "' . languages::curId() . '" and
		       		   				  p.domain_id = "' . domains::curId() . '";');
                                }
                            }
                        }
                    }
                }
                if (empty($tmp_parent_id)) {
                    $tmp_parent_id = $val['parent_id'];
                    $tmp_position = $val['position'];
                }
                // Добавляем связь с родителем
                $sql = 'INSERT INTO <<rels>>
							SET ' . $parent_sql2 . '
								r_position = "' . $val['position'] . '",
								r_children_id = "' . $this->id . '";';
                $ret = db::q($sql);
            }
        }
        // Если все нормально, обновляем свойства объекта
        if ($ret === false) {
            $this->newError(43, 'Произошла ошибка при изменении родителя объекта!');
        } else {
            if (is_array($this->new_parents) && !empty($this->new_parents)) {
                $this->parents = $this->new_parents;
                $this->new_parents = array();
                if (!empty($tmp_parent_id)) {
                    $this->parent_id = $tmp_parent_id;
                    $this->position = $tmp_position;
                }
            }
        }
    }