Пример #1
0
 public function proc()
 {
     if (system::isAjax() && system::issetUrl(2)) {
         if (system::url(2) == 'start') {
             searchIndex::clear();
             reg::setKey(ormPages::getPrefix('search') . '/index_date', date('d.m.Y'));
             $sel = new ormSelect();
             $sel->fields('name');
             $sel->findInPages();
             $sel->where('active', '=', 1);
             $sel->where('in_search', '=', 1);
             echo $sel->getCount();
         } else {
             if (system::url(2) == 'info') {
                 $data = reg::getKey(ormPages::getPrefix('search') . '/index_date');
                 if (empty($data)) {
                     $data = '-';
                 }
                 system::json(array('pages' => searchIndex::getCountPages(), 'words' => searchIndex::getCountWords(), 'data' => $data));
             } else {
                 $sel = new ormSelect();
                 $sel->findInPages();
                 $sel->where('active', '=', 1);
                 $sel->where('in_search', '=', 1);
                 $sel->limit(system::url(2), 1);
                 searchIndex::indexPage($sel->getObject());
                 echo 'ok';
             }
         }
         system::stop();
     }
     if (system::POST('parram') == 'clear') {
         searchIndex::clear();
     }
     system::redirect('/search/index');
 }
Пример #2
0
 private function checkValue($field, $value)
 {
     $type = $this->fields[$field]['f_type'];
     $tmp = '';
     switch ($type) {
         // Строка
         case 10:
             $tmp = system::checkVar($value, isString);
             break;
             // E-mail
         // E-mail
         case 15:
             $tmp = system::checkVar($value, isEmail);
             break;
             // URL
         // URL
         case 20:
             $tmp = system::checkVar($value, isUrl);
             break;
             // Пароль
         // Пароль
         case 35:
             $tmp2 = system::checkVar($value, isPassword);
             if (!empty($tmp2) || $tmp2 === false) {
                 $tmp = $tmp2;
             }
             break;
             // Число
         // Число
         case 40:
             $tmp = system::checkVar($value, isInt);
             break;
             // Позиция в списке
         // Позиция в списке
         case 65:
             $tmp = system::checkVar($value, isInt);
             break;
             // Число  с точкой
         // Число  с точкой
         case 45:
             $tmp = system::checkVar($value, isNum);
             break;
             // Число  с точкой
         // Число  с точкой
         case 47:
             $tmp = system::checkVar($value, isPrice);
             break;
             // Галочка (логический)
         // Галочка (логический)
         case 50:
             $tmp = system::checkVar($value, isBool);
             break;
             // Дата
         // Дата
         case 25:
             if (!empty($value)) {
                 $tmp = system::checkVar($value, isDate);
             }
             break;
             // Время
         // Время
         case 30:
             $tmp = system::checkVar($value, isDateTime);
             break;
             // Дата и Время
         // Дата и Время
         case 32:
             if (!empty($value)) {
                 $tmp = system::checkVar($value, isDateTime);
             }
             break;
             // Большой текст
         // Большой текст
         case 55:
             $value = str_replace(array('<', '>'), array('&lt;', '&gt;'), $value);
             $tmp = system::checkVar($value, isText);
             break;
             // HTML – текст
         // HTML – текст
         case 60:
             $tmp = system::checkVar($value, isText);
             break;
             // Файл
         // Файл
         case 70:
             $tmp = $this->checkLoadFile($field, $value, '', '', $this->fields[$field]['f_max_size']);
             break;
             // Список файлов
         // Список файлов
         case 73:
             if (isset($_FILES[$value]) && count($_FILES[$value]['name']) > 0) {
                 $file_var = $_FILES[$value];
                 $tmp = $value;
                 for ($i = 0; $i < count($file_var['name']); $i++) {
                     if (isset($file_var['tmp_name'][$i]) && file_exists($file_var['tmp_name'][$i])) {
                         if (!empty($file_var['error'][$i])) {
                             $this->newError(30, 'Произошла ошибка при загрузке файлов для поля "' . $field . '"!');
                         }
                     } else {
                         $tmp = false;
                     }
                 }
             }
             break;
             // Изображение
         // Изображение
         case 75:
             $tmp = $this->checkLoadFile($field, $value, array('png', 'gif', 'jpg', 'jpeg'), 'jpg, jpeg, gif, png', $this->fields[$field]['f_max_size']);
             break;
             // Видео
         // Видео
         case 80:
             $tmp = $this->checkLoadFile($field, $value, array('avi', 'mpeg'), 'avi, mpeg', $this->fields[$field]['f_max_size']);
             break;
             // Флеш-ролик
         // Флеш-ролик
         case 85:
             $tmp = $this->checkLoadFile($field, $value, array('flv'), 'flv', $this->fields[$field]['f_max_size']);
             break;
             // Выпадающий список
         // Выпадающий список
         case 90:
             if (empty($value)) {
                 $value = 0;
             }
             $tmp = system::checkVar($value, isString);
             break;
             // Список c множественным выбором
         // Список c множественным выбором
         case 95:
             if (empty($value)) {
                 $value = array();
             }
             $tmp = is_array($value) ? $value : false;
             break;
             // Ссылка на дерево
         // Ссылка на дерево
         case 100:
             if (empty($value)) {
                 $value = array();
             }
             $tmp = is_array($value) ? $value : false;
             break;
             // Теги
         // Теги
         case 105:
             $tmp = system::checkVar($value, isString);
             break;
         default:
             $this->newError(31, 'Тип данных поля "' . $field . '" не поддерживается системой!', $field);
     }
     // Проверка уникальности значения поля
     if ($this->fields[$field]['f_uniqum']) {
         $class_name = $this->class->isInheritor('user') ? 'user' : $this->class->getSName();
         $sel = new ormSelect($class_name);
         $sel->where($field, '=', $tmp);
         if (!empty($this->id)) {
             $sel->where('id', '<>', $this->id);
         }
         if ($sel->getCount() > 0) {
             if ($field == 'name') {
                 $this->newError(29, 'В системе уже есть объект с указанным именем. Выберите другое имя.', 'name');
             } else {
                 $this->newError(32, 'Поле "' . $field . '" должно содержать уникальное не повторяющееся значение. Укажите другое значение.', $field);
             }
         }
     }
     if (!(empty($tmp) && ($type == 35 || $type == 25 || $type == 32) || $this->issetErrors())) {
         if ($tmp !== false) {
             if ($field == 'name') {
                 $this->name = $tmp;
             }
             $this->new_prop[$field] = $tmp;
         } else {
             $this->newError(33, 'Неправильно указано значение для поля "' . $type . '"!', $field);
         }
     }
 }
