Query(" SELECT * FROM " . PREFIX . "_rubric_fields_group WHERE rubric_id = '" . $rubric_id . "' ORDER BY group_position ASC "); $groups = array(); while($row = $sql->FetchRow()) { array_push($groups, $row); } return $groups; } /** * Вывод списка рубрик * */ function rubricList() { global $AVE_DB, $AVE_Template; $rubrics = array(); $num = $AVE_DB->Query("SELECT COUNT(*) FROM " . PREFIX . "_rubrics")->GetCell(); $page_limit = $this->_limit; $pages = ceil($num / $page_limit); $set_start = get_current_page() * $page_limit - $page_limit; if ($num > $page_limit) { $page_nav = " {t} "; $page_nav = get_pagination($pages, 'page', $page_nav); $AVE_Template->assign('page_nav', $page_nav); } $sql = $AVE_DB->Query(" SELECT rub.*, COUNT(doc.Id) AS doc_count, (SELECT count(*) FROM " . PREFIX . "_rubric_fields AS fld WHERE fld.rubric_id = rub.Id) AS fld_count, (SELECT count(*) FROM " . PREFIX . "_rubric_templates AS tmpls WHERE tmpls.rubric_id = rub.Id) AS tmpls_count FROM " . PREFIX . "_rubrics AS rub LEFT JOIN " . PREFIX . "_documents AS doc ON rubric_id = rub.Id GROUP BY rub.Id ORDER BY rub.rubric_position LIMIT " . $set_start . "," . $page_limit ); while ($row = $sql->FetchRow()) { array_push($rubrics, $row); } $AVE_Template->assign('rubrics', $rubrics); } /** * создание рубрики * */ function rubricNew() { global $AVE_DB, $AVE_Template; switch ($_REQUEST['sub']) { case '': $AVE_Template->assign('content', $AVE_Template->fetch('rubs/rubnew.tpl')); break; case 'save': $errors = array(); if (empty($_POST['rubric_title'])) { array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NO_NAME')); } else { $name_exist = $AVE_DB->Query(" SELECT 1 FROM " . PREFIX . "_rubrics WHERE rubric_title = '" . $_POST['rubric_title'] . "' LIMIT 1 ")->NumRows(); if ($name_exist) array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NAME_EXIST')); if (!empty($_POST['rubric_alias'])) { if (preg_match(TRANSLIT_URL ? '/[^\%HYa-z0-9\/_-]+/' : '/[^\%HYa-zа-яА-Яёїєі0-9\/_-]+/u', $_POST['rubric_alias'])) { array_push($errors, $AVE_Template->get_config_vars('RUBRIK_PREFIX_BAD_CHAR')); } else { $prefix_exist = $AVE_DB->Query(" SELECT 1 FROM " . PREFIX . "_rubrics WHERE rubric_alias = '" . $_POST['rubric_alias'] . "' LIMIT 1 ")->NumRows(); if ($prefix_exist) array_push($errors, $AVE_Template->get_config_vars('RUBRIK_PREFIX_EXIST')); } } if (!empty($errors)) { $AVE_Template->assign('errors', $errors); $AVE_Template->assign('templates', get_all_templates()); $AVE_Template->assign('content', $AVE_Template->fetch('rubs/rubnew.tpl')); } else { $position = (int)$AVE_DB->Query(" SELECT MAX(rubric_position) FROM " . PREFIX . "_rubrics ")->GetCell() + 1; $AVE_DB->Query(" INSERT " . PREFIX . "_rubrics SET rubric_title = '" . $_POST['rubric_title'] . "', rubric_alias = '" . $_POST['rubric_alias'] . "', rubric_template_id = '" . intval($_POST['rubric_template_id']) . "', rubric_author_id = '" . $_SESSION['user_id'] . "', rubric_created = '" . time() . "', rubric_position = '" . $position . "' "); $iid = $AVE_DB->InsertId(); // Выставляем всем право на просмотр рубрики, админу - все права $sql_user = $AVE_DB->Query(" SELECT grp.*, COUNT(usr.Id) AS UserCount FROM " . PREFIX . "_user_groups AS grp LEFT JOIN " . PREFIX . "_users AS usr ON usr.user_group = grp.user_group GROUP BY grp.user_group "); while ($row = $sql_user->FetchRow()) { $AVE_DB->Query(" INSERT " . PREFIX . "_rubric_permissions SET rubric_id = '" . $iid . "', user_group_id = '" . $row->user_group . "', rubric_permission = '". (($row->user_group == 1) ? "alles|docread|new|newnow|editown|editall|delrev" : "docread")."' "); } // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('RUBRIK_LOG_NEW_RUBRIC') . ' - ' . stripslashes(htmlspecialchars($_POST['rubric_title'], ENT_QUOTES)) . ' (id: '.$iid.')'); header('Location:index.php?do=rubs&action=edit&Id=' . $iid . '&cp=' . SESSION); exit; } } break; } } /** * Запись настроек рубрики * */ function quickSave() { global $AVE_DB, $AVE_Template; if (check_permission_acp('rubric_edit')) { foreach ($_POST['rubric_title'] as $rubric_id => $rubric_title) { if (!empty($rubric_title)) { $set_rubric_title = ''; $set_rubric_alias = ''; $name_exist = $AVE_DB->Query(" SELECT 1 FROM " . PREFIX . "_rubrics WHERE rubric_title = '" . $rubric_title . "' AND Id != '" . $rubric_id . "' LIMIT 1 ")->NumRows(); if (!$name_exist) { $set_rubric_title = "rubric_title = '" . $rubric_title . "',"; } if (isset($_POST['rubric_alias'][$rubric_id]) && $_POST['rubric_alias'][$rubric_id] != '') { $pattern = TRANSLIT_URL ? '/[^\%HYa-z0-9\/_-]+/' : '/[^\%HYa-zа-яА-Яёїєі0-9\/_-]+/u'; if (!(preg_match($pattern, $_POST['rubric_alias'][$rubric_id]))) { $prefix_exist = $AVE_DB->Query(" SELECT 1 FROM " . PREFIX . "_rubrics WHERE rubric_alias = '" . $_POST['rubric_alias'][$rubric_id] . "' AND Id != '" . $rubric_id . "' LIMIT 1 ")->NumRows(); if (!$prefix_exist) { $set_rubric_alias = "rubric_alias = '" . trim(preg_replace($pattern, '', $_POST['rubric_alias'][$rubric_id]), '/') . "',"; } } } else { $set_rubric_alias = "rubric_alias = '',"; } $AVE_DB->Query(" UPDATE " . PREFIX . "_rubrics SET " . $set_rubric_title . " " . $set_rubric_alias . " rubric_meta_gen = '" . (isset($_POST['rubric_meta_gen'][$rubric_id]) ? $_POST['rubric_meta_gen'][$rubric_id] : '0') . "', rubric_alias_history = '" . (isset($_POST['rubric_alias_history'][$rubric_id]) ? $_POST['rubric_alias_history'][$rubric_id] : '0') . "', rubric_template_id = '" . (int)$_POST['rubric_template_id'][$rubric_id] . "', rubric_docs_active = '" . (isset($_POST['rubric_docs_active'][$rubric_id]) ? $_POST['rubric_docs_active'][$rubric_id] : '0') . "' WHERE Id = '" . $rubric_id . "' "); } } $message = $AVE_Template->get_config_vars('RUBRIK_REP_QUICKSAVE_T'); $header = $AVE_Template->get_config_vars('RUBRIK_REP_QUICKSAVE_H'); $theme = 'accept'; reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_QUICKSAVE')); if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = 'run') { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); exit; } else { $page = !empty($_REQUEST['page']) ? '&page=' . $_REQUEST['page'] : '' ; header('Location:index.php?do=rubs' . $page . '&cp=' . SESSION); } } } /** * Копирование рубрики * */ function rubricCopy() { global $AVE_DB, $AVE_Template; $rubric_id = (int)$_REQUEST['Id']; $errors = array(); if (empty($_REQUEST['rubric_title'])) { array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NO_NAME')); } else { $name_exist = $AVE_DB->Query(" SELECT 1 FROM " . PREFIX . "_rubrics WHERE rubric_title = '" . $_POST['rubric_title'] . "' LIMIT 1 ")->NumRows(); if ($name_exist) array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NAME_EXIST')); } if (!empty($_POST['rubric_alias'])) { if (preg_match(TRANSLIT_URL ? '/[^\%HYa-z0-9\/-]+/' : '/[^\%HYa-zа-яёїєі0-9\/_-]+/', $_POST['rubric_alias'])) { array_push($errors, $AVE_Template->get_config_vars('RUBRIK_PREFIX_BAD_CHAR')); } else { $prefix_exist = $AVE_DB->Query(" SELECT 1 FROM " . PREFIX . "_rubrics WHERE rubric_alias = '" . $_POST['rubric_alias'] . "' LIMIT 1 ")->NumRows(); if ($prefix_exist) array_push($errors, $AVE_Template->get_config_vars('RUBRIK_PREFIX_EXIST')); } } $row = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_rubrics WHERE Id = '" . $rubric_id . "' ")->FetchRow(); if (!$row) array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NO_RUBRIK')); if (!empty($errors)) { $AVE_Template->assign('errors', $errors); } else { $AVE_DB->Query(" INSERT " . PREFIX . "_rubrics SET rubric_title = '" . $_POST['rubric_title'] . "', rubric_alias = '" . $_POST['rubric_alias'] . "', rubric_template = '" . addslashes($row->rubric_template) . "', rubric_template_id = '" . addslashes($row->rubric_template_id) . "', rubric_author_id = '" . (int)$_SESSION['user_id'] . "', rubric_created = '" . time() . "', rubric_teaser_template = '" . addslashes($row->rubric_teaser_template) . "', rubric_header_template = '" . addslashes($row->rubric_header_template) . "', rubric_footer_template = '" . addslashes($row->rubric_footer_template) . "', rubric_admin_teaser_template = '" . addslashes($row->rubric_admin_teaser_template) . "' "); $iid = $AVE_DB->InsertId(); $sql = $AVE_DB->Query(" SELECT user_group_id, rubric_permission FROM " . PREFIX . "_rubric_permissions WHERE rubric_id = '" . $rubric_id . "' "); while ($row = $sql->FetchRow()) { $AVE_DB->Query(" INSERT " . PREFIX . "_rubric_permissions SET rubric_id = '" . $iid . "', user_group_id = '" . (int)$row->user_group_id . "', rubric_permission = '" . addslashes($row->rubric_permission) . "' "); } $sql = $AVE_DB->Query(" SELECT rubric_field_title, rubric_field_alias, rubric_field_type, rubric_field_position, rubric_field_default, rubric_field_template, rubric_field_template_request, rubric_field_description FROM " . PREFIX . "_rubric_fields WHERE rubric_id = '" . $rubric_id . "' ORDER BY rubric_field_position ASC "); while ($row = $sql->FetchRow()) { $AVE_DB->Query(" INSERT " . PREFIX . "_rubric_fields SET rubric_id = '" . $iid . "', rubric_field_title = '" . addslashes($row->rubric_field_title) . "', rubric_field_alias = '" . addslashes($row->rubric_field_alias) . "', rubric_field_type = '" . addslashes($row->rubric_field_type) . "', rubric_field_position = '" . (int)$row->rubric_field_position . "', rubric_field_default = '" . addslashes($row->rubric_field_default) . "', rubric_field_template = '" . addslashes($row->rubric_field_template) . "', rubric_field_template_request = '" . addslashes($row->rubric_field_template_request) . "', rubric_field_description = '" . addslashes($row->rubric_field_description) . "' "); } reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_COPY') . ' - ' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)) . ' (id: '.$rubric_id.')'); echo ''; } } /** * Удаление рубрики * */ function rubricDelete() { global $AVE_DB, $AVE_Template; $rubric_id = (int)$_REQUEST['Id']; if ($rubric_id <= 1) { header('Location:index.php?do=rubs&cp=' . SESSION); exit; } $rubric_not_empty = $AVE_DB->Query(" SELECT 1 FROM " . PREFIX . "_documents WHERE rubric_id = '" . $rubric_id . "' LIMIT 1 ")->GetCell(); if (!$rubric_not_empty) { $AVE_DB->Query(" DELETE FROM " . PREFIX . "_rubrics WHERE Id = '" . $rubric_id . "' "); $AVE_DB->Query(" DELETE FROM " . PREFIX . "_rubric_fields WHERE rubric_id = '" . $rubric_id . "' "); $AVE_DB->Query(" DELETE FROM " . PREFIX . "_rubric_permissions WHERE rubric_id = '" . $rubric_id . "' "); // Очищаем кэш шаблона документов рубрики $AVE_DB->Query(" DELETE FROM " . PREFIX . "_rubric_template_cache WHERE rub_id = '" . $rubric_id . "' "); // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('RUBRIK_LOG_DEL_RUBRIC') . ' - ' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)) . ' (id: '.$rubric_id.')'); } header('Location:index.php?do=rubs&cp=' . SESSION); exit; } /** * Вывод списка полей рубрики * * @param int $rubric_id идентификатор рубрики */ function rubricFieldShow($rubric_id = 0, $ajax) { global $AVE_DB, $AVE_Template; if (check_permission_acp('rubric_edit')) { // Поля $sql = $AVE_DB->Query(" SELECT a.*, b.group_title, b.group_description, b.group_position FROM " . PREFIX . "_rubric_fields AS a LEFT JOIN " . PREFIX . "_rubric_fields_group AS b ON a.rubric_field_group = b.Id WHERE a.rubric_id = '" . $rubric_id . "' ORDER BY b.group_position ASC, a.rubric_field_position ASC "); $fields_list = array(); while ($row = $sql->FetchRow()) { $group_id = ($row->rubric_field_group) ? $row->rubric_field_group : 0; $fields_list[$group_id]['group_position'] = ($row->group_position) ? $row->group_position : 100; $fields_list[$group_id]['group_title'] = $row->group_title; $fields_list[$group_id]['group_description'] = $row->group_description; $fields_list[$group_id]['fields'][$row->Id]['Id'] = $row->Id; $fields_list[$group_id]['fields'][$row->Id]['rubric_id'] = $row->rubric_id; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_group'] = $row->rubric_field_group; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_alias'] = $row->rubric_field_alias; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_title'] = $row->rubric_field_title; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_type'] = $row->rubric_field_type; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_numeric'] = $row->rubric_field_numeric; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_default'] = $row->rubric_field_default; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_search'] = $row->rubric_field_search; } $fields_list = msort($fields_list, 'group_position'); $AVE_Template->assign('groups_count', count($fields_list)); $AVE_Template->assign('fields_list', $fields_list); // Группы полей $fields_groups = array(); $sql = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_rubric_fields_group WHERE rubric_id = '" . $rubric_id . "' ORDER BY group_position ASC "); while ($row = $sql->FetchRow()) array_push($fields_groups, $row); $AVE_Template->assign('fields_groups', $fields_groups); // Права $groups = array(); $sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_user_groups"); while ($row = $sql->FetchRow()) { $row->doall = ($row->user_group == 1) ? ' disabled="disabled" checked="checked"' : ''; $row->doall_h = ($row->user_group == 1) ? 1 : ''; $rubric_permission = $AVE_DB->Query(" SELECT rubric_permission FROM " . PREFIX . "_rubric_permissions WHERE user_group_id = '" . $row->user_group . "' AND rubric_id = '" . $rubric_id . "' ")->GetCell(); $row->permissions = @explode('|', $rubric_permission); array_push($groups,$row); } $sql = $AVE_DB->Query(" SELECT rubric_title, rubric_linked_rubric, rubric_description FROM " . PREFIX . "_rubrics WHERE id = '" . $rubric_id . "' LIMIT 1 "); $rubrik = $sql->FetchRow(); $rubrik->rubric_linked_rubric = ($rubrik->rubric_linked_rubric != '0') ? unserialize($rubrik->rubric_linked_rubric) : array(); $AVE_Template->assign('rubric', $rubrik); $AVE_Template->assign('groups', $groups); $AVE_Template->assign('fields', get_field_type()); $AVE_Template->assign('rubs', $this->rubricShow()); if (isAjax()) { $AVE_Template->assign('content', $AVE_Template->fetch('rubs/fields.tpl')); } else { $AVE_Template->assign('content', $AVE_Template->fetch('rubs/fields_list.tpl')); } } else { header('Location:index.php?do=rubs&cp=' . SESSION); exit; } } /** * Вывод списка полей рубрики * * @param int $rubric_id идентификатор рубрики */ function rubricRulesShow($rubric_id = 0) { global $AVE_DB, $AVE_Template; if (check_permission_acp('rubric_edit')) { // Права $groups = array(); $sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_user_groups"); while ($row = $sql->FetchRow()) { $row->doall = ($row->user_group == 1) ? ' disabled="disabled" checked="checked"' : ''; $row->doall_h = ($row->user_group == 1) ? 1 : ''; $rubric_permission = $AVE_DB->Query(" SELECT rubric_permission FROM " . PREFIX . "_rubric_permissions WHERE user_group_id = '" . $row->user_group . "' AND rubric_id = '" . $rubric_id . "' ")->GetCell(); $row->permissions = @explode('|', $rubric_permission); array_push($groups,$row); } $sql = $AVE_DB->Query(" SELECT rubric_title, rubric_linked_rubric, rubric_description FROM " . PREFIX . "_rubrics WHERE id = '" . $rubric_id . "' LIMIT 1 "); $rubric = $sql->FetchRow(); $AVE_Template->assign('rubric', $rubric); $AVE_Template->assign('groups', $groups); if (isAjax()) { } else { $AVE_Template->assign('content', $AVE_Template->fetch('rubs/rules.tpl')); } } else { header('Location:index.php?do=rubs&cp=' . SESSION); exit; } } /** * Вывод списка рубрик * * @param int $rubric_id идентификатор текущей рубрики */ function rubricShow($RubLink=null) { global $AVE_DB; if ($RubLink !== null) { $AVE_DB->Query(" UPDATE " . PREFIX . "_rubrics SET rubric_linked_rubric = '" . serialize($_REQUEST['rubric_linked']) . "' WHERE Id = '" . (int)$_REQUEST['Id'] . "' "); header('Location:index.php?do=rubs&action=edit&Id=' . (int)$_REQUEST['Id'] . '&cp=' . SESSION); exit; } else { $rubs = array(); $sql = $AVE_DB->Query(" SELECT rubric_title, Id FROM " . PREFIX . "_rubrics ORDER BY rubric_position ASC "); while ($row = $sql->FetchRow()) array_push($rubs, $row); return $rubs; } } /** * Создание нового поля рубрики * * @param int $rubric_id идентификатор рубрики */ function rubricFieldNew($rubric_id = 0, $ajax) { global $AVE_DB, $AVE_Template; if (!empty($_POST['title_new'])) { $position = (int)$AVE_DB->Query(" SELECT MAX(rubric_field_position) FROM " . PREFIX . "_rubric_fields WHERE rubric_id = '" . $rubric_id . "' ")->GetCell() + 1; if ($_POST['rub_type_new'] == 'dropdown') { $rubric_field_default = trim($_POST['default_value']); $rubric_field_default = preg_split('/\s*,\s*/', $rubric_field_default); $rubric_field_default = implode(',', $rubric_field_default); } else { $rubric_field_default = $_POST['default_value']; } $AVE_DB->Query(" INSERT " . PREFIX . "_rubric_fields SET rubric_id = '" . $rubric_id . "', rubric_field_group = '" . (($_POST['group_new'] != '') ? (int)$_POST['group_new'] : '0') . "', rubric_field_title = '" . $_POST['title_new'] . "', rubric_field_type = '" . $_POST['rub_type_new'] . "', rubric_field_position = '" . $position . "', rubric_field_default = '" . $rubric_field_default . "', rubric_field_numeric = '" . (($_POST['rubric_field_numeric'] == 1) ? $_POST['rubric_field_numeric'] : '0') . "', rubric_field_search = '" . (($_POST['rubric_field_search'] == 1) ? $_POST['rubric_field_search'] : '0') . "' "); $UpdateRubricField = $AVE_DB->InsertId(); $sql = $AVE_DB->Query(" SELECT Id FROM " . PREFIX . "_documents WHERE rubric_id = '" . $rubric_id . "' "); while ($row = $sql->FetchRow()) { $AVE_DB->Query(" INSERT " . PREFIX . "_document_fields SET rubric_field_id = '" . $UpdateRubricField . "', document_id = '" . $row->Id . "' "); } // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('RUBRIK_LOG_NEW_FIELD').' (' . stripslashes(htmlspecialchars($_POST['title_new'], ENT_QUOTES)) . ') '. stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)). ' (id: '.$rubric_id.')'); } else { if (!$ajax){ header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION); exit; }else{ $message = $AVE_Template->get_config_vars('RUBRIK_EMPTY_MESSAGE'); $header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS'); $theme = 'error'; echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); exit; } } if (!$ajax){ header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION); exit; }else{ $message = $AVE_Template->get_config_vars('RUBRIK_FILD_SAVED'); $header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS'); $theme = 'accept'; echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); exit; } } /** * Редактирование кода для рубрики * * @param int $rubric_id идентификатор рубрики */ function rubricCodeEdit($rubric_id = 0) { global $AVE_DB, $AVE_Template; switch ($_REQUEST['sub']) { case '': $code = $AVE_DB->Query(" SELECT rubric_code_start, rubric_code_end, rubric_start_code FROM " . PREFIX . "_rubrics WHERE Id = '" . $rubric_id . "' ")->FetchRow(); $AVE_Template->assign('code', $code); $AVE_Template->assign('rubric_title', $this->rubricNameByIdGet($rubric_id)->rubric_title); $AVE_Template->assign('formaction', 'index.php?do=rubs&action=code&sub=save&Id=' . $rubric_id . '&cp=' . SESSION); $AVE_Template->assign('content', $AVE_Template->fetch('rubs/code.tpl')); break; case 'save': $sql = $AVE_DB->Query(" UPDATE " . PREFIX . "_rubrics SET rubric_start_code = '" . $_POST['rubric_start_code'] . "', rubric_code_start = '" . $_POST['rubric_code_start'] . "', rubric_code_end = '" . $_POST['rubric_code_end'] . "' WHERE Id = '" . $rubric_id . "' "); $AVE_DB->clearcache('rub_' . $rubric_id); $sql = $AVE_DB->Query(" SELECT Id FROM " . PREFIX . "_documents WHERE rubric_id = " . $rubric_id . " "); while ($row = $sql->GetCell()) { $AVE_DB->clearcache('doc_' . $row); $AVE_DB->clearcompile('doc_' . $row); } if ($sql->_result === false) { $message = $AVE_Template->get_config_vars('RUBRIK_CODE_SAVED_ERR'); $header = $AVE_Template->get_config_vars('RUBRIK_CODE_ERROR'); $theme = 'error'; } else { $message = $AVE_Template->get_config_vars('RUBRIK_CODE_SAVED'); $header = $AVE_Template->get_config_vars('RUBRIK_CODE_SUCCESS'); $theme = 'accept'; reportLog($AVE_Template->get_config_vars('RUBRIK_CODE_UPDATE') . " (" . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)) . ") (id: $rubric_id)"); } if (isAjax()) { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); } else { header('Location:index.php?do=rubs&action=code&Id=' . $rubric_id . '&cp=' . SESSION); } exit; } } /** * Редактирование кода для рубрики * * @param int $rubric_id идентификатор рубрики */ function rubricCode($rubric_id = 0) { global $AVE_DB, $AVE_Template; $sql = $AVE_DB->Query(" UPDATE " . PREFIX . "_rubrics SET rubric_start_code = '" . $_POST['rubric_start_code'] . "', rubric_code_start = '" . $_POST['rubric_code_start'] . "', rubric_code_end = '" . $_POST['rubric_code_end'] . "' WHERE Id = '" . $rubric_id . "' "); if ($sql->_result === false) { $message = $AVE_Template->get_config_vars('RUBRIK_CODE_SAVED_ERR'); $header = $AVE_Template->get_config_vars('RUBRIK_CODE_ERROR'); $theme = 'error'; } else { $message = $AVE_Template->get_config_vars('RUBRIK_CODE_SAVED'); $header = $AVE_Template->get_config_vars('RUBRIK_CODE_SUCCESS'); $theme = 'accept'; reportLog($AVE_Template->get_config_vars('RUBRIK_CODE_UPDATE') . " (" . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)) . ") (id: $rubric_id)"); } if (isAjax()) { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); } else { header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION); } exit; } /** * Редактирование описания рубрики * * @param int $rubric_id идентификатор рубрики */ function rubricDesc($rubric_id = 0) { global $AVE_DB; $AVE_DB->Query(" UPDATE " . PREFIX . "_rubrics SET rubric_description = '" . $_POST['rubric_description'] . "' WHERE Id = '" . $rubric_id . "' "); header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION); exit; } /** * Управление полями рубрики * * @param int $rubric_id идентификатор рубрики */ function rubricFieldSave($rubric_id = 0) { global $AVE_DB, $AVE_Template; foreach ($_POST['title'] as $id => $title) { if (!empty($title)) { $AVE_DB->Query(" UPDATE " . PREFIX . "_rubric_fields SET rubric_field_title = '" . $title . "', rubric_field_numeric = '" . $_POST['rubric_field_numeric'][$id] . "', rubric_field_search = '" . $_POST['rubric_field_search'][$id] . "' WHERE Id = '" . $id . "' "); // Очищаем кэш шаблона документов рубрики $AVE_DB->Query(" DELETE FROM " . PREFIX . "_rubric_template_cache WHERE rub_id = '" . $rubric_id . "' "); $sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id); while ($row = $sql->FetchRow()) { $AVE_DB->clearcache('doc_'.$row->Id); $AVE_DB->clearcompile('doc_'.$row->Id); $AVE_DB->clearcacherequest('doc_'.$row->Id); } reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_FIELD_EDIT') . ' (' . stripslashes($title) . ') '.$AVE_Template->get_config_vars('RUBRIK_REPORT_RUB').' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')'); } } foreach ($_POST['del'] as $id => $Del) { if (!empty($Del)) { $AVE_DB->Query(" DELETE FROM " . PREFIX . "_rubric_fields WHERE Id = '" . $id . "' AND rubric_id = '" . $rubric_id . "' "); $AVE_DB->Query(" DELETE FROM " . PREFIX . "_document_fields WHERE rubric_field_id = '" . $id . "' "); // Очищаем кэш шаблона документов рубрики $AVE_DB->Query(" DELETE FROM " . PREFIX . "_rubric_template_cache WHERE rub_id = '" . $rubric_id . "' "); reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_FIELD_DEL') . ' (' . stripslashes($_POST['title'][$id]) . ') '.$AVE_Template->get_config_vars('RUBRIK_REPORT_RUB').' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')'); } } $AVE_DB->clearcache('rub_'.$rubric_id); $sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id); while ($row = $sql->FetchRow()) { $AVE_DB->clearcache('doc_'.$row->Id); $AVE_DB->clearcompile('doc_'.$row->Id); } $message = $AVE_Template->get_config_vars('RUBRIK_FILDS_SAVED'); $header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS'); $theme = 'accept'; reportLog($AVE_Template->get_config_vars('RUBRIK_FILDS_REPORT') . ' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')'); if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1') { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); } else { $AVE_Template->assign('message', $message); header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION); } exit; } /** * Сортировка полей рубрики * * @param array $sorted последовательность id полей */ function rubricFieldsSort() { global $AVE_DB, $AVE_Template; foreach ($_REQUEST['sort'] as $position => $field_id) { $AVE_DB->Query(" UPDATE " . PREFIX . "_rubric_fields SET rubric_field_position = '" . (int)$position . "' WHERE Id = '" . (int)$field_id . "' "); } reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_SORTE_FIELDS')); if (isAjax()){ $message = $AVE_Template->get_config_vars('RUBRIK_SORTED'); $header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS'); $theme = 'accept'; echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); } } /** * Сортировка рубрик * * @param array $sorted последовательность id полей */ function rubricsSort() { global $AVE_DB, $AVE_Template; foreach ($_REQUEST['sort'] as $position => $rub_id) { $AVE_DB->Query(" UPDATE " . PREFIX . "_rubrics SET rubric_position = '" . (int)$position . "' WHERE Id = '" . (int)$rub_id . "' "); } reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_SORTE')); if (isAjax()){ $message = $AVE_Template->get_config_vars('RUBRIK_SORTED'); $header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS'); $theme = 'accept'; echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); } } /** * Вывод шаблона рубрики * * @param int $show * @param int $extern */ function rubricTemplateShow($show = '', $extern = '0') { global $AVE_DB, $AVE_Template; if ($extern == 1) { $fetchId = (isset($_REQUEST['rubric_id']) && is_numeric($_REQUEST['rubric_id'])) ? $_REQUEST['rubric_id'] : 0; } else { $fetchId = (isset($_REQUEST['Id']) && is_numeric($_REQUEST['Id'])) ? $_REQUEST['Id'] : 0; } $rubric = $AVE_DB->Query(" SELECT rubric_title, rubric_template, rubric_header_template, rubric_footer_template, rubric_teaser_template, rubric_admin_teaser_template, rubric_description FROM " . PREFIX . "_rubrics WHERE Id = '" . $fetchId . "' ") ->FetchRow(); // Поля $sql = $AVE_DB->Query(" SELECT a.*, b.group_title, b.group_description, b.group_position FROM " . PREFIX . "_rubric_fields AS a LEFT JOIN " . PREFIX . "_rubric_fields_group AS b ON a.rubric_field_group = b.Id WHERE a.rubric_id = '" . $fetchId . "' ORDER BY b.group_position ASC, a.rubric_field_position ASC "); $fields_list = array(); $drop_down_fields = array(); while ($row = $sql->FetchRow()) { $group_id = ($row->rubric_field_group) ? $row->rubric_field_group : 0; if ($row->rubric_field_type == 'drop_down' || $row->rubric_field_type == 'drop_down_key') array_push($drop_down_fields, $row->Id); $fields_list[$group_id]['group_position'] = ($row->group_position) ? $row->group_position : 100; $fields_list[$group_id]['group_title'] = $row->group_title; $fields_list[$group_id]['group_description'] = $row->group_description; $fields_list[$group_id]['fields'][$row->Id]['Id'] = $row->Id; $fields_list[$group_id]['fields'][$row->Id]['rubric_id'] = $row->rubric_id; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_group'] = $row->rubric_field_group; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_alias'] = $row->rubric_field_alias; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_title'] = $row->rubric_field_title; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_type'] = $row->rubric_field_type; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_numeric'] = $row->rubric_field_numeric; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_default'] = $row->rubric_field_default; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_search'] = $row->rubric_field_search; } $fields_list = msort($fields_list, 'group_position'); $AVE_Template->assign('groups_count', count($fields_list)); $AVE_Template->assign('fields_list', $fields_list); $AVE_Template->assign('field_array', get_field_type()); if ($show == 1 ) $rubric->rubric_template = stripslashes($_POST['rubric_template']); if ($extern == 1) { $AVE_Template->assign('ddid', implode(',', $drop_down_fields)); } else { $AVE_Template->assign('rubric', $rubric); $AVE_Template->assign('formaction', 'index.php?do=rubs&action=template&sub=save&Id=' . $fetchId . '&cp=' . SESSION); $AVE_Template->assign('content', $AVE_Template->fetch('rubs/form.tpl')); } } /** * Редактирование шаблона рубрики * * @param string $data */ function rubricTemplateSave($Rtemplate, $Htemplate = '', $Ttemplate = '', $Atemplate = '', $Ftemplate = '') { global $AVE_DB, $AVE_Template; $rubric_id = (int)$_REQUEST['Id']; $sql = $AVE_DB->Query(" UPDATE " . PREFIX . "_rubrics SET rubric_template = '" . ($Rtemplate) . "', rubric_header_template = '" . $Htemplate . "', rubric_footer_template = '" . $Ftemplate . "', rubric_teaser_template = '" . $Ttemplate . "', rubric_admin_teaser_template = '" . $Atemplate . "' WHERE Id = '" . $rubric_id . "' "); // Очищаем кэш шаблона документов рубрики $AVE_DB->Query(" DELETE FROM " . PREFIX . "_rubric_template_cache WHERE rub_id = '" . $rubric_id . "' "); if ($sql === false) { $message = $AVE_Template->get_config_vars('RUBRIC_SAVED_TPL_ERR'); $header = $AVE_Template->get_config_vars('RUBRIK_ERROR'); $theme = 'error'; } else { $message = $AVE_Template->get_config_vars('RUBRIC_SAVED_TPL'); $header = $AVE_Template->get_config_vars('RUBRIC_SUCCESS'); $theme = 'accept'; reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_TEMPL_RUB') . ' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')'); } $sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id); while ($row = $sql->FetchRow()) { $AVE_DB->clearcache('doc_'.$row->Id); $AVE_DB->clearcompile('doc_'.$row->Id); } if (isAjax()) { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); exit; } else { $AVE_Template->assign('message', $message); header('Location:index.php?do=rubs&cp=' . SESSION); exit; } } /** * Управление правами доступа к документам рубрик * * @param int $rubric_id идентификатор рубрики */ function rubricPermissionSave($rubric_id = 0) { global $AVE_DB, $AVE_Template; if (check_permission_acp('rubric_perms') && is_numeric($rubric_id) && $rubric_id > 0) { foreach ($_POST['user_group'] as $key => $user_group_id) { $exist = $AVE_DB->Query(" SELECT 1 FROM " . PREFIX . "_rubric_permissions WHERE user_group_id = '" . $user_group_id . "' AND rubric_id = '" . $rubric_id . "' LIMIT 1 ")->NumRows(); $rubric_permission = @implode('|', $_POST['perm'][$key]); if ($exist) { $AVE_DB->Query(" UPDATE " . PREFIX . "_rubric_permissions SET rubric_permission = '" . $rubric_permission . "' WHERE user_group_id = '" . $user_group_id . "' AND rubric_id = '" . $rubric_id . "' "); } else { $AVE_DB->Query(" INSERT " . PREFIX . "_rubric_permissions SET rubric_id = '" . $rubric_id . "', user_group_id = '" . $user_group_id . "', rubric_permission = '" . $rubric_permission . "' "); } } $message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PERMS'); $header = $AVE_Template->get_config_vars('RUBRIC_SUCCESS'); $theme = 'accept'; reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_PERMISION') . ' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')'); if (isAjax()) { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); exit; } else { header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION); exit; } } } /** * Получить наименование и URL-префикс Рубрики по идентификатору * * @param int $rubric_id идентификатор Рубрики * @return object наименование Рубрики */ function rubricNameByIdGet($rubric_id = 0) { global $AVE_DB; static $rubrics = array(); if (!isset($rubrics[$rubric_id])) { $rubrics[$rubric_id] = $AVE_DB->Query(" SELECT rubric_title, rubric_alias, rubric_description FROM " . PREFIX . "_rubrics WHERE Id = '" . $rubric_id . "' LIMIT 1 ")->FetchRow(); } return $rubrics[$rubric_id]; } /** * Формирование прав доступа Групп пользователей на все Рубрики * */ function rubricPermissionFetch() { global $AVE_DB, $AVE_Document, $AVE_Template; $items = array(); $sql = $AVE_DB->Query(" SELECT Id, rubric_title, rubric_docs_active FROM " . PREFIX . "_rubrics ORDER BY rubric_position "); while ($row = $sql->FetchRow()) { $AVE_Document->documentPermissionFetch($row->Id); if (defined('UGROUP') && UGROUP == 1) $row->Show = 1; elseif (isset($_SESSION[$row->Id . '_editown']) && $_SESSION[$row->Id . '_editown'] == 1) $row->Show = 1; elseif (isset($_SESSION[$row->Id . '_editall']) && $_SESSION[$row->Id . '_editall'] == 1) $row->Show = 1; elseif (isset($_SESSION[$row->Id . '_new']) && $_SESSION[$row->Id . '_new'] == 1) $row->Show = 1; elseif (isset($_SESSION[$row->Id . '_newnow']) && $_SESSION[$row->Id . '_newnow'] == 1) $row->Show = 1; elseif (isset($_SESSION[$row->Id . '_alles']) && $_SESSION[$row->Id . '_alles'] == 1) $row->Show = 1; array_push($items, $row); } $AVE_Template->assign('rubrics', $items); } /** * Получить */ function rubricAliasAdd() { global $AVE_DB, $AVE_Template; $sql = $AVE_DB->Query(" SELECT a.rubric_title, b.rubric_field_title, b.rubric_field_alias FROM " . PREFIX . "_rubrics AS a JOIN " . PREFIX . "_rubric_fields AS b WHERE a.Id = '" . $_REQUEST['rubric_id'] . "' AND b.Id = '" . $_REQUEST['field_id'] . "' ")->FetchAssocArray(); $AVE_Template->assign($sql); $AVE_Template->assign('content', $AVE_Template->fetch('rubs/alias.tpl')); } function rubricAliasCheck($rubric_id, $field_id, $value) { global $AVE_DB, $AVE_Template; $errors = array(); if(!intval($rubric_id)>0){ $errors[] = $AVE_Template->get_config_vars('RUBRIK_ALIAS_RUBID'); } if(!intval($field_id)>0) { $errors[] = $AVE_Template->get_config_vars('RUBRIK_ALIAS_FIELDID'); }; if(!preg_match('/^[A-Za-z][[:word:]]{0,19}$/', $value)) { $errors[] = $AVE_Template->get_config_vars('RUBRIK_ALIAS_MATCH'); }; //Проверяем есть такой алиас уже $res = $AVE_DB->Query(" SELECT COUNT(*) FROM " . PREFIX . "_rubric_fields WHERE Id <> " . intval($field_id) . " AND rubric_id = " . intval($rubric_id) . " AND rubric_field_alias = '" . addslashes($value) . "' ")->GetCell(); if($res>0){ $errors[] = $AVE_Template->get_config_vars('RUBRIK_ALIAS_MATCH'); }; if (empty($errors)) { $AVE_DB->Query(" UPDATE " . PREFIX . "_rubric_fields SET rubric_field_alias = '" . addslashes($value) . "' WHERE Id = '" . intval($field_id) . "' AND rubric_id = '" . intval($rubric_id) . "' "); $AVE_Template->assign('success', true); } else { $AVE_Template->assign('errors', $errors); } $sql = $AVE_DB->Query(" SELECT a.rubric_title, b.rubric_field_title, b.rubric_field_alias FROM " . PREFIX . "_rubrics AS a JOIN " . PREFIX . "_rubric_fields AS b WHERE a.Id = '" . $_REQUEST['rubric_id'] . "' AND b.Id = '" . $_REQUEST['field_id'] . "' ")->FetchAssocArray(); $AVE_Template->assign($sql); $AVE_Template->assign('content', $AVE_Template->fetch('rubs/alias.tpl')); } function rubricFieldTemplate() { global $AVE_DB, $AVE_Template; $field = $AVE_DB->Query(" SELECT a.rubric_title, b.rubric_field_default, b.rubric_field_title, b.rubric_field_template, b.rubric_field_template_request, b.rubric_field_description FROM " . PREFIX . "_rubrics AS a JOIN " . PREFIX . "_rubric_fields AS b WHERE a.Id = '" . $_REQUEST['rubric_id'] . "' AND b.Id = '" . $_REQUEST['field_id'] . "' ")->FetchAssocArray(); $AVE_Template->assign($field); $AVE_Template->assign('content', $AVE_Template->fetch('rubs/field_template.tpl')); } function rubricFieldTemplateSave($id, $rubric_id) { global $AVE_DB, $AVE_Template; $sql = $AVE_DB->Query(" UPDATE " . PREFIX . "_rubric_fields SET rubric_field_default = '" . $_POST['rubric_field_default'] . "', rubric_field_template = '" . $_POST['rubric_field_template'] . "', rubric_field_template_request = '" . $_POST['rubric_field_template_request'] . "', rubric_field_description = '" . $_POST['rubric_field_description'] . "' WHERE Id = '" . $id . "' "); if ($sql->_result === false) { $message = $AVE_Template->get_config_vars('RUBRIC_SAVED_FLDTPL_ERR'); $header = $AVE_Template->get_config_vars('RUBRIK_ERROR'); $theme = 'error'; if (isAjax() && !$_REQUEST['save']) { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); exit; } else { $this->rubricFieldTemplate(); exit; } }else{ $AVE_DB->clearcache('rub_'.$rubric_id); $sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_documents"); while ($row = $sql->FetchRow()) { $AVE_DB->clearcache('doc_'.$row->Id); $AVE_DB->clearcompile('doc_'.$row->Id); $AVE_DB->clearcacherequest('doc_'.$row->Id); } // Очищаем кэш шаблона документов рубрики $AVE_DB->Query(" DELETE FROM " . PREFIX . "_rubric_template_cache WHERE rub_id = '" . $rubric_id . "' "); $message = $AVE_Template->get_config_vars('RUBRIC_SAVED_FLDTPL'); $header = $AVE_Template->get_config_vars('RUBRIC_SUCCESS'); $theme = 'accept'; if (isAjax()) { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); exit; } } } function rubricFieldChange($field_id, $rubric_id) { global $AVE_DB, $AVE_Template; $sql = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_rubric_fields WHERE rubric_id = '" . $rubric_id . "' AND Id = " . $field_id . " ")->FetchAssocArray(); $AVE_Template->assign('rf', $sql); $AVE_Template->assign('fields', get_field_type()); $AVE_Template->assign('content', $AVE_Template->fetch('rubs/change.tpl')); } function rubricFieldChangeSave($field_id, $rubric_id) { global $AVE_DB, $AVE_Template; $AVE_DB->Query(" UPDATE " . PREFIX . "_rubric_fields SET rubric_field_type = '" . trim($_POST['rubric_field_type']) . "' WHERE Id = '" . $field_id . "' AND rubric_id = '" . $rubric_id . "' "); $sql = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_rubric_fields WHERE rubric_id = '" . $rubric_id . "' AND Id = " . $field_id . " ")->FetchAssocArray(); $AVE_Template->assign('rf', $sql); $AVE_Template->assign('fields', get_field_type()); $AVE_Template->assign('content', $AVE_Template->fetch('rubs/change.tpl')); } function rubricFieldsGroups($rubric_id) { global $AVE_DB, $AVE_Template; $sql = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_rubric_fields_group WHERE rubric_id = '" . $rubric_id . "' ORDER BY group_position "); $groups = array(); while($row = $sql->FetchRow()) { array_push($groups, $row); } $AVE_Template->assign('rubric', $this->rubricNameByIdGet($rubric_id)); $AVE_Template->assign('groups', $groups); $AVE_Template->assign('content', $AVE_Template->fetch('rubs/fields_groups.tpl')); } /** * Сортировка групп полей рубрики * * @param array $sorted последовательность id полей */ function rubricFieldsGroupsSort() { global $AVE_DB, $AVE_Template; foreach ($_REQUEST['sort'] as $position => $group_id) { $position++; $AVE_DB->Query(" UPDATE " . PREFIX . "_rubric_fields_group SET group_position = '" . (int)$position . "' WHERE Id = '" . (int)$group_id . "' "); } if (isAjax()) { $message = $AVE_Template->get_config_vars('RUBRIK_SORTED'); $header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS'); $theme = 'accept'; echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); } } function rubricNewGroupFields($rubric_id) { global $AVE_DB; $position = $AVE_DB->Query(" SELECT MAX(group_position) FROM " . PREFIX . "_rubric_fields_group WHERE rubric_id = '" . $rubric_id . "' ")->GetCell(); $position++; $AVE_DB->Query(" INSERT " . PREFIX . "_rubric_fields_group SET rubric_id = '" . $rubric_id . "', group_position = '" . $position . "', group_title= '" . $_REQUEST['group_title'] . "' "); header('Location:index.php?do=rubs&action=fieldsgroups&Id=' . $rubric_id . '&cp=' . SESSION); exit; } function rubricEditGroupFields($rubric_id) { global $AVE_DB; foreach($_REQUEST['group_title'] as $k => $v) { $AVE_DB->Query(" UPDATE " . PREFIX . "_rubric_fields_group SET group_title= '" . $v . "' WHERE Id = '" . $k . "' "); } header('Location:index.php?do=rubs&action=fieldsgroups&Id=' . $rubric_id . '&cp=' . SESSION); exit; } function rubricDelGroupFields($Id, $rubric_id) { global $AVE_DB; $AVE_DB->Query(" DELETE FROM " . PREFIX . "_rubric_fields_group WHERE Id = '" . $Id . "' "); $AVE_DB->Query(" UPDATE " . PREFIX . "_rubric_fields SET rubric_field_group = '0' WHERE rubric_field_group = '" . $Id . "' AND rubric_id = '" . $rubric_id . "' "); header('Location:index.php?do=rubs&action=fieldsgroups&Id=' . $rubric_id . '&cp=' . SESSION); exit; } function rubricFieldGroupChange($field_id, $rubric_id) { global $AVE_DB, $AVE_Template; $sql = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_rubric_fields WHERE rubric_id = '" . $rubric_id . "' AND Id = " . $field_id . " ")->FetchAssocArray(); $AVE_Template->assign('rf', $sql); $AVE_Template->assign('groups', $this->get_rubric_fields_group($rubric_id)); $AVE_Template->assign('content', $AVE_Template->fetch('rubs/groups.tpl')); } function rubricFieldGroupChangeSave($field_id, $rubric_id) { global $AVE_DB, $AVE_Template; $AVE_DB->Query(" UPDATE " . PREFIX . "_rubric_fields SET rubric_field_group = '" . trim($_POST['rubric_field_group']) . "' WHERE Id = '" . $field_id . "' AND rubric_id = '" . $rubric_id . "' "); $sql = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_rubric_fields WHERE rubric_id = '" . $rubric_id . "' AND Id = " . $field_id . " ")->FetchAssocArray(); $AVE_Template->assign('rf', $sql); $AVE_Template->assign('groups', $this->get_rubric_fields_group($rubric_id)); $AVE_Template->assign('content', $AVE_Template->fetch('rubs/groups.tpl')); } // Список дополнительных шаблон для данной рубрики function tmplsList() { global $AVE_DB, $AVE_Template; $templates = array(); $num = $AVE_DB->Query(" SELECT COUNT(*) FROM " . PREFIX . "_rubric_templates WHERE rubric_id = '" . $_REQUEST['Id'] . "' ")->GetCell(); $page_limit = $this->_limit; $pages = ceil($num / $page_limit); $set_start = get_current_page() * $page_limit - $page_limit; if ($num > $page_limit) { $page_nav = " {t} "; $page_nav = get_pagination($pages, 'page', $page_nav); $AVE_Template->assign('page_nav', $page_nav); } $sql = $AVE_DB->Query(" SELECT rub.*, rubrics.rubric_title, COUNT(doc.Id) AS doc_count FROM " . PREFIX . "_rubric_templates AS rub LEFT JOIN " . PREFIX . "_rubrics AS rubrics ON rubrics.Id = rub.rubric_id LEFT JOIN " . PREFIX . "_documents AS doc ON (doc.rubric_id = rub.rubric_id AND doc.rubric_tmpl_id = rub.id) WHERE rub.rubric_id = '" . (int)$_REQUEST['Id'] . "' GROUP BY rub.id ORDER BY rub.id LIMIT " . $set_start . "," . $page_limit ); while ($row = $sql->FetchRow()) { $row->author_id = get_username_by_id($row->author_id); array_push($templates, $row); } $rubric = $this->rubricNameByIdGet((int)$_REQUEST['Id']); $AVE_Template->assign('rubric', $rubric); $AVE_Template->assign('templates', $templates); } /** * Вывод шаблона рубрики * * @param int $show * @param int $extern */ function tmplsEdit() { global $AVE_DB, $AVE_Template; $tmpls_id = (isset($_REQUEST['id']) && is_numeric($_REQUEST['id'])) ? $_REQUEST['id'] : 0; $rubric_id = (int)$_REQUEST['rubric_id']; if ($tmpls_id) { $template = $AVE_DB->Query(" SELECT title, template FROM " . PREFIX . "_rubric_templates WHERE id = '" . $tmpls_id . "' ") ->FetchRow(); } if ($_REQUEST['action'] == 'tmpls_from') { $template = $AVE_DB->Query(" SELECT rubric_title as title, rubric_template as template FROM " . PREFIX . "_rubrics WHERE Id = '" . $rubric_id . "' ") ->FetchRow(); } if ($_REQUEST['action'] == 'tmpls_copy') { $template = $AVE_DB->Query(" SELECT title, template FROM " . PREFIX . "_rubric_templates WHERE id = '" . $_REQUEST['tmpls_id'] . "' ") ->FetchRow(); } // Поля $sql = $AVE_DB->Query(" SELECT a.*, b.group_title, b.group_description, b.group_position FROM " . PREFIX . "_rubric_fields AS a LEFT JOIN " . PREFIX . "_rubric_fields_group AS b ON a.rubric_field_group = b.Id WHERE a.rubric_id = '" . $rubric_id . "' ORDER BY b.group_position ASC, a.rubric_field_position ASC "); $fields_list = array(); $drop_down_fields = array(); while ($row = $sql->FetchRow()) { $group_id = ($row->rubric_field_group) ? $row->rubric_field_group : 0; if ($row->rubric_field_type == 'drop_down' || $row->rubric_field_type == 'drop_down_key') array_push($drop_down_fields, $row->Id); $fields_list[$group_id]['group_position'] = ($row->group_position) ? $row->group_position : 100; $fields_list[$group_id]['group_title'] = $row->group_title; $fields_list[$group_id]['group_description'] = $row->group_description; $fields_list[$group_id]['fields'][$row->Id]['Id'] = $row->Id; $fields_list[$group_id]['fields'][$row->Id]['rubric_id'] = $row->rubric_id; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_group'] = $row->rubric_field_group; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_alias'] = $row->rubric_field_alias; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_title'] = $row->rubric_field_title; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_type'] = $row->rubric_field_type; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_numeric'] = $row->rubric_field_numeric; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_default'] = $row->rubric_field_default; $fields_list[$group_id]['fields'][$row->Id]['rubric_field_search'] = $row->rubric_field_search; } $fields_list = msort($fields_list, 'group_position'); $AVE_Template->assign('groups_count', count($fields_list)); $AVE_Template->assign('fields_list', $fields_list); $AVE_Template->assign('field_array', get_field_type()); $rubric = $this->rubricNameByIdGet($rubric_id); $AVE_Template->assign('rubric', $rubric); $AVE_Template->assign('template', $template); $AVE_Template->assign('formaction', 'index.php?do=rubs&action=tmpls_edit&sub=save&id=' . $tmpls_id . '&rubric_id=' . $_REQUEST['rubric_id'] . '&cp=' . SESSION); $AVE_Template->assign('content', $AVE_Template->fetch('rubs/tmpls_form.tpl')); } /** * Редактирование шаблона рубрики * * @param string $data */ function tmplsSave($template = '', $title = '') { global $AVE_DB, $AVE_Template; $tmpls_id = (int)$_REQUEST['id']; $rubric_id = (int)$_REQUEST['rubric_id']; if ($tmpls_id) { $sql = $AVE_DB->Query(" UPDATE " . PREFIX . "_rubric_templates SET title = '" . $title . "', template = '" . $template . "' WHERE id = '" . $tmpls_id . "' "); } else { $sql = $AVE_DB->Query(" INSERT INTO " . PREFIX . "_rubric_templates SET title = '" . $title . "', template = '" . $template . "', rubric_id = '" . $rubric_id . "', author_id = '" . UID . "', created = '" . time() . "' "); $tmpls_id = $AVE_DB->InsertId(); } // Очищаем кэш шаблона документов рубрики $AVE_DB->Query(" DELETE FROM " . PREFIX . "_rubric_template_cache WHERE rub_id = '" . $rubric_id . "' AND rub_tmpl_id = '" . $tmpls_id . "' "); if ($sql === false) { $message = $AVE_Template->get_config_vars('RUBRIC_SAVED_TPL_ERR'); $header = $AVE_Template->get_config_vars('RUBRIK_ERROR'); $theme = 'error'; } else { $message = $AVE_Template->get_config_vars('RUBRIC_SAVED_TPL'); $header = $AVE_Template->get_config_vars('RUBRIC_SUCCESS'); $theme = 'accept'; reportLog($AVE_Template->get_config_vars('RUBRIC_TEMPL_REPORT') . ' ' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ' (Id шаблона:' . $tmpls_id . ')'); } $sql = $AVE_DB->Query(" SELECT Id FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id." AND rubric_tmpl_id = " . $tmpls_id ); while ($row = $sql->FetchRow()) { $AVE_DB->clearcache('doc_'.$row->Id); $AVE_DB->clearcompile('doc_'.$row->Id); } if (isAjax()) { echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme)); exit; } else { $AVE_Template->assign('message', $message); header('Location:index.php?do=rubs&action=tmpls&Id='.$rubric_id.'&cp=' . SESSION); exit; } } function tmplsDelete() { global $AVE_DB, $AVE_Template; $rubric_id = (int)$_REQUEST['rubric_id']; $tmpls_id = (int)$_REQUEST['tmpls_id']; $rubric_not_empty = $AVE_DB->Query(" SELECT 1 FROM " . PREFIX . "_documents WHERE rubric_id = '" . $rubric_id . "' AND rubric_tmpl_id = '" . $tmpls_id . "' LIMIT 1 ")->GetCell(); if (! $rubric_not_empty) { $AVE_DB->Query(" DELETE FROM " . PREFIX . "_rubric_templates WHERE id = '" . $tmpls_id . "' AND rubric_id = '" . $rubric_id . "' "); // Очищаем кэш шаблона документов рубрики $AVE_DB->Query(" DELETE FROM " . PREFIX . "_rubric_template_cache WHERE rub_id = '" . $rubric_id . "' AND rub_tmpl_id = '" . $tmpls_id . "' "); // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('RUBRIC_TMPLS_LOG_DEL') . ' - ' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)) . ' (Id шаблона: '.$rubric_id.')'); } header('Location:index.php?do=rubs&action=tmpls&Id='.$rubric_id.'&cp=' . SESSION); exit; } function _get_fields_type($type = null) { static $fields; if (is_array($fields)) return $fields; $arr = get_defined_functions(); $fields = array(); $field = array(); foreach ($arr['user'] as $v) { if (trim(substr($v, 0, strlen('get_field_'))) == 'get_field_') { $d = ''; $name = @$v('', 'name', '', '', 0, $d); $id = substr($v, strlen('get_field_')); if ($name != false && is_string($name)) $fields[] = array('id' => $id,'name' => (isset($fields_vars[$name]) ? $fields_vars[$name] : $name)); if (! empty($type) && $id == $type) $field = array('id' => $id,'name' => (isset($fields_vars[$name]) ? $fields_vars[$name] : $name)); } } $fields = msort($fields, array('name')); return (! empty($type)) ? $field : $fields; } function ShowFields() { global $AVE_DB, $AVE_Template; $rubric_id = (int)$_REQUEST['Id']; $sql = $AVE_DB->Query(" SELECT rubric_field_type FROM " . PREFIX . "_rubric_fields WHERE rubric_id = '".$rubric_id."' GROUP BY rubric_field_type "); $enable = array(); while ($row = $sql->FetchArray()) $enable[] = $row['rubric_field_type']; $fields = $this->_get_fields_type(); foreach ($fields as $field) { $exists[$field['id']]['adm'] = file_exists(BASE_DIR . '/fields/' . $field['id'] . '/tpl/field.tpl'); $exists[$field['id']]['doc'] = file_exists(BASE_DIR . '/fields/' . $field['id'] . '/tpl/field-doc.tpl'); $exists[$field['id']]['req'] = file_exists(BASE_DIR . '/fields/' . $field['id'] . '/tpl/field-req.tpl'); } $sql = $AVE_DB->Query(" SELECT rubric_title, rubric_linked_rubric, rubric_description FROM " . PREFIX . "_rubrics WHERE id = '" . $rubric_id . "' LIMIT 1 "); $rubric = $sql->FetchRow(); $AVE_Template->assign('rubric', $rubric); $AVE_Template->assign("enable", $enable); $AVE_Template->assign("exists", $exists); $AVE_Template->assign("fields", $fields); $AVE_Template->assign("content", $AVE_Template->fetch('rubs/_fields_list.tpl')); } function ShowFieldsByType($fld) { global $AVE_DB, $AVE_Template; $rubric_id = (int)$_REQUEST['rubric_id']; $sql = $AVE_DB->Query(" SELECT a.Id, a.rubric_id, a.rubric_field_type, a.rubric_field_title, b.rubric_title FROM " . PREFIX . "_rubric_fields AS a LEFT JOIN " . PREFIX . "_rubrics AS b ON a.rubric_id = b.Id WHERE a.rubric_field_type = '" . $fld ."' AND a.rubric_id = '".$rubric_id."' ORDER BY a.rubric_id "); $rubrics = array(); while ($row = $sql->FetchRow()) { $rubrics[$row->rubric_id]['rubric_id'] = $row->rubric_id; $rubrics[$row->rubric_id]['rubric_title'] = $row->rubric_title; $rubrics[$row->rubric_id]['rubric_field_type'] = $row->rubric_field_type; $rubrics[$row->rubric_id]['fields'][$row->Id]['id'] = $row->Id; $rubrics[$row->rubric_id]['fields'][$row->Id]['title'] = $row->rubric_field_title; $rubrics[$row->rubric_id]['fields'][$row->Id]['adm_tpl'] = file_exists(BASE_DIR . '/fields/' . $fld . '/tpl/field-' . $row->Id . '.tpl'); $rubrics[$row->rubric_id]['fields'][$row->Id]['doc_tpl'] = file_exists(BASE_DIR . '/fields/' . $fld . '/tpl/field-doc-' . $row->Id . '.tpl'); $rubrics[$row->rubric_id]['fields'][$row->Id]['req_tpl'] = file_exists(BASE_DIR . '/fields/' . $fld . '/tpl/field-req-' . $row->Id . '.tpl'); $rubrics[$row->rubric_id]['fields'][$row->Id]['adm_main'] = file_exists(BASE_DIR . '/fields/' . $fld . '/tpl/field.tpl'); $rubrics[$row->rubric_id]['fields'][$row->Id]['doc_main'] = file_exists(BASE_DIR . '/fields/' . $fld . '/tpl/field-doc.tpl'); $rubrics[$row->rubric_id]['fields'][$row->Id]['req_main'] = file_exists(BASE_DIR . '/fields/' . $fld . '/tpl/field-req.tpl'); } $sql = $AVE_DB->Query(" SELECT rubric_title, rubric_linked_rubric, rubric_description FROM " . PREFIX . "_rubrics WHERE id = '" . $rubric_id . "' LIMIT 1 "); $rubric = $sql->FetchRow(); $AVE_Template->assign('rubric', $rubric); $AVE_Template->assign('main', $this->_get_fields_type($fld)); $AVE_Template->assign("rubrics", $rubrics); $AVE_Template->assign("content", $AVE_Template->fetch('rubs/_field_list.tpl')); } function EditFieldTpl($id = '', $fld, $type) { global $AVE_DB, $AVE_Template, $_fm_dir; switch ($type) { case 'adm': $file = BASE_DIR . '/fields/' . $fld . '/tpl/field-' . $id . '.tpl'; $source = BASE_DIR . '/fields/' . $fld . '/tpl/field.tpl'; break; case 'doc': $file = BASE_DIR . '/fields/' . $fld . '/tpl/field-doc-' . $id . '.tpl'; $source = BASE_DIR . '/fields/' . $fld . '/tpl/field-doc.tpl'; break; case 'req': $file = BASE_DIR . '/fields/' . $fld . '/tpl/field-req-' . $id . '.tpl'; $source = BASE_DIR . '/fields/' . $fld . '/tpl/field-req.tpl'; break; } if (empty($id)) $file = $source; if (file_exists($file)) $code_text = file_get_contents($file); else $code_text = file_get_contents($source); $sql = $AVE_DB->Query(" SELECT a.rubric_field_title, b.rubric_title FROM " . PREFIX . "_rubric_fields AS a LEFT JOIN " . PREFIX . "_rubrics AS b ON a.rubric_id = b.Id WHERE a.rubric_field_type = '" . $fld ."' AND a.Id = '" . $id ."' ")->FetchAssocArray(); $params = array( 'id' => $id, 'fld' => $fld, 'type' => $type, 'func' => (file_exists($file) ? 'edit' : 'new'), 'field' => $sql, ); $AVE_Template->assign('main', $this->_get_fields_type($fld)); $AVE_Template->assign('params', $params); $AVE_Template->assign('code_text', $code_text); $AVE_Template->assign("content", $AVE_Template->fetch('rubs/_field_code.tpl')); } /** * Сохранение шаблона * */ function SaveFieldTpl($id = '', $fld, $type, $func) { switch ($type) { case 'adm': $file = (! empty($id)) ? BASE_DIR . '/fields/' . $fld . '/tpl/field-' . $id . '.tpl' : BASE_DIR . '/fields/' . $fld . '/tpl/field.tpl'; break; case 'doc': $file = (! empty($id)) ? BASE_DIR . '/fields/' . $fld . '/tpl/field-doc-' . $id . '.tpl' : BASE_DIR . '/fields/' . $fld . '/tpl/field-doc.tpl'; break; case 'req': $file = (! empty($id)) ? BASE_DIR . '/fields/' . $fld . '/tpl/field-req-' . $id . '.tpl' : BASE_DIR . '/fields/' . $fld . '/tpl/field-req.tpl'; break; } $data = stripcslashes($_REQUEST['code_text']); @file_put_contents($file, $data); chmod($file, 0644); $message = 'Шаблон успешнно сохранен'; $header = 'Выполнено'; $theme = 'accept'; echo json_encode( array( 'message' => $message, 'header' => $header, 'theme' => $theme) ); exit; } /** * Удаление шаблона поля * */ function DeleteFieldTpl($id, $fld, $type, $func) { switch ($type) { case 'adm': $file = BASE_DIR . '/fields/' . $fld . '/tpl/field-' . $id . '.tpl'; break; case 'doc': $file = BASE_DIR . '/fields/' . $fld . '/tpl/field-doc-' . $id . '.tpl'; break; case 'req': $file = BASE_DIR . '/fields/' . $fld . '/tpl/field-req-' . $id . '.tpl'; break; } @unlink($file); header('Location:' . get_referer_link()); exit; } } ?>