<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* MaxSite CMS
* (c) https://max-3000.com/
* Функции для редактирования, удаления, добавления
*
*/
##### ------------------------------------------------------------------------------
##### Рубрики
##### ------------------------------------------------------------------------------
# редактирование рубрики
function mso_edit_category($data)
{
// global $MSO;
$CI = &get_instance();
if (isset($data['user_login'])) $user_login = $data['user_login'];
else $user_login = getinfo('session_users_login');
if (isset($data['password'])) $password = $data['password'];
else $password = getinfo('session_users_password');
# проверка доступа этому пользователю с этим паролем и этим разрешением
if (!mso_check_user_password($user_login, $password, 'admin_cat'))
return array('result' => 0, 'description' => 'Login/password incorrect');
$data = mso_xss_clean_data($data, array('category_name', 'category_slug'), true, true);
$data = mso_xss_clean_data($data, array('category_desc'));
$category_id = isset($data['category_id']) ? (int) $data['category_id'] : 0;
$category_id_parent = isset($data['category_id_parent']) ? (int) $data['category_id_parent'] : 0;
$category_menu_order = isset($data['category_menu_order']) ? (int) $data['category_menu_order'] : 0;
$category_name = isset($data['category_name']) ? trim($data['category_name']) : '';
$category_desc = isset($data['category_desc']) ? trim($data['category_desc']) : '';
$ok = true;
if ($category_id <= 0) $ok = false;
if ($ok and ($category_id_parent < 0)) $ok = false;
if ($ok and ($category_menu_order < 0)) $ok = false;
if ($ok and ($category_name == '')) $ok = false;
if ($ok) // все ок - выполняем sql запрос
{
$category_slug = (isset($data['category_slug']) and $data['category_slug']) ? mso_slug($data['category_slug']) : mso_slug($category_name);
# проверим, чтобы category_id_parent был существующим, а также не был равен category_id
# то есть не ссылался сам на себя
if ($category_id_parent > 0) {
$all_cats = mso_cat_array_single();
if (!isset($all_cats[$category_id_parent])) // нет такой рубрики
$category_id_parent = 0; // сбрасываем парент
if ($category_id_parent == $category_id) $category_id_parent = 0; // сбрасываем парент
}
$CI->db->where('category_id', $category_id);
$upd_data = array(
'category_id' => $category_id,
'category_id_parent' => $category_id_parent,
'category_menu_order' => $category_menu_order,
'category_name' => $category_name,
'category_desc' => $category_desc,
'category_slug' => $category_slug
);
$res = ($CI->db->update('category', $upd_data)) ? '1' : '0';
$response = array(
'result' => $res,
'description' => '',
'upd_data' => $upd_data
);
mso_flush_cache(); // сбросим кэш
} else {
$response = array('result' => '0', 'description' => 'Error data');
}
if ($response['result']) mso_hook('edit_category');
return $response;
}
# добавление новой рубрики
function mso_new_category($data)
{
// global $MSO;
$CI = &get_instance();
if (isset($data['user_login'])) $user_login = $data['user_login'];
else $user_login = getinfo('session_users_login');
if (isset($data['password'])) $password = $data['password'];
else $password = getinfo('session_users_password');
# проверка доступа этому пользователю с этим паролем и этим разрешением
if (!mso_check_user_password($user_login, $password, 'admin_cat'))
return array('result' => 0, 'description' => 'Login/password incorrect');
$data = mso_xss_clean_data($data, array('category_name', 'category_slug'), true, true);
$data = mso_xss_clean_data($data, array('category_desc'));
$category_id_parent = isset($data['category_id_parent']) ? (int) $data['category_id_parent'] : 0;
$category_menu_order = isset($data['category_menu_order']) ? (int) $data['category_menu_order'] : 0;
$category_name = isset($data['category_name']) ? trim($data['category_name']) : '';
$category_desc = isset($data['category_desc']) ? trim($data['category_desc']) : '';
$category_slug = isset($data['category_slug']) ? mso_slug($data['category_slug']) : '';
$ok = true;
if ($ok and ($category_name == '')) $ok = false;
if ($ok and ($category_slug == '')) $category_slug = mso_slug($category_name);
if ($ok and ($category_id_parent < 0)) $category_id_parent = 0;
if ($ok and ($category_menu_order < 0)) $category_menu_order = 0;
if ($ok) // все ок - выполняем sql запрос
{
// проверим существование уже такой же рубрики с таким же именем
$CI->db->select('category_id');
// $CI->db->where(array('category_name'=>$category_name, 'category_id_parent'=>$category_id_parent));
$CI->db->where(array('category_slug' => $category_slug));
$query = $CI->db->get('category');
if ($query->num_rows() == 0) // нет такого
{
# проверим, чтобы category_id_parent был существующим
if ($category_id_parent > 0) {
$all_cats = mso_cat_array_single();
if (!isset($all_cats[$category_id_parent])) // нет такой рубрики
$category_id_parent = 0; // сбрасываем парент
}
$ins_data = array(
'category_id_parent' => $category_id_parent,
'category_menu_order' => $category_menu_order,
'category_name' => $category_name,
'category_desc' => $category_desc,
'category_slug' => $category_slug
);
$res = ($CI->db->insert('category', $ins_data)) ? '1' : '0';
if ($res) {
$ins_data['category_id'] = $CI->db->insert_id();
$response = array(
'result' => $res,
'description' => 'Inserting new category',
'upd_data' => $ins_data
);
mso_flush_cache(); // сбросим кэш
} else
$response = array(
'result' => 0,
'description' => 'Error inserting new category'
);
} else { // есть такая рубрика - не добавляем
$response = array('result' => '0', 'description' => 'Category slug existing');
}
} else {
$response = array('result' => '0', 'description' => 'Error data');
}
if ($response['result']) mso_hook('new_category');
return $response;
}
# удаление рубрики
function mso_delete_category($data)
{
// global $MSO;
$CI = &get_instance();
if (isset($data['user_login'])) $user_login = $data['user_login'];
else $user_login = getinfo('session_users_login');
if (isset($data['password'])) $password = $data['password'];
else $password = getinfo('session_users_password');
# проверка доступа этому пользователю с этим паролем и этим разрешением
if (!mso_check_user_password($user_login, $password, 'admin_cat'))
return array('result' => 0, 'description' => 'Login/password incorrect');
$category_id = isset($data['category_id']) ? (int) $data['category_id'] : 0;
if ($category_id > 0) // все ок - выполняем sql запрос
{
// нужно удалить у всех страниц этой рубрики эту рубрику
$CI->db->where('category_id', $category_id);
$CI->db->delete('cat2obj');
# а также у всех у кого она стоит родительская
$CI->db->where('category_id_parent', $category_id);
$CI->db->update('category', array('category_id_parent' => '0'));
$CI->db->where('category_id', $category_id);
$res = ($CI->db->delete('category')) ? '1' : '0';
$response = array(
'result' => $res,
'description' => ''
);
mso_flush_cache(); // сбросим кэш
} else {
$response = array('result' => '0', 'description' => 'Error data');
}
if ($response['result']) mso_hook('delete_category');
return $response;
}
##### ------------------------------------------------------------------------------
##### Юзеры
##### ------------------------------------------------------------------------------
# редактирование юзера
function mso_edit_user($data)
{
// global $MSO;
$CI = &get_instance();
if (isset($data['user_login'])) $user_login = $data['user_login'];
else $user_login = getinfo('session_users_login');
if (isset($data['password'])) $password = $data['password'];
else $password = getinfo('session_users_password');
# проверка можно ли редактировать этому пользователю с этим паролем и этим разрешением
if (!mso_check_user_password($user_login, $password, 'edit_self_users'))
return array('result' => 0, 'description' => 'Login/password incorrect');
$users_id = isset($data['users_id']) ? (int) $data['users_id'] : 0;
if ($users_id <= 0) return array('result' => 0, 'description' => 'Login/password incorrect');
# получаем данные пользователя, который отправил запрос
$user_data = mso_get_user_data($user_login, $password);
if ($users_id != $user_data['users_id']) // если id не совпадают, то проверяем разрешения
{
# если можно редактировать чужих пользователей
if (!mso_check_user_password($user_login, $password, 'edit_other_users'))
return array('result' => 0, 'description' => 'Login/password incorrect');
}
$data = mso_xss_clean_data($data, array('users_nik'), true, true);
$users_nik = isset($data['users_nik']) ? $data['users_nik'] : false;
# ошибочный ник
if (!$users_nik)
return array('result' => 0, 'description' => 'Login/password incorrect');
$data = mso_xss_clean_data($data, array('users_first_name', 'users_admin_note', 'users_last_name', 'users_email', 'users_icq', 'users_url', 'users_msn', 'users_jaber', 'users_skype', 'users_avatar_url', 'users_description', 'users_show_smiles', 'users_notify', 'users_language', 'users_new_password'));
$users_first_name = isset($data['users_first_name']) ? $data['users_first_name'] : '';
$users_admin_note = isset($data['users_admin_note']) ? $data['users_admin_note'] : '';
$users_last_name = isset($data['users_last_name']) ? $data['users_last_name'] : '';
$users_email = isset($data['users_email']) ? $data['users_email'] : '';
$users_icq = isset($data['users_icq']) ? $data['users_icq'] : '';
$users_url = isset($data['users_url']) ? $data['users_url'] : '';
$users_msn = isset($data['users_msn']) ? $data['users_msn'] : '';
$users_jaber = isset($data['users_jaber']) ? $data['users_jaber'] : '';
$users_skype = isset($data['users_skype']) ? $data['users_skype'] : '';
$users_avatar_url = isset($data['users_avatar_url']) ? $data['users_avatar_url'] : '';
$users_description = isset($data['users_description']) ? $data['users_description'] : '';
$users_date_birth_y = isset($data['users_date_birth_y']) ? (int) $data['users_date_birth_y'] : '1970';
$users_date_birth_m = isset($data['users_date_birth_m']) ? (int) $data['users_date_birth_m'] : '1';
$users_date_birth_d = isset($data['users_date_birth_d']) ? (int) $data['users_date_birth_d'] : '1';
$users_time_zone = isset($data['users_time_zone']) ? (int) $data['users_time_zone'] : '7200';
$users_show_smiles = isset($data['users_show_smiles']) ? $data['users_show_smiles'] : '0';
$users_notify = isset($data['users_notify']) ? $data['users_notify'] : '0';
$users_language = isset($data['users_language']) ? $data['users_language'] : 'ru';
if (isset($data['users_new_password'])) {
$users_new_password = mso_strip($data['users_new_password'], true);
if ($users_new_password and (strlen($users_new_password) < 6))
$users_new_password = false;
else $users_new_password = mso_md5($users_new_password);
} else
$users_new_password = false;
# конвер даты в MySQL
$users_date_birth = mso_date_convert_to_mysql($users_date_birth_y, $users_date_birth_m, $users_date_birth_d);
$upd_data = array(
'users_nik' => $users_nik,
'users_first_name' => $users_first_name,
'users_last_name' => $users_last_name,
'users_admin_note' => $users_admin_note,
'users_email' => $users_email,
'users_icq' => $users_icq,
'users_url' => $users_url,
'users_msn' => $users_msn,
'users_jaber' => $users_jaber,
'users_skype' => $users_skype,
'users_avatar_url' => $users_avatar_url,
'users_description' => $users_description,
'users_date_birth' => $users_date_birth,
'users_time_zone' => $users_time_zone,
'users_show_smiles' => $users_show_smiles,
'users_notify' => $users_notify,
'users_language' => $users_language
);
# можно ли менять группу?
if ($users_id > 1) // если юзер = 1 (админ) - то нельзя
{
# проверяем разрешение у того, кто отправляет запрос
if (mso_check_allow('edit_users_group', $user_data['users_id'], false)) // да можно
{
$users_groups_id = isset($data['users_groups_id']) ? $data['users_groups_id'] : 0;
$users_groups_id = (int) $users_groups_id;
if ($users_groups_id > 0)
$upd_data['users_groups_id'] = $users_groups_id; // добавляем еще и это
}
}
### пароль!!!
if ($users_new_password) // есть новый пароль
{
// если id не совпадают, то проверяем разрешения на смену пароля другому юзеру
if ($users_id != $user_data['users_id']) {
if (mso_check_allow('edit_users_password', $user_data['users_id'])) // да можно
$upd_data['users_password'] = $users_new_password;
} else // меняет сам себе
{
$upd_data['users_password'] = $users_new_password;
}
}
$CI->db->where('users_id', $users_id);
$res = ($CI->db->update('users', $upd_data)) ? '1' : '0';
$response = array(
'result' => $res,
'description' => 'Update'
);
mso_flush_cache(); // сбросим кэш
return $response;
}
# новый юзер
function mso_new_user($data, $check_user_password = true)
{
// global $MSO;
$CI = &get_instance();
if (isset($data['user_login'])) $user_login = $data['user_login'];
else $user_login = getinfo('session_users_login');
if (isset($data['password'])) $password = $data['password'];
else $password = getinfo('session_users_password');
# нужно ли проверять разрешение?
if ($check_user_password) {
# проверка доступа этому пользователю с этим паролем и этим разрешением
if (!mso_check_user_password($user_login, $password, 'edit_add_new_users'))
return array('result' => 0, 'description' => 'Login/password incorrect');
}
$data = mso_xss_clean_data($data, array('users_login', 'users_email', 'users_password', 'users_groups_id'));
$users_login = isset($data['users_login']) ? $data['users_login'] : false;
$users_email = isset($data['users_email']) ? $data['users_email'] : false;
$users_password = isset($data['users_password']) ? $data['users_password'] : false;
$users_groups_id = isset($data['users_groups_id']) ? $data['users_groups_id'] : false;
$ok = true;
$description = 'Error input data';
# множественная проверка входных данных
if (!$users_login or !$users_email or !$users_password or !$users_groups_id) $ok = false;
if ($ok) {
$users_login = mso_strip($users_login, true);
$users_email = mso_strip($users_email, true);
$users_password = mso_strip($users_password, true);
$users_groups_id = (int) mso_strip($users_groups_id, true);
if (!$users_login or !$users_email or !$users_password or !$users_groups_id) $ok = false;
if ($ok) {
if (!mso_valid_email($users_email)) {
$ok = false;
$description = 'Error email';
}
if ($ok and strlen($users_password) < 6) {
$ok = false;
$description = 'Error password (less than 6 characters)';
}
}
}
if ($ok) {
# может такой логин уже занят?
$CI->db->select('users_id');
$CI->db->where('users_login', $users_login);
$CI->db->or_where('users_email', $users_email);
$query = $CI->db->get('users');
if ($query->num_rows()) // что-то есть
{
$response = array(
'result' => 0,
'description' => 'Login or email already exists'
);
} else {
$users_password = mso_md5($users_password);
$ins_data = array(
'users_login' => $users_login,
'users_nik' => $users_login,
'users_email' => $users_email,
'users_groups_id' => $users_groups_id,
'users_password' => $users_password,
'users_date_registr' => date('Y-m-d H:i:s'),
'users_last_visit' => date('Y-m-d H:i:s'),
);
$res = ($CI->db->insert('users', $ins_data)) ? '1' : '0';
$response = array(
'result' => $res,
'description' => 'Inserting new user'
);
mso_flush_cache(); // сбросим кэш
}
} else // ошибочные данные
{
$response = array(
'result' => 0,
'description' => $description
);
}
return $response;
}
# удалить юзера
function mso_delete_user($data, $check_user_password = true)
{
// global $MSO;
$CI = &get_instance();
if (isset($data['user_login'])) $user_login = $data['user_login'];
else $user_login = getinfo('session_users_login');
if (isset($data['password'])) $password = $data['password'];
else $password = getinfo('session_users_password');
# нужно ли проверять разрешение?
if ($check_user_password) {
# проверка доступа этому пользователю с этим паролем и этим разрешением
if (!mso_check_user_password($user_login, $password, 'edit_delete_users'))
return array('result' => 0, 'description' => 'Login/password incorrect');
}
$users_id = isset($data['users_id']) ? (int) $data['users_id'] : false;
$delete_user_comments = isset($data['delete_user_comments']) ? $data['delete_user_comments'] : false;
$delete_user_pages = isset($data['delete_user_pages']) ? $data['delete_user_pages'] : false;
if ($users_id) {
if ($delete_user_comments) {
# удалить все комментарии юзера
$CI->db->where(array('comments_users_id' => $users_id));
$CI->db->delete('comments');
} else {
# отметить все комментарии юзера как анонима без имени
$CI->db->where(array('comments_users_id' => $users_id));
$CI->db->update('comments', array('comments_users_id' => '0', 'comments_author_name' => t('Аноним')));
}
if ($delete_user_pages) {
# удалить все записи юзера
$CI->db->where(array('page_id_autor' => $users_id));
$CI->db->delete('page');
} else {
# отметить у записей юзера автор = 1 - админ
$CI->db->where(array('page_id_autor' => $users_id));
$CI->db->update('page', array('page_id_autor' => '1'));
}
# теперь можно удалить самого юзера
$res = $CI->db->delete('users', array('users_id' => $users_id));
$response = array(
'result' => $res,
'description' => 'Deleting user'
);
mso_flush_cache(); // сбросим кэш
} else // ошибочные данные
{
$response = array(
'result' => 0,
'description' => 'Error input data'
);
}
return $response;
}
##### ------------------------------------------------------------------------------
##### Страницы
##### ------------------------------------------------------------------------------
# новая страница
function mso_new_page($data)
{
global $MSO;
$CI = &get_instance();
$data = mso_xss_clean_data($data, array('user_login', 'password', 'page_id_autor', 'page_title', 'page_slug', 'page_password', 'page_date_publish', 'page_type_id', 'page_id_parent', 'page_status'));
if (isset($data['user_login'])) $user_login = $data['user_login'];
else $user_login = getinfo('session_users_login');
if (isset($data['password'])) $password = $data['password'];
else $password = getinfo('session_users_password');
if (!isset($data['page_id_autor'])) $data['page_id_autor'] = $MSO->data['session']['users_id'];
# проверка доступа этому пользователю с этим паролем и этим разрешением
if (!mso_check_user_password($user_login, $password, 'admin_page_new'))
return array('result' => 0, 'description' => 'Login/password incorrect');
# получаем данные пользователя, который отправил запрос
$user_data = mso_get_user_data($user_login, $password);
$page_title = $data['page_title'];
$page_content = $data['page_content'];
// короткая ссылка
$page_slug = isset($data['page_slug']) ? mso_slug($data['page_slug']) : false;
if (!$page_slug) {
if ($page_title) $page_slug = mso_slug($page_title);
else $page_slug = 'no-title';
if (!$page_slug) $page_slug = 'no-title';
}
// нужно проверить есть ли уже такая запись
// проверяем по заголовку + тексту
$CI->db->select('page_slug, page_title, page_content');
$CI->db->where(array('page_title' => $page_title, 'page_content' => $page_content));
// $CI->db->where(array('page_slug'=>$page_slug, 'page_title'=>$page_title ));
$query = $CI->db->get('page');
if ($query->num_rows()) // что-то есть
{
$response = array(
'result' => 0,
'description' => 'Existing page'
);
// pr($response);
return $response;
}
// $page_slug нужно проверить на существование
// если есть, то нужно добавить скажем их кол-во+1
$CI->db->select('page_slug');
$query = $CI->db->get('page'); // получили все slug
if ($query->num_rows() > 0) {
$all = []; // сделаем массив всех слаг
foreach ($query->result_array() as $row)
$all[] = $row['page_slug'];
$count = 0; // начальное приращения слага
$in = in_array($page_slug, $all); // признак вхождения -
while ($in) {
$count++;
$in = in_array($page_slug . '-' . $count, $all);
}
if ($count) $page_slug = $page_slug . '-' . $count;
}
$page_password = isset($data['page_password']) ? mso_strip($data['page_password']) : '';
// дата публикации если нет даты, от ставим текущую
$page_date_publish = isset($data['page_date_publish']) ? $data['page_date_publish'] : date('Y-m-d H:i:s');
$page_type_id = isset($data['page_type_id']) ? $data['page_type_id'] : '1';
$page_id_parent = isset($data['page_id_parent']) ? $data['page_id_parent'] : '0';
$page_status = isset($data['page_status']) ? $data['page_status'] : 'publish';
if (($page_status != 'publish') and ($page_status != 'draft') and ($page_status != 'private'))
$page_status = 'publish';
// если стоит разрешение admin_page_publish, то статус не меняем
// иначе ставим только draft
if (!mso_check_allow('admin_page_publish', $user_data['users_id'])) $page_status = 'draft';
$page_comment_allow = isset($data['page_comment_allow']) ? (int) $data['page_comment_allow'] : '1';
$page_ping_allow = isset($data['page_ping_allow']) ? (int) $data['page_ping_allow'] : '1';
$page_feed_allow = isset($data['page_feed_allow']) ? (int) $data['page_feed_allow'] : '1';
$page_menu_order = isset($data['page_menu_order']) ? (int) $data['page_menu_order'] : 0;
$page_id_autor = isset($data['page_id_autor']) ? (int) $data['page_id_autor'] : 0;
// нужно проверить вообще есть ли такой юзер $page_id_autor
$CI->db->select('users_id');
$CI->db->from('users');
$CI->db->where(array('users_id' => $page_id_autor));
$query = $CI->db->get();
if (!$query->num_rows()) // нет
$page_id_autor = 0;
if ($page_id_autor != $user_data['users_id']) // смена авторства - проверим разрешения
{
if (!mso_check_allow('edit_page_author', $user_data['users_id'], false)) // нельзя
{
$page_id_autor = $user_data['users_id'];
}
}
$ins_data = array(
'page_type_id' => $page_type_id,
'page_id_parent' => $page_id_parent,
'page_id_autor' => $page_id_autor,
'page_title' => $page_title,
'page_content' => $page_content,
'page_status' => $page_status,
'page_slug' => $page_slug,
'page_password' => $page_password,
'page_comment_allow' => $page_comment_allow,
'page_ping_allow' => $page_ping_allow,
'page_feed_allow' => $page_feed_allow,
'page_date_publish' => $page_date_publish,
'page_last_modified' => $page_date_publish,
'page_menu_order' => $page_menu_order,
// 'page_date_dead' => $,
// 'page_lang' => $,
);
//pr($ins_data);
//pr($CI->db->_compile_select());
$res = ($CI->db->insert('page', $ins_data)) ? '1' : '0';
if ($res) {
$id = $CI->db->insert_id(); // номер добавленной записи
// добавим теперь рубрики
// рубрики указаны в виде номеров через запятую
$page_id_cat = isset($data['page_id_cat']) ? $data['page_id_cat'] : '';
$page_id_cat = mso_explode($page_id_cat); // в массив
foreach ($page_id_cat as $key => $val) {
$ins_data = array(
'page_id' => $id,
'category_id' => $val
);
$CI->db->insert('cat2obj', $ins_data);
}
// $page_tags = метка
// метки - это мета данные
// вначале получим существующие метки
$CI->db->select('meta_id');
// дефолтные данные
$def_data = array(
'meta_key' => 'tags',
'meta_id_obj' => $id,
'meta_table' => 'page'
);
$CI->db->where($def_data);
$query = $CI->db->get('meta');
if (!$query->num_rows()) // нет меток для этой страницы
{ // значит инсерт
$page_tags = isset($data['page_tags']) ? $data['page_tags'] : '';
$tags = mso_explode($page_tags, false, false); // в массив - не только числа
foreach ($tags as $key => $val) {
$ins_data = $def_data;
$ins_data['meta_value'] = $val;
$CI->db->insert('meta', $ins_data);
}
}
// опции - мета
$page_meta_options = isset($data['page_meta_options']) ? $data['page_meta_options'] : '';
//title##VALUE##титул##METAFIELD##description##VALUE##описание##METAFIELD##keywords##VALUE##ключи##METAFIELD##
$page_meta_options = explode('##METAFIELD##', $page_meta_options);
// добавляем через insert
foreach ($page_meta_options as $key => $val) {
if (trim($val)) {
$meta_temp = explode('##VALUE##', $val);
$meta_key = trim($meta_temp[0]);
$meta_value = trim($meta_temp[1]);
mso_add_meta($meta_key, $id, 'page', $meta_value);
//$CI->db->insert('meta', array('meta_key'=>$meta_key, 'meta_value'=>$meta_value,
// 'meta_table' => 'page', 'meta_id_obj' => $id) );
}
}
// результат возвращается в виде массива
$res = array($id, $page_slug, $page_status, $page_password, $page_date_publish);
$response = array(
'result' => $res,
'description' => 'Inserting new page'
);
mso_flush_cache(); // сбросим кэш
} else {
$response = array(
'result' => 0,
'description' => 'Error inserting page'
);
}
if ($response['result']) {
mso_hook('new_page', $response['result']);
mso_hook('new_page_' . $page_status);
}
return $response;
}
# редактирование существующих страниц
function mso_edit_page($data)
{
global $MSO;
$CI = &get_instance();
$data = mso_xss_clean_data($data, array('user_login', 'password', 'page_id_autor', 'page_title', 'page_slug', 'page_password', 'page_date_publish', 'page_type_id', 'page_id_parent', 'page_status'));
if (isset($data['user_login'])) $user_login = $data['user_login'];
else $user_login = getinfo('session_users_login');
if (isset($data['password'])) $password = $data['password'];
else $password = getinfo('session_users_password');
if (!isset($data['page_id_autor'])) $data['page_id_autor'] = $MSO->data['session']['users_id'];
# проверка доступа этому пользователю с этим паролем и этим разрешением
if (!mso_check_user_password($user_login, $password, 'admin_page_edit'))
return array('result' => 0, 'description' => 'Login/password incorrect');
# получаем данные пользователя, который отправил запрос
$user_data = mso_get_user_data($user_login, $password);
$page_id = (int) $data['page_id'];
// проверим, чтобы это было число
$page_id1 = (int) $page_id;
if ((string) $page_id != (string) $page_id1) $page_id = false; // ошибочный id
if (!$page_id)
return array('result' => 0, 'description' => 'Page ID incorrect');
// есть ли вообще такая страница?
$CI->db->select('page_id');
$CI->db->where(array('page_id' => $page_id));
$query = $CI->db->get('page');
if ($query->num_rows() == 0) // нет такого
return array('result' => 0, 'description' => 'Page ID incorrect');
$page_title = $data['page_title'];
$page_content = $data['page_content'];
// короткая ссылка
$page_slug = isset($data['page_slug']) ? mso_slug($data['page_slug']) : false;
if (!$page_slug) {
if ($page_title) $page_slug = mso_slug($page_title);
else $page_slug = 'no-title';
if (!$page_slug) $page_slug = 'no-title';
}
// $page_slug нужно проверить на существование
// если есть, то нужно добавить скажем их кол-во+1
// при этом исключаем саму редактируемую страницу
$CI->db->select('page_slug');
$CI->db->where('page_id != ', $page_id);
$query = $CI->db->get('page'); // получили все slug
if ($query->num_rows() > 0) {
$all = []; // сделаем массив всех слаг
foreach ($query->result_array() as $row)
$all[] = $row['page_slug'];
$count = 0; // начальное приращения слага
$in = in_array($page_slug, $all); // признак вхождения -
while ($in) {
$count++;
$in = in_array($page_slug . '-' . $count, $all);
}
if ($count) $page_slug = $page_slug . '-' . $count;
}
$page_password = isset($data['page_password']) ? mso_strip($data['page_password']) : '';
// дата публикации
$page_date_publish = isset($data['page_date_publish']) ? $data['page_date_publish'] : false;
# дата последней модификации страницы
$page_last_modified = date('Y-m-d H:i:s');
$page_type_id = isset($data['page_type_id']) ? $data['page_type_id'] : '1';
$page_id_parent = isset($data['page_id_parent']) ? $data['page_id_parent'] : '0';
$page_status = isset($data['page_status']) ? $data['page_status'] : 'publish';
if (($page_status != 'publish') and ($page_status != 'draft') and ($page_status != 'private'))
$page_status = 'publish';
// если стоит разрешение admin_page_publish, то статус не меняем
// иначе ставим только draft
if (!mso_check_allow('admin_page_publish', $user_data['users_id'])) $page_status = 'draft';
$page_comment_allow = isset($data['page_comment_allow']) ? (int) $data['page_comment_allow'] : '1';
$page_ping_allow = isset($data['page_ping_allow']) ? (int) $data['page_ping_allow'] : '1';
$page_feed_allow = isset($data['page_feed_allow']) ? (int) $data['page_feed_allow'] : '1';
$page_menu_order = isset($data['page_menu_order']) ? (int) $data['page_menu_order'] : 0;
$page_id_autor = isset($data['page_id_autor']) ? (int) $data['page_id_autor'] : 0;
// нужно проверить вообще есть ли такой юзер $page_id_autor
$CI->db->select('users_id');
$CI->db->from('users');
$CI->db->where(array('users_id' => $page_id_autor));
$query = $CI->db->get();
if (!$query->num_rows()) // нет
$page_id_autor = 0;
if ($page_id_autor != $user_data['users_id']) // смена авторства - проверим разрешения
{
if (!mso_check_allow('edit_page_author', $user_data['users_id'], false)) // нельзя
{
$page_id_autor = $user_data['users_id'];
}
}
$ins_data = array(
'page_type_id' => $page_type_id,
'page_id_parent' => $page_id_parent,
'page_id_autor' => $page_id_autor,
'page_title' => $page_title,
'page_content' => $page_content,
'page_status' => $page_status,
'page_slug' => $page_slug,
'page_password' => $page_password,
'page_comment_allow' => $page_comment_allow,
'page_ping_allow' => $page_ping_allow,
'page_feed_allow' => $page_feed_allow,
'page_last_modified' => $page_last_modified,
'page_menu_order' => $page_menu_order,
// 'page_date_dead' => $,
// 'page_lang' => $,
);
if ($page_date_publish) $ins_data['page_date_publish'] = $page_date_publish;
$CI->db->where(array('page_id' => $page_id));
$res = ($CI->db->update('page', $ins_data)) ? '1' : '0';
# $CI->db->cache_delete_all();
if ($res) {
$id = $page_id;
// добавим теперь рубрики
// вначале удалим все записи из рубрик с этим page_id
$CI->db->where(array('page_id' => $page_id, 'links_id' => '0')); // чтобы линки не грохнуть
$CI->db->delete('cat2obj');
// рубрики указаны в виде номеров через запятую
$page_id_cat = isset($data['page_id_cat']) ? $data['page_id_cat'] : '';
$page_id_cat = mso_explode($page_id_cat); // в массив
foreach ($page_id_cat as $key => $val) {
$ins_data = array(
'page_id' => $id,
'category_id' => $val
);
$CI->db->insert('cat2obj', $ins_data);
# $CI->db->cache_delete_all();
}
// $page_tags = метка
// метки - это мета данные
// дефолтные данные
$def_data = array(
'meta_key' => 'tags',
'meta_id_obj' => $id,
'meta_table' => 'page'
);
// вначале грохнем старые, потом добавим новые
$CI->db->where($def_data);
$CI->db->delete('meta');
// получим существующие метки
$CI->db->select('meta_id');
$CI->db->where($def_data);
$query = $CI->db->get('meta');
if (!$query->num_rows()) // нет меток для этой страницы
{ // значит инсерт
$page_tags = isset($data['page_tags']) ? $data['page_tags'] : '';
$tags = mso_explode($page_tags, false, false); // в массив - не только числа
foreach ($tags as $key => $val) {
$ins_data = $def_data;
$ins_data['meta_value'] = $val;
$CI->db->insert('meta', $ins_data);
# $CI->db->cache_delete_all();
}
}
// опции - мета
$page_meta_options = isset($data['page_meta_options']) ? $data['page_meta_options'] : '';
// title##VALUE##титул##METAFIELD##description##VALUE##описание##METAFIELD##keywords##VALUE##ключи##METAFIELD##
$page_meta_options = explode('##METAFIELD##', $page_meta_options);
// вначале удалим все мета этой записи
//$where_in = []; // здесь meta_key
//foreach ($page_meta_options as $key=>$val)
//{
// if (trim($val))
// {
// $meta_temp = explode('##VALUE##', $val);
// $where_in[] = trim($meta_temp[0]);
// }
//}
// вначале грохнем старые, потом добавим новые
//$CI->db->where( array('meta_id_obj' => $id, 'meta_table' => 'page') );
//$CI->db->where_in('meta_key', $where_in );
//$CI->db->delete('meta');
// теперь тоже самое, только добавляем через insert
foreach ($page_meta_options as $key => $val) {
if (trim($val)) {
$meta_temp = explode('##VALUE##', $val);
$meta_key = trim($meta_temp[0]);
$meta_value = trim($meta_temp[1]);
mso_add_meta($meta_key, $id, 'page', $meta_value);
//$CI->db->insert('meta', array('meta_key'=>$meta_key, 'meta_value'=>$meta_value,
// 'meta_table' => 'page', 'meta_id_obj' => $id) );
}
}
// результат возвращается в виде массива
$res = array($id, $page_slug, $page_status, $page_password, $page_date_publish);
$response = array(
'result' => $res,
'description' => 'Updating page'
);
mso_flush_cache(); // сбросим кэш
} else {
$response = array(
'result' => 0,
'description' => 'Error inserting page'
);
}
if ($response['result']) {
mso_hook('edit_page', $response['result']);
mso_hook('edit_page_' . $page_status);
}
return $response;
}
# удалить страница
function mso_delete_page($data)
{
// global $MSO;
$CI = &get_instance();
if (isset($data['user_login'])) $user_login = $data['user_login'];
else $user_login = getinfo('session_users_login');
if (isset($data['password'])) $password = $data['password'];
else $password = getinfo('session_users_password');
# проверка доступа этому пользователю с этим паролем и этим разрешением
if (!mso_check_user_password($user_login, $password, 'admin_page_delete'))
return array('result' => 0, 'description' => 'Login/password incorrect or banned action');
if (!isset($data['page_id']))
return array('result' => 0, 'description' => 'Page ID not found');
$page_id = (int) $data['page_id'];
if (!$page_id) // ошибка!
{
return array('result' => 0, 'description' => 'Page ID incorrect');
} else {
// проверим id, чтобы вообще такая страница была
$CI->db->select('page_id');
$CI->db->where(array('page_id' => $page_id));
$query = $CI->db->get('page');
if ($query->num_rows() == 0) // нет такого
{
return array('result' => 0, 'description' => 'Page not found');
} else { // теперь можно удалять
// при удалении страницы нужно сразу удалить её, рубрики и мета
// потом будут еще и комментарии
$CI->db->where(array('page_id' => $page_id));
$CI->db->delete('cat2obj');
$CI->db->where(array('meta_id_obj' => $page_id, 'meta_table' => 'page'));
$CI->db->delete('meta');
$CI->db->where(array('page_id' => $page_id));
$CI->db->delete('page');
$CI->db->where(array('comments_page_id' => $page_id));
$CI->db->delete('comments');
mso_flush_cache(); // сбросим кэш
return array('result' => 1, 'description' => 'Page deleted');
}
}
}
# редактирование существующего комюзера
function mso_edit_comuser($data)
{
// global $MSO;
$CI = &get_instance();
$data = mso_xss_clean_data($data, array('user_login', 'password', 'comusers_email', 'comusers_new_password', 'comusers_nik', 'comusers_icq', 'comusers_url', 'comusers_msn', 'comusers_jaber', 'comusers_skype', 'comusers_avatar_url', 'comusers_description', 'comusers_date_birth_y', 'comusers_date_birth_m', 'comusers_date_birth_d', 'comusers_notify', 'comusers_language', 'comusers_activate_key', 'comusers_activate_string', 'comusers_admin_note', 'comusers_date_registr'));
if (isset($data['user_login'])) $user_login = $data['user_login'];
else $user_login = getinfo('session_users_login');
if (isset($data['password'])) $password = $data['password'];
else $password = getinfo('session_users_password');
# проверка можно ли редактировать этому пользователю с этим паролем и этим разрешением
if (!mso_check_user_password($user_login, $password, 'admin_comusers'))
return array('result' => 0, 'description' => 'Login/password incorrect');
$comusers_id = isset($data['comusers_id']) ? (int) $data['comusers_id'] : 0;
if ($comusers_id <= 0) return array('result' => 0, 'description' => 'Comuser ID incorrect');
$comusers_email = isset($data['comusers_email']) ? $data['comusers_email'] : '';
# нет email - ошибка
if (!$comusers_email or !mso_valid_email($comusers_email))
return array('result' => 0, 'description' => 'Email incorrect');
### пароль
$comusers_new_password = '';
if (isset($data['comusers_new_password'])) {
$comusers_new_password = mso_strip($data['comusers_new_password'], false);
if ($comusers_new_password and (strlen($comusers_new_password) > 6)) {
$comusers_new_password = mso_md5($comusers_new_password);
} else {
return array('result' => 0, 'description' => 'Password incorrect');
}
}
$comusers_nik = isset($data['comusers_nik']) ? $data['comusers_nik'] : '';
$comusers_icq = isset($data['comusers_icq']) ? $data['comusers_icq'] : '';
$comusers_url = isset($data['comusers_url']) ? $data['comusers_url'] : '';
$comusers_msn = isset($data['comusers_msn']) ? $data['comusers_msn'] : '';
$comusers_jaber = isset($data['comusers_jaber']) ? $data['comusers_jaber'] : '';
$comusers_skype = isset($data['comusers_skype']) ? $data['comusers_skype'] : '';
$comusers_avatar_url = isset($data['comusers_avatar_url']) ? $data['comusers_avatar_url'] : '';
$comusers_description = isset($data['comusers_description']) ? $data['comusers_description'] : '';
$comusers_date_birth_y = isset($data['comusers_date_birth_y']) ? $data['comusers_date_birth_y'] : '1970';
$comusers_date_birth_m = isset($data['comusers_date_birth_m']) ? $data['comusers_date_birth_m'] : '1';
$comusers_date_birth_d = isset($data['comusers_date_birth_d']) ? $data['comusers_date_birth_d'] : '1';
$comusers_notify = isset($data['comusers_notify']) ? $data['comusers_notify'] : '0';
$comusers_language = isset($data['comusers_language']) ? $data['comusers_language'] : 'ru';
$comusers_activate_key = isset($data['comusers_activate_key']) ? $data['comusers_activate_key'] : '';
$comusers_activate_string = isset($data['comusers_activate_string']) ? $data['comusers_activate_string'] : '';
$comusers_admin_note = isset($data['comusers_admin_note']) ? $data['comusers_admin_note'] : '';
$comusers_date_registr = isset($data['comusers_date_registr']) ? $data['comusers_date_registr'] : date('Y-m-d H:i:s');
# проверка корректности даты регистрации
if (!$comusers_date_registr) $comusers_date_registr = date('Y-m-d H:i:s');
# исправляем автоматом на ближайший корректный вариант
$comusers_date_registr = date("Y-m-d H:i:s", strtotime($comusers_date_registr));
# дату в MySQL
$comusers_date_birth = mso_date_convert_to_mysql($comusers_date_birth_y, $comusers_date_birth_m, $comusers_date_birth_d);
$upd_data = array(
'comusers_nik' => $comusers_nik,
'comusers_admin_note' => $comusers_admin_note,
'comusers_email' => $comusers_email,
'comusers_icq' => $comusers_icq,
'comusers_url' => $comusers_url,
'comusers_msn' => $comusers_msn,
'comusers_jaber' => $comusers_jaber,
'comusers_skype' => $comusers_skype,
'comusers_avatar_url' => $comusers_avatar_url,
'comusers_description' => $comusers_description,
'comusers_date_birth' => $comusers_date_birth,
'comusers_notify' => $comusers_notify,
'comusers_language' => $comusers_language,
'comusers_activate_string' => $comusers_activate_string,
'comusers_activate_key' => $comusers_activate_key,
'comusers_date_registr' => $comusers_date_registr,
);
if ($comusers_new_password) $upd_data['comusers_password'] = $comusers_new_password;
// _pr($upd_data);
$CI->db->where('comusers_id', $comusers_id);
$res = ($CI->db->update('comusers', $upd_data)) ? '1' : '0';
mso_flush_cache(); // сбросим кэш
$response = array(
'result' => $res,
'description' => 'Update'
);
return $response;
}
# end of file