Пример #3
0
 private static function checkSocialUser($user_info)
 {
     $sel = new ormSelect('user');
     $sel->where($sel->val('social_identity', '=', $user_info['identity']), $sel->val('social_type', '=', $user_info['social_type']));
     $sel->limit(1);
     if ($user = $sel->getObject()) {
         // Пользователь уже зарегистрирован
         $groups = $user->getParents();
         $sel = new ormSelect('user_group');
         $sel->where('id', '=', $groups, 'OR');
         $sel->where('active', '=', 1);
         if (!$user->active || $sel->getCount() < 1) {
             // Ошибка: Пользователь или группа выключены, авторизация не возможна
             echo lang::get('USERS_DISABLE_AUTH');
             die;
         } else {
             if (user::authHim($user)) {
                 // Пользователь авторизован, закрываем дочернее окно и возвращаемся на сайт
                 self::closeWindowAndOpen('/');
             }
         }
     } else {
         // Пользователь еще не создан, регистрируем
         if (reg::getKey('/users/confirm') || reg::getKey('/users/ask_email') && empty($user_info['email'])) {
             // Запрашивает согласие с правилами или e-mail
             $_SESSION['SOCIAL_AUTH_USER_INFO'] = $user_info;
             echo page::macros('users')->socialAuthConfirm();
         } else {
             // регистрируем
             $user = self::createUserForSocial($user_info);
             if ($user && !$user->issetErrors()) {
                 user::authHim($user);
                 self::closeWindowAndOpen('/');
             } else {
                 if ($user instanceof ormObject) {
                     echo $user->getErrorListText();
                 } else {
                     echo 'Unknown error';
                 }
             }
         }
         system::stop();
     }
 }
