$AVE_Template->assign('formaction', $formaction); $AVE_Template->assign('code_text', $code_text); break; } $AVE_Template->assign('content', $AVE_Template->fetch('templates/edit_css.tpl')); } break; case 'edit_js': if (check_permission_acp('template_edit')) { $_REQUEST['sub'] = !isset($_REQUEST['sub']) ? '' : $_REQUEST['sub']; switch ($_REQUEST['sub']) { case 'save': $dir = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/js/' . $_REQUEST['name_file']; //$_REQUEST['code_text'] = str_ireplace(array('<script>','</script>'), "", $_REQUEST['code_text']); $check_code = stripcslashes($_REQUEST['code_text']); if (is_php_code($check_code)) { reportLog($_SESSION['user_name'] . ' - пытался использовать PHP в js файле (' . stripslashes($_REQUEST['name_file']) . ')', 2, 2); header('Location:index.php?do=templates'); exit; } file_put_contents($dir, trim($check_code)); reportLog($_SESSION['user_name'] . ' - отредактировал файл (' . stripslashes($dir) . ')', 2, 2); header('Location:index.php?do=templates'); exit; break; default: $dir = BASE_DIR . '/templates/' . DEFAULT_THEME_FOLDER . '/js/' . stripslashes($_REQUEST['name_file']); $code_text = file_get_contents($dir); $formaction = "index.php?do=templates&action=edit_js&sub=save&name_file=" . stripslashes($_REQUEST['name_file']); $AVE_Template->assign('formaction', $formaction); $AVE_Template->assign('code_text', $code_text);
} break; case 'template': if (check_permission_acp('rubric_edit')) { switch ($_REQUEST['sub']) { case '': $AVE_Rubric->rubricTemplateShow(); break; case 'save': $Rtemplate = $_POST['rubric_template']; $Htemplate = $_POST['rubric_header_template']; $Ttemplate = $_POST['rubric_teaser_template']; $Atemplate = $_POST['rubric_admin_teaser_template']; $check_code = strtolower($Rtemplate . $Htemplate . $Ttemplate . $Atemplate); $ok = true; if (is_php_code($check_code) && !check_permission('rubric_php')) { $AVE_Template->assign('php_forbidden', 1); $ok = false; } if (!$ok) { $AVE_Rubric->rubricTemplateShow(1); } else { $AVE_Rubric->rubricTemplateSave($Rtemplate, $Htemplate, $Ttemplate, $Atemplate); } break; } } break; case 'delete': if (check_permission_acp('rubric_del')) { $AVE_Rubric->rubricDelete();
/** * Метод, предназначенный для сохранения документа в БД * * @param int $rubric_id идентификатор Рубрики * @param int $document_id идентификатор Документа * @param array $data Документ в массиве структура - хитрая * @param bool $update_non_exists_fields Изменять поля на пустые значения у не переданных полей или не надо * вохвражает номер документа если все удачно и false если все плохо */ function documentSave($rubric_id, $document_id, $data, $update_non_exists_fields = false) { global $AVE_DB; //Проверяем входящие данные $rubric_id = (int) $rubric_id; $document_id = (int) $document_id; if (!isset($data)) { return false; } if (!isset($data['feld'])) { return false; } //определяем тип опреации $oper = 'INSERT'; // выполняем стартовый код рубрики $code = $AVE_DB->Query("SELECT rubric_code_start, rubric_code_end FROM " . PREFIX . "_rubrics WHERE Id = '" . $rubric_id . "'")->FetchRow(); eval('?>' . $code->rubric_code_start . '<?'); if ($document_id > 0) { $oper = 'UPDATE'; } // Если пользователь имеет права на добавление документов в указанную рубрику, тогда if ($oper == 'INSERT' && !(isset($_SESSION[$rubric_id . '_newnow']) && $_SESSION[$rubric_id . '_newnow'] == 1 || isset($_SESSION[$rubric_id . '_new']) && $_SESSION[$rubric_id . '_new'] == 1 || isset($_SESSION[$rubric_id . '_alles']) && $_SESSION[$rubric_id . '_alles'] == 1 || defined('UGROUP') && UGROUP == 1)) { return false; } if ($oper == 'UPDATE') { // Выполняем запрос к БД на получение автора документа и id Рубрики $row = $AVE_DB->Query("\n\t\t\t\t\tSELECT\n\t\t\t\t\t\trubric_id,\n\t\t\t\t\t\tdocument_author_id\n\t\t\t\t\tFROM " . PREFIX . "_documents\n\t\t\t\t\tWHERE Id = '" . $document_id . "'\n\t\t\t\t")->FetchRow(); $rubric_id = $row->rubric_id; $row->cantEdit = 0; // Определяем права доступа к документам в данной рубрики $this->documentPermissionFetch($row->rubric_id); // разрешаем редактирование // если автор имеет право изменять свои документы в рубрике // или пользователю разрешено изменять все документы в рубрике if (isset($_SESSION['user_id']) && $row->document_author_id == $_SESSION['user_id'] && isset($_SESSION[$row->rubric_id . '_editown']) && $_SESSION[$row->rubric_id . '_editown'] == 1 || isset($_SESSION[$row->rubric_id . '_editall']) && @$_SESSION[$row->rubric_id . '_editall'] == 1) { $row->cantEdit = 1; } // запрещаем редактирование главной страницы и страницы ошибки 404 если требуется одобрение Администратора if (($document_id == 1 || $document_id == PAGE_NOT_FOUND_ID) && @$_SESSION[$row->rubric_id . '_newnow'] != 1) { $row->cantEdit = 0; } // разрешаем редактирование, если пользователь принадлежит группе Администраторов или имеет все права на рубрику if (defined('UGROUP') && UGROUP == 1 || isset($_SESSION[$row->rubric_id . '_alles']) && $_SESSION[$row->rubric_id . '_alles'] == 1) { $row->cantEdit = 1; } //выходим если нельзя редактировать if (!$row->cantEdit == 1) { return false; } // Обрабатываем все данные, пришедшие в запросе $suche = isset($data['document_in_search']) && $data['document_in_search'] == 1 ? '1' : '0'; $document_status = isset($_SESSION[$row->rubric_id . '_newnow']) && $_SESSION[$row->rubric_id . '_newnow'] == 1 || isset($_SESSION[$row->rubric_id . '_alles']) && $_SESSION[$row->rubric_id . '_alles'] == 1 || defined('UGROUP') && UGROUP == 1 ? isset($data['document_status']) ? $data['document_status'] : '0' : '0'; $document_status = $document_id == 1 || $document_id == PAGE_NOT_FOUND_ID ? '1' : $docstatus; // Формируем/проверяем адрес на уникальность if ($document_id != 1) { $data['document_alias'] = $_url = prepare_url(empty($data['document_alias']) ? trim($_POST['prefix'] . '/' . $data['doc_title'], '/') : $data['document_alias']); } else { $data['document_alias'] = "/"; } $cnt = 1; while ($AVE_DB->Query("\n\t\t\t\t\t\tSELECT 1\n\t\t\t\t\t\tFROM " . PREFIX . "_documents\n\t\t\t\t\t\tWHERE Id != '" . $document_id . "'\n\t\t\t\t\t\tAND document_alias = '" . $data['document_alias'] . "'\n\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t\t")->NumRows() == 1) { $data['document_alias'] = $_url . '-' . $cnt; $cnt++; } } else { $suche = isset($data['document_in_search']) && $data['document_in_search'] == 1 ? 1 : 0; $document_status = !empty($data['document_status']) ? (int) $data['document_status'] : '0'; $document_status = $document_id == 1 || $document_id == PAGE_NOT_FOUND_ID ? '1' : $document_status; $data['document_alias'] = $_url = prepare_url(empty($data['document_alias']) ? trim($data['prefix'] . '/' . $data['doc_title'], '/') : $data['document_alias']); $cnt = 1; while ($AVE_DB->Query("\n\t\t\t\t\t\t\tSELECT 1\n\t\t\t\t\t\t\tFROM " . PREFIX . "_documents\n\t\t\t\t\t\t\tWHERE document_alias = '" . $data['document_alias'] . "'\n\t\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t\t")->NumRows()) { $data['document_alias'] = $_url . '-' . $cnt; $cnt++; } } $docstart = $document_id == 1 || $document_id == PAGE_NOT_FOUND_ID ? '0' : $this->_documentStart($data['document_published']); $docend = $document_id == 1 || $document_id == PAGE_NOT_FOUND_ID ? '0' : $this->_documentEnd($data['document_expire']); //Получаем структуру документа $fields = array(); if ($oper == 'INSERT') { $sql = $AVE_DB->Query("\n\t\t\t\t\t\t\t\tSELECT *\n\t\t\t\t\t\t\t\tFROM " . PREFIX . "_rubric_fields\n\t\t\t\t\t\t\t\tWHERE rubric_id = '" . $rubric_id . "'\n\t\t\t\t\t\t\t\tORDER BY rubric_field_position ASC\n\t\t\t\t\t\t\t"); } else { $sql = $AVE_DB->Query("\n\t\t\t\t\t\t\t\tSELECT\n\t\t\t\t\t\t\t\t\tdoc.Id AS df_id,\n\t\t\t\t\t\t\t\t\trub.*,\n\t\t\t\t\t\t\t\t\trubric_field_default,\n\t\t\t\t\t\t\t\t\tdoc.field_value\n\t\t\t\t\t\t\t\tFROM " . PREFIX . "_rubric_fields AS rub\n\t\t\t\t\t\t\t\tLEFT JOIN " . PREFIX . "_document_fields AS doc ON rubric_field_id = rub.Id\n\t\t\t\t\t\t\t\tWHERE document_id = '" . $document_id . "'\n\t\t\t\t\t\t\t\tORDER BY rubric_field_position ASC\n\t\t\t\t\t\t\t"); } while ($row = $sql->FetchRow()) { $row->Feld = $this->_documentFieldGet($row->rubric_field_type, $oper == 'INSERT' ? $row->rubric_field_default : $row->field_value, $row->Id, $row->rubric_field_default); array_push($fields, $row); } $where = $oper == 'UPDATE' ? 'WHERE Id=' . $document_id : ''; $author = $oper != 'UPDATE' ? 'document_author_id = ' . $_SESSION['user_id'] . ',' : ''; $zag = $oper == 'UPDATE' ? "UPDATE " . PREFIX . "_documents" : "INSERT INTO " . PREFIX . "_documents"; $sql = "\n\t\t\t\t\t\t\t{$zag}\n\t\t\t\t\t\t\tSET\n\t\t\t\t\t\t\t\trubric_id = '" . $rubric_id . "',\n\t\t\t\t\t\t\t\tdocument_parent = '" . (int) $data['document_parent'] . "',\n\t\t\t\t\t\t\t\tdocument_title = '" . addslashes(clean_no_print_char($data['doc_title'])) . "',\n\t\t\t\t\t\t\t\tdocument_breadcrum_title = '" . addslashes(clean_no_print_char($data['doc_breadcrum_title'])) . "',\n\t\t\t\t\t\t\t\tdocument_alias = '" . $data['document_alias'] . "',\n\t\t\t\t\t\t\t\tdocument_published = '" . $docstart . "',\n\t\t\t\t\t\t\t\tdocument_expire = '" . $docend . "',\n\t\t\t\t\t\t\t\tdocument_changed = '" . time() . "',\n\t\t\t\t\t\t\t\t{$author}\n\t\t\t\t\t\t\t\tdocument_in_search = '" . $suche . "',\n\t\t\t\t\t\t\t\tdocument_meta_keywords = '" . addslashes(clean_no_print_char($data['document_meta_keywords'])) . "',\n\t\t\t\t\t\t\t\tdocument_meta_description = '" . addslashes(clean_no_print_char($data['document_meta_description'])) . "',\n\t\t\t\t\t\t\t\tdocument_meta_robots = '" . $data['document_meta_robots'] . "',\n\t\t\t\t\t\t\t\tdocument_status = '" . $data['document_status'] . "',\n\t\t\t\t\t\t\t\tdocument_linked_navi_id = '" . (int) $data['document_linked_navi_id'] . "',\n\t\t\t\t\t\t\t\tdocument_tags \t\t = '" . addslashes(clean_no_print_char($data['document_tags'])) . "',\n\t\t\t\t\t\t\t\tdocument_lang\t\t\t = '" . (empty($data['document_lang']) ? $_SESSION['user_language'] : $data['document_lang']) . "'\n\t\t\t\t\t\t\t{$where}"; $AVE_DB->Query($sql); if ($oper == 'UPDATE') { $this->SaveRevission($document_id); } // Получаем id добавленной записи $iid = $AVE_DB->InsertId(); $document_id = $oper == "INSERT" ? $iid : $document_id; // Сохраняем системное сообщение в журнал reportLog($_SESSION['user_name'] . ' - ' . ($oper == 'INSERT' ? 'добавил' : 'отредактировал') . ' документ (' . $document_id . ')', 2, 2); // Циклически обрабатываем поля документа foreach ($fields as $k => $v) { $fld_id = $v->Id; //если в данных нет поля и мы редактируем документ - изменять ли это поле на пустое значение if ($oper == 'UPDATE' && !isset($data['feld'][$fld_id]) && !$update_non_exists_fields) { continue; } $fld_val = isset($data['feld'][$fld_id]) ? $data['feld'][$fld_id] : $v->rubric_field_default; if (!$AVE_DB->Query("\n\t\t\t\t\t\t\t\tSELECT 1\n\t\t\t\t\t\t\t\tFROM " . PREFIX . "_rubric_fields\n\t\t\t\t\t\t\t\tWHERE Id = '" . $fld_id . "'\n\t\t\t\t\t\t\t\tAND rubric_id = '" . $rubric_id . "'\n\t\t\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t\t\t")->NumRows()) { continue; } if (is_array($fld_val)) { foreach ($fld_val as $k => $v) { if (!check_permission('document_php')) { if (is_php_code($v)) { $v = ''; } } $v = clean_no_print_char($v); $v = pretty_chars($v); $fld_val[$k] = $v; } } else { // Если запрещено использование php кода, тогда обнуляем данные поля if (!check_permission('document_php')) { if (is_php_code($fld_val)) { $fld_val = ''; } } // Убираем из текста непчатбемые символы $fld_val = clean_no_print_char($fld_val); $fld_val = pretty_chars($fld_val); } // Выполняем запрос к БД на добавление нового поля с его содержимым $where = $oper == 'UPDATE' ? 'WHERE document_id=' . $document_id . ' AND rubric_field_id=' . $fld_id : ''; $zag = $oper == 'UPDATE' ? "UPDATE " . PREFIX . "_document_fields" : "INSERT INTO " . PREFIX . "_document_fields"; $sql = "\n\t\t\t\t\t\t\t{$zag}\n\t\t\t\t\t\t\tSET\n\t\t\t\t\t\t\t\trubric_field_id = '" . $fld_id . "',\n\t\t\t\t\t\t\t\tdocument_id = '" . $document_id . "',\n\t\t\t\t\t\t\t\tfield_value = '" . (is_array($fld_val) ? serialize($fld_val) : $fld_val) . "',\n\t\t\t\t\t\t\t\tfield_number_value = '" . (int) (is_array($fld_val) ? serialize($fld_val) : $fld_val) . "',\n\t\t\t\t\t\t\t\tdocument_in_search = '" . $suche . "'\n\t\t\t\t\t\t\t{$where}\t\n\t\t\t\t\t\t"; $AVE_DB->Query($sql); } // Очищаем кэш шаблона $AVE_DB->Query("\n\t\t\t\t\t\tDELETE\n\t\t\t\t\t\tFROM " . PREFIX . "_rubric_template_cache\n\t\t\t\t\t\tWHERE doc_id = '" . $document_id . "'\n\t\t\t\t\t"); // выполняем финишный код рубрики eval('?>' . $code->rubric_code_end . '<?'); //чистим кеш $AVE_DB->clearcache('rub_' . $rubric_id); $AVE_DB->clearcache('doc_' . $document_id); $this->generateKeywords($document_id); $this->generateTags($document_id); return $document_id; }