Files
AtomicOld/api/Pages.php
2026-02-14 19:34:54 +03:00

346 lines
12 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Simpla CMS
*
* @copyright 2011 Denis Pikusov
* @link http://simplacms.ru
* @author Denis Pikusov
*
*/
require_once ('Simpla.php');
class Pages extends Simpla {
/*
*
* Функция возвращает страницу по ее id или url (в зависимости от типа)
* @param $id id или url страницы
*
*/
public function get_page($id, $menu_to_omit = []) {
$menu_condition = '';
if (!empty($menu_to_omit)) {
$menu_condition .= 'menu_id NOT IN ('. implode(',', $menu_to_omit) . ') AND';
}
if (gettype($id) == 'string')
$where = $this->db->placehold(' WHERE '. $menu_condition . 'url=? ', $id);
else
$where = $this->db->placehold(' WHERE '. $menu_condition . 'id=? ', intval($id));
$query = "SELECT * FROM __pages $where LIMIT 1";
$this->db->query($query);
$page = $this->db->result();
if ($page->name) {
$parentUrl = $this->get_parent_url($page->parent);
if ($parentUrl != '/')
$page->parentUrl = '/' . $parentUrl;
else
$page->parentUrl = $parentUrl;
}
if(strpos($_SERVER['REQUEST_URI'], '/uslugi/') !== false) $page->parentUrl = '/uslugi/';
if(strpos($_SERVER['REQUEST_URI'], '/tuning-centr/') !== false) $page->parentUrl = '/tuning-centr/';
return $page;
}
/*
*
* Функция возвращает id страницы
*
*/
public function get_page_id($alias) {
$where = $this->db->placehold(' WHERE url=? ', $alias);
$query = "SELECT id FROM __pages $where LIMIT 1";
$this->db->query($query);
$page = $this->db->result();
return $page->id;
}
function getStartPage($id, $topParentId = 0){
$id = (int)$id;
$page = $this->get_page($id);
return ($page->parent == $topParentId || !$page->parent) ? $page : $this->getStartPage($page->parent, $topParentId);
}
/*
*
* Функция возвращает массив страниц, удовлетворяющих фильтру
* @param $filter
*
*/
public function get_pages($filter = array()) {
$menu_filter = '';
$visible_filter = $keyword_filter = '';
$pages = array();
if (isset($filter['id']))
$menu_filter = $this->db->placehold('AND id in (?@)', (array )$filter['id']);
if (isset($filter['parent']))
$menu_filter = $this->db->placehold('AND parent in (?@)', (array )$filter['parent']);
if (isset($filter['menu_id']))
$menu_filter = $this->db->placehold('AND menu_id in (?@)', (array )$filter['menu_id']);
if (isset($filter['visible']))
$visible_filter = $this->db->placehold('AND visible = ?', intval($filter['visible']));
if (isset($filter['show_home']))
$visible_filter = $this->db->placehold('AND show_home = ?', intval($filter['show_home']));
if (isset($filter['show_service']))
$visible_filter = $this->db->placehold('AND show_service = ?', intval($filter['show_service']));
if(isset($filter['keyword']))
{
$keywords = explode(' ', $filter['keyword']);
foreach($keywords as $keyword)
$keyword_filter .= $this->db->placehold('AND (name LIKE "%'.mysql_real_escape_string(trim($keyword)).'%" OR meta_keywords LIKE "%'.mysql_real_escape_string(trim($keyword)).'%") ');
}
$query = "SELECT id, parent, url, header, name, meta_title, meta_description, meta_keywords, image, introtext, toptext, body, bottext, menu_id, position, visible, show_home
FROM __pages WHERE 1 $menu_filter $visible_filter $keyword_filter ORDER BY position";
//echo($query) . '<hr>';
$this->db->query($query);
foreach ($this->db->results() as $page) {
if ($page->name) {
$parentUrl = $this->get_parent_url($page->parent);
if ($parentUrl != '/')
$page->parentUrl = '/' . $parentUrl;
else
$page->parentUrl = $parentUrl;
}
if(strpos($_SERVER['REQUEST_URI'], '/uslugi/') !== false) $page->parentUrl = '/uslugi/';
if(strpos($_SERVER['REQUEST_URI'], '/tuning-centr/') !== false) $page->parentUrl = '/tuning-centr/';
//$page->parentUrl = '';
$pages[$page->id] = $page;
}
return $pages;
}
public function get_parent_url($id, $url = '') {
//if(strpos($_SERVER['REQUEST_URI'], '/tuning-centr/') !== false) return '/tuning-centr/';
if (!$id) return;
$id = intval($id);
$page = $this->get_page($id);
$url = $page->url . '/' . $url;
if ($page->parent > 0)
return $this->get_parent_url($page->parent, $url);
else
return $url;
}
public function get_breadcrumb($id, $breadcrumb = array()) {
if (!$id) return;
$id = intval($id);
$page = $this->get_page($id);
$breadcrumb[] = new ArrayObj(array('anchor' => $page->header, 'href' => $this->get_parent_url($page->id)));
if ($page->parent > 0)
return $this->get_breadcrumb($page->parent, $breadcrumb);
else {
$result = array_reverse($breadcrumb);
$lastResult = array_pop($result);
return new ArrayObj($result);
}
}
public function get_breadcrumb_service($id, $breadcrumb = array()) {
if (!$id) return;
$id = intval($id);
$page = $this->get_page($id); //echo '<!-- 999999'; print_r($page); echo '-->';
//$breadcrumb[] = new ArrayObj(array('anchor' => $page->name, 'href' => $this->get_parent_url($page->id)));
$href = $page->url != 'tuning-centr' ? 'tuning-centr/' . $page->url . '/' : 'tuning-centr/';
$breadcrumb[] = new ArrayObj(array('anchor' => $page->name, 'href' => $href ));
if ($page->parent > 0)
return $this->get_breadcrumb_service($page->parent, $breadcrumb);
else {
$result = array_reverse($breadcrumb);
$lastResult = array_pop($result);
return new ArrayObj($result);
}
}
/*
*
* Функция возвращает массив id => name для выбора родительского раздела в админке
*
*/
public function get_select_pages($filter = array(), $pages = array(), $del = '') {
$menu_filter = '';
$visible_filter = '';
//$pages = array();
if (isset($filter['parent']))
$menu_filter = $this->db->placehold('AND parent in (?@)', (array )$filter['parent']);
if (isset($filter['menu_id']))
$menu_filter = $this->db->placehold('AND menu_id in (?@)', (array )$filter['menu_id']);
if (isset($filter['visible']))
$visible_filter = $this->db->placehold('AND visible = ?', intval($filter['visible']));
if (isset($filter['show_home']))
$visible_filter = $this->db->placehold('AND show_home = ?', intval($filter['show_home']));
$query = "SELECT id, name FROM __pages WHERE 1 $menu_filter $visible_filter ORDER BY id"; //echo $query;
$this->db->query($query);
foreach ($this->db->results() as $page){
$page->name = $del . $page->name;
$pages[$page->id] = $page;
$filter2 = $filter;
$filter2['parent'] = array($page->id);
$pages = $this->get_select_pages($filter2, $pages, $del . '--');
}
return $pages;
}
/*
*
* Создание страницы
*
*/
public function add_page($page) {
$query = $this->db->placehold('INSERT INTO __pages SET ?%', $page);
if (!$this->db->query($query))
return false;
$id = $this->db->insert_id();
$this->db->query("UPDATE __pages SET position=id WHERE id=?", $id);
return $id;
}
/*
*
* Обновить страницу
*
*/
public function update_page($id, $page) {
$query = $this->db->placehold('UPDATE __pages SET ?% WHERE id in (?@)', $page, (array )$id);
if (!$this->db->query($query))
return false;
return $id;
}
/*
*
* Удалить страницу
*
*/
public function delete_page($id) {
if (!empty($id)) {
$query = $this->db->placehold("DELETE FROM __pages WHERE id=? LIMIT 1", intval($id));
if ($this->db->query($query))
return true;
}
return false;
}
public function delete_image($id) {
$query = $this->db->placehold("SELECT image FROM __pages WHERE id=?", intval($id));
$this->db->query($query);
$filename = $this->db->result('image');
if (!empty($filename)) {
$query = $this->db->placehold("UPDATE __pages SET image=NULL WHERE id=?", $id);
$this->db->query($query);
$query = $this->db->placehold("SELECT count(*) as count FROM __pages WHERE image=? LIMIT 1", $filename);
$this->db->query($query);
$count = $this->db->result('count');
if ($count == 0) {
@unlink($this->config->root_dir . $this->config->original_images_dir . $filename);
}
}
}
/*
*
* Функция возвращает массив меню
*
*/
public function get_menus() {
$menus = array();
$query = "SELECT * FROM __menu ORDER BY position";
$this->db->query($query);
foreach ($this->db->results() as $menu)
$menus[$menu->id] = $menu;
return $menus;
}
/*
*
* Функция возвращает меню по id
* @param $id
*
*/
public function get_menu($menu_id) {
$query = $this->db->placehold("SELECT * FROM __menu WHERE id=? LIMIT 1", intval($menu_id));
$this->db->query($query);
return $this->db->result();
}
////////////////////////////////////////////////////
function get_related_objects($page_id = array())
{
if(empty($page_id))
return array();
$query = $this->db->placehold("SELECT page_id, object_id, type
FROM __pages_objects
WHERE page_id in(?@)", (array)$page_id);
$this->db->query($query);
return $this->db->results();
}
public function add_related_object($page_id, $related_id, $type)
{
$query = $this->db->placehold("INSERT IGNORE INTO __pages_objects SET page_id=?, object_id=?, type=?", $page_id, $related_id, $type);
$this->db->query($query);
return $related_id;
}
public function delete_related_object($page_id, $related_id)
{
$query = $this->db->placehold("DELETE FROM __pages_objects WHERE page_id=? AND object_id=? LIMIT 1", intval($page_id), intval($related_id));
$this->db->query($query);
}
function get_related_articles($page_id = array())
{
if(empty($page_id))
return array();
$query = $this->db->placehold("SELECT *
FROM __related_articles
WHERE page_id in(?@)", (array)$page_id);
$this->db->query($query);
return $this->db->results();
}
public function add_related_article($page_id, $article_id)
{
$query = $this->db->placehold("INSERT IGNORE INTO __related_articles SET page_id=?, article_id=?", $page_id, $article_id);
$this->db->query($query);
return $article_id;
}
public function delete_related_article($page_id, $article_id)
{
$query = $this->db->placehold("DELETE FROM __related_articles WHERE page_id=? AND article_id=? LIMIT 1", intval($page_id), intval($article_id));
$this->db->query($query);
}
}
class ArrayObj extends stdClass {
function __construct($array = array()) {
if (is_array($array))
foreach ($array as $k => $v) $this->$k = $v;
}
}