Пример #4
0
 static function start($release_id, $subject, $part = 1)
 {
     if ($release = ormObjects::get($release_id)) {
         $_SESSION['SUBSCR_PART'] = system::checkVar($part, isInt);
         $_SESSION['SUBSCR_SUBJECT'] = str_replace(array('{', '}'), '%', system::checkVar($subject, isString));
         $_SESSION['SUBSCR_MAILHTML'] = self::getMailHTML($release_id);
         if ($release->error_part_num == 0) {
             // Рассылка части с начала
             $release->last_subscribe = date('Y-m-d H:i:s');
             $release->error_part_num = $_SESSION['SUBSCR_PART'];
             if ($release->part_count_awaiting <= 0) {
                 $count = self::getPartCount($release->parent_id);
                 $release->part_count_awaiting = $count;
                 $release->part_count = $count;
             }
             $release->save();
             $start = 0;
             page::assign('part', $_SESSION['SUBSCR_PART']);
             page::assign('name', $release->name);
             system::revue($release->getParent(), page::parse(lang::get('SUBSCRIBE_HIST_START')), info);
         } else {
             // Продолжение незавершенной рассылки
             $_SESSION['SUBSCR_PART'] = $release->error_part_num;
             $start = $release->error_iteration_num;
             page::assign('part', $_SESSION['SUBSCR_PART']);
             page::assign('name', $release->name);
             system::revue($release->getParent(), page::parse(lang::get('SUBSCRIBE_HIST_CONTINUE')), info);
         }
         // Вычисляем кол-во итераций для рассылки всех писем в указанной части
         $sel = new ormSelect('subscribe_user');
         $sel->where('parents', '=', $release->parent_id);
         $count_in_part = reg::getKey('/subscription/count_mails_day');
         if ($_SESSION['SUBSCR_PART'] * $count_in_part > $sel->getCount()) {
             $count_in_part = $sel->getCount() - ($_SESSION['SUBSCR_PART'] - 1) * $count_in_part;
         }
         $count = ceil($count_in_part / reg::getKey('/subscription/count_mails'));
         return json_encode(array('error' => 0, 'start' => $start, 'count' => $count));
     }
 }
Пример #5
0
 function getSubscribersCount($id, $obj)
 {
     $sel = new ormSelect('subscribe_user');
     $sel->where('parents', '=', $id);
     return $sel->getCount();
 }
