<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* MaxSite CMS
* (c) https://max-3000.com/
*
*/
// получаем название указанного сегменту текущей страницы
// http://localhost/admin/users/edit/1
// mso_segment(3) -> edit
// номер считается от home-сайта
// если в сегменте находится XSS и $die = true, то рубим все
// можно проверить сегмент в своём массиве $my_segments
function mso_segment($segment = 2, $die = true, $my_segments = false)
{
global $MSO;
$CI = &get_instance();
if ($my_segments === false) $my_segments = $MSO->data['uri_segment'];
if (count($my_segments) > ($segment - 1))
$seg = $my_segments[$segment];
else
$seg = '';
$seg = urldecode($seg);
// $url = $CI->input->xss_clean($seg); // ci < 2
$url = $CI->security->xss_clean($seg, false);
if ($url != $seg and $die) die('<b><font color="red">Achtung! XSS attack!</font></b>');
return $url;
}
// получение текущих сегментов url в массив
// в отличие от CodeIgniter - происходит анализ get и отсекание до «?»
// если «?» нет, то возвращает стандартное $this->uri->segment_array();
function mso_segment_array()
{
$CI = &get_instance();
if (isset($_SERVER['REQUEST_URI']) and $_SERVER['REQUEST_URI']) {
// http://localhost/page/privet?get=hello
$url = getinfo('site_protocol');
$url .= $_SERVER['HTTP_HOST'] . mso_clean_str($_SERVER['REQUEST_URI']);
$url = str_replace($CI->config->config['base_url'], '', $url); // page/privet?get=hello
if (strpos($url, '?') !== FALSE) {
// есть «?»
$url = explode('?', $url); // разделим в массив
$url = $url[0]; // сегменты - это только первая часть
$url = explode('/', $url); // разделим в массив по /
// нужно изменить нумерацию - начало с 1
$out = [];
$i = 1;
foreach ($url as $val) {
if ($val) {
$out[$i] = $val;
$i++;
}
}
return $out;
} else {
return $CI->uri->segment_array();
}
} else {
return $CI->uri->segment_array();
}
}
// получение get-строки из текущего адреса
function mso_url_get()
{
$CI = &get_instance();
if (isset($_SERVER['REQUEST_URI']) and $_SERVER['REQUEST_URI'] and (strpos($_SERVER['REQUEST_URI'], '?') !== FALSE)) {
$url = getinfo('site_protocol') . $_SERVER['HTTP_HOST'] . mso_clean_str($_SERVER['REQUEST_URI']);
$url = str_replace($CI->config->config['base_url'], "", $url);
$url = explode('?', $url);
return $url[1];
} else {
return '';
}
}
// функция преобразования get-строки в массив
// разделитель элементов массива & или &
// значение через стандартную parse_str
function mso_parse_url_get($s = '')
{
if ($s) {
$s = str_replace('&', '&', $s);
$s = explode('&', $s);
$uri_get_array = [];
foreach ($s as $val) {
parse_str($val, $arr);
foreach ($arr as $key1 => $val1) {
$uri_get_array[$key1] = $val1;
}
}
return $uri_get_array;
} else {
return [];
}
}
// получить текущую страницу пагинации
// next - признак сегмент после которого указывается номер страницы
function mso_current_paged($next = 'next')
{
// global $MSO;
$uri = mso_current_url(false, true);
// это чтобы нумерация совпадала с $MSO->data['uri_segment'] с 1
array_unshift($uri, '');
unset($uri[0]);
if ($n = mso_array_get_key_value($uri, $next)) {
if (isset($uri[$n + 1]))
$n = (int) $uri[$n + 1];
else
$n = 1;
if ($n > 0)
$current_paged = $n;
else
$current_paged = 1;
} else {
$current_paged = 1;
}
return $current_paged;
}
// увеличение или уменьшение ссылки next на указанную величину $inc
// http://site.com/home/next/2 -> +1 -> http://site.com/home/next/3
// $url - исходный адрес (относительно сайта). Если адрес = пустой строке,
// то берем mso_current_url Если первый сегмент пустой, то это home
// $inc - величина изменения
// $max - максимум - если $inc + текущий > $max, то ставится $max. Если $max = false, то он не учитывается
// $min - минимальное значение
// $next - признак сегмент после которого указывается номер страницы
// $empty_no_range = true - отдает пустую строчку, если текущая paged будет равна конечной
// если $empty_no_range = false, то отдаем ссылку как обычно
function mso_url_paged_inc($max = false, $inc = 1, $empty_no_range = true, $url = '', $min = 1, $next = 'next')
{
if (!$url) $url = mso_current_url();
$current_paged = mso_current_paged($next);
$result_paged = $current_paged + $inc;
if ($max) if ($result_paged > $max) $result_paged = $max;
if ($result_paged < $min) $result_paged = $min;
if ($empty_no_range and $result_paged == $current_paged) return '';
// если нет $url, то это главная
if (!$url) $url = 'home/' . $next . '/' . $current_paged;
if (strpos($url, $next . '/') === false) // нет вхождения next/ - нужно добавить
$url .= '/' . $next . '/' . $current_paged;
// если $result_paged = , то $min, то $next не пишем
if ($result_paged == $min)
$url = str_replace($next . '/' . $current_paged, '', $url);
else
$url = str_replace($next . '/' . $current_paged, $next . '/' . $result_paged, $url);
// удалим последние слэши
$url = trim(str_replace('/', ' ', $url));
$url = str_replace(' ', '/', $url);
if ($url == 'home') $url = '';
return getinfo('siteurl') . $url;
}
// получить пермалинк рубрики по указанному слагу
function mso_get_permalink_cat_slug($slug = '', $prefix = 'category/')
{
if (!$slug) return '';
return getinfo('siteurl') . $prefix . $slug;
}
// получить пермалинк страницы по её id через запрос БД
function mso_get_permalink_page($id = 0, $prefix = 'page/')
{
global $MSO;
$id = (int) $id;
if (!$id) return '';
$CI = &get_instance();
$CI->db->select('page_slug, page_id');
$CI->db->where(array('page_id' => $id));
$query = $CI->db->get('page');
if ($query->num_rows() > 0) {
foreach ($query->result_array() as $row) {
$slug = $row['page_slug'];
}
return $MSO->config['site_url'] . $prefix . $slug;
} else {
return '';
}
}
// получение текущего url относительно сайта
// ведущий и конечные слэши удаляем
// если $absolute = true, то возвращается текущий урл как есть
function mso_current_url($absolute = false, $explode = false, $delete_request = false)
{
$url = getinfo('site_protocol') . $_SERVER['HTTP_HOST'] . mso_clean_str($_SERVER['REQUEST_URI']);
//pr($url);
if ($delete_request) {
// отделим по «?»
$url = explode('?', $url);
$url = $url[0];
}
if ($absolute) return $url;
$url = str_replace(getinfo('site_url'), '', $url);
$url = rtrim($url, '/');
// $url = trim(str_replace('/', ' ', $url));
// $url = str_replace(' ', '/', $url);
$url = urldecode($url);
if ($explode) $url = explode('/', $url);
return $url;
}
// редирект на страницу сайта. путь указывать относительно сайта
// если $absolute = true - переход по указаному пути
// $header - 301 или 302 редирект
function mso_redirect($url = '', $absolute = false, $header = false)
{
$url = strip_tags($url);
$url = str_replace(array('%0d', '%0a'), '', $url);
$url = mso_xss_clean($url);
if ($header == 301) header('HTTP/1.1 301 Moved Permanently');
elseif ($header == 302) header('HTTP/1.1 302 Found');
if ($absolute) {
header("Refresh: 0; url={$url}");
header("Location: {$url}");
} else {
$url = getinfo('site_url') . $url;
header("Refresh: 0; url={$url}");
header("Location: {$url}");
}
exit();
}
# end of file