Пример #6
0
 /**
 * @return HTML
 * @param int(string) $section - ID объекта, подразделы которой будут выводиться в списке
 					 или системное имя класса, объекты которого нужно вывести
 * @param string $templ_name - Шаблон оформления по которому будет строится список
 * @param int $max_count - Максимальное количество элементов в списке
 * @param string $order_by - Способ сортировки элементов списка. SQL-подобный синтаксис, например: "name DESC".
 * @param int $start_pos - Номер элемента по порядку с которого будет выводиться список.
 * @desc МАКРОС: Выводит список объектов.
 */
 public function objList($section, $TEMPLATE = 'default', $max_count = 0, $order_by = 0, $start_pos = 0)
 {
     $list = '';
     // Определяем источник данных: ID, имя класса, путь, объект ormPage
     $independent = $section instanceof ormObject ? false : true;
     $class_name = $class_frame = '';
     if ($independent) {
         if (!is_numeric($section)) {
             $pos = strpos($section, ' ');
             if ($pos) {
                 $class_name = substr($section, $pos + 1);
                 $section = substr($section, 0, $pos);
             } else {
                 $class_name = $section;
                 $section = -1;
             }
         }
     }
     // Если нужно, подгружаем файл шаблона
     if (!is_array($TEMPLATE)) {
         $templ_file = '/core/objects/' . $TEMPLATE . '.tpl';
         $TEMPLATE = page::getTemplate($templ_file);
         if (!is_array($TEMPLATE)) {
             return page::errorNotFound('core.objList', $templ_file);
         }
     }
     // Формируем выборку объектов
     $sel = new ormSelect($class_name);
     if ($section >= 0) {
         page::assign('parent_id', $section);
         $sel->where('parents', '=', $section);
     }
     // Сортировка списка
     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);
     }
     $class_list = $sel->getClassesList();
     if (!empty($class_list)) {
         // Узнаем какие поля объектов будут участвовать в выборке
         $fields_str = '';
         $fields = page::getFields('obj', $TEMPLATE, $class_list, $class_frame);
         if (isset($fields['obj'])) {
             while (list($key, $val) = each($fields['obj'])) {
                 if ($val != 'url' && $val != 'class' && $val != 'num') {
                     $fields_str .= empty($fields_str) ? $val : ', ' . $val;
                 }
             }
         }
         $sel->fields($fields_str);
         // Количество элементов и постраничная навигация
         if (!empty($max_count)) {
             if (isset($fields['funct']) && in_array('structure.navigation', $fields['funct'])) {
                 $count_page = ceil($sel->getCount() / $max_count);
                 page::assign('count_page', $count_page);
                 if (system::getCurrentNavNum() != 0) {
                     $niz = empty($start_pos) ? system::getCurrentNavNum() * $max_count - $max_count : $start_pos;
                     $sel->limit($niz, $max_count);
                 } else {
                     $sel->limit($max_count);
                 }
             } else {
                 if (!empty($start_pos)) {
                     $sel->limit($start_pos, $max_count);
                 } else {
                     $sel->limit($max_count);
                 }
             }
         }
         // Формируем список
         while ($obj = $sel->getObject()) {
             // Парсим поля страницы
             if (isset($fields['obj_all'])) {
                 reset($fields['obj_all']);
                 while (list($num, $name) = each($fields['obj_all'])) {
                     page::assign('obj.' . $name, $obj->__get($name));
                 }
             }
             $class = $obj->getClass()->getSName();
             $num = $sel->getObjectNum() + 1;
             page::assign('obj.num', $num);
             page::assign('obj.class', $class);
             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' : '');
             if ($num === 1) {
                 page::assign('first_children_id', $obj->id);
             }
             page::assign('last_children_id', $obj->id);
             if (isset($TEMPLATE['list_' . $class])) {
                 $templ = 'list_' . $class;
             } else {
                 if (isset($TEMPLATE['list'])) {
                     $templ = 'list';
                 } else {
                     $templ = '';
                 }
             }
             if (isset($TEMPLATE[$templ])) {
                 if ($num > 1 && isset($TEMPLATE['separator'])) {
                     $list .= $TEMPLATE['separator'];
                 }
                 $list .= page::parse($TEMPLATE[$templ]);
             }
         }
     }
     if (!empty($list) && $independent) {
         page::assign('list', $list);
         if (isset($TEMPLATE['frame_list'])) {
             $list = page::parse($TEMPLATE['frame_list']);
         } else {
             $list = page::errorBlock('core.objList', $templ_file, 'frame_list');
         }
     }
     return $list;
 }
Пример #7
0
 /**
  * @return int - количество подразделов
  * @param int $section_id - ID раздела сайта.
  * @param string $class - Системное имя ORM-класса, страницы которого необходимо посчитать.
  * @param boolean $active - Если 0, считает все страницы в разделе. Если 1, только активные.
  * @desc МАКРОС: Возвращает количество подразделов у указаного раздела (страницы)
  */
 public function objCount($section_id, $class = 0, $active = 0)
 {
     if ($active || !empty($class)) {
         $sel = new ormSelect($class);
         $sel->where('parents', '=', $section_id);
         if ($active) {
             $sel->where('active', '=', 1);
         }
         return $sel->getCount();
     } else {
         return ormPages::getCountOfSection($section_id);
     }
 }