Вход Регистрация
Файл: inc/functions.php
Строк: 296
<?php
/*
################################################################################
###                                                                          ###
###                              Cafe CMS                                    ###
###                        http://cms.rad-li.ru                              ###
###                         mailto:rad-li@ya.ru                              ###
###                                                                          ###
################################################################################
*/

/* Проверяем, установлена ли CMS
 * Если файл /config.php не существует, выводим ошибку и предлагаем установку CMS
 */
function check_install () {
    if (!
file_exists ($_SERVER['DOCUMENT_ROOT'] . '/config.php')) {
        
print_error ('Файл настроек config.php не&nbsp;найден или к&nbsp;нему нет доступа. Возможно CMS не&nbsp;установлена.');
        echo 
'<br>';
        
print_done ('Для установки системы перейдите по&nbsp;ссылке <a href="/install/index.php">http://' $_SERVER[SERVER_NAME] . '/install/index.php</a>. Официальный сайт разработчика 
        <a href="http://cms.rad-li.ru">cms.rad-li.ru</a>'
);
        exit;
    } else {
        include 
$_SERVER['DOCUMENT_ROOT'] . '/config.php';
    }
}

/* Подключение к базе данных
 * Данные для подключения берутся из файла /config.php
 */
function db_connect () {
    @
mysql_connect (DB_SERVERDB_LOGIN DB_PASSWORD) ? 
        (@
mysql_select_db (DB_NAME) ? $status true $status 'Не удалось подключиться к серверу БД! ' mysql_error()) 
    : 
$status 'Невозможно открыть базу данных! ' mysql_error();
    @
mysql_query ("SET NAMES UTF8");

    if (
$status !== true) {exit (print_error ($status));}
}

/* Загрузка модулей
 * $module_name - имя модуля (например, photo)
 */
function load_module ($module_name) {
    include 
$_SERVER['DOCUMENT_ROOT'] . '/admin/modules/' $module_name '.php';
}

/* Чистка принятых данных
 */
function clear_input ($input_data) {
    if (
is_array ($input_data)) {
        foreach  (
$input_data AS $key => $value) {
            
$output_data[$key] = clear_input ($input_data[$key]);
        }
    } else {
        if (
get_magic_quotes_gpc () == 1) {
            
$input_data stripslashes($input_data);
        }
        
$input_data  trim ($input_data);
        
$output_data mysql_real_escape_string ($input_data);
    }
    return 
$output_data;
}

/* Запись действий пользователей в журнал
 *
 * Входные данные:
 * $type   - тип действия пользователя,
 * $status - статус действия (успех или ошибка),
 * $level  - уровень детализации.
 * 
 * Всего три уровня детализации:
 * 0 - ведение журнала отключено,
 * 1 - записываются только самые важные события, 
 * 2 - записываются все события.
 *
 * В базу данных пишутся следующие данные:
 * user   - id пользователя,
 * date   - дата и время выполнения действия,
 * type   - тип действия,
 * status - статус действия (успех или ошибка),
 * ip     - текущий ip-адрес пользователя,
 * ua     - user-agent пользователя
 */
function log_write ($type$status$level) {
    if (
$level <= LOG_LEVEL) {
        if (empty (
$_SESSION['id'])) $_SESSION['id'] = '0';
        
$add_log "INSERT `" DB_PREFIX "_logs` (
        `user`,
        `date`, 
        `type`,
        `status`,
        `ip`    
        )
    VALUES ( 
        '" 
$_SESSION['id'] . "', 
        '" 
mktime () . "',  
        '" 
$type "',  
        '" 
$status "',  
        '" 
$_SERVER['REMOTE_ADDR'] . "'
        )"
;

        @
mysql_query ($add_log);
    }
}

// Вывод сообщений об ошибках и успешных операциях
function print_message () {

    global 
$error;

    if (isset (
$_GET['msg']) && in_array ($_GET['msg'], array ('del''add''pos''upd''bcp''err'))) {
        
$msg $_GET['msg'];
        
$status_msg = array (
            
'pos' => 'Позиции обновлены.'
            
'add' => 'Запись успешно добавлена.',
            
'upd' => 'Запись успешно обновлена.',
            
'del' => 'Запись успешно удалена.',
            
'bcp' => 'Резервная копия создана.',
            
'err' => 'Ошибка при выполнении операции.',);
        if (empty (
$error)) {
            
print_done ($status_msg[$msg]);
            
log_write  ($status_msg[$msg], 12);
        }
    } else {
        if (isset (
$_GET['msg'])) $error .= 'Не корректный параметр msg.';
    }
}

// Вывод ошибки, стили задаются в style.css текущего шаблона
function print_error ($message) {
    echo 
'<div class="print_error">' $message '</div>';
}

// Вывод успешной операции, стили задаются в style.css текущего шаблона
function print_done ($message) {
    echo 
'<div class="print_done">' $message '</div>';
}

// Высчитываем начальную и конечную запись для вывода на текущей странице
function page_limit ($page_limit) {
    global 
$start_page;
    global 
$end_page;

    if (isset (
$_GET['page'])) {
        
$start_page $_GET['page'] * $page_limit $page_limit;
        
$end_page   $page_limit;
    } else {
        
$start_page '0';
        
$end_page   $page_limit;
    }
}

// Вывод списка страниц (пагинатор)
function pager ($page_count) {
    if (
$page_count>=2) {
        echo 
"Страницы: ";
        if (
$_GET['page']) {
            for (
$page 1$page <= $page_count$page++) {
                if (
$page == $_GET['page']) {
                    echo 
'<strong><span class="page-num">' $page '</span></strong>';
                }
                else {
                    echo 
'<a class="page-num" href="/admin/index.php?section=' $_GET['section'] . '&action=list&page=' $page '">' $page '</a>';
                }
            }
        }
        if (!
$_GET['page']) {
            echo 
'<strong><span class="page-num">1</span></strong>';
            for (
$page 2$page <= $page_count$page++) {
                if (
$page == $_GET['page']) {
                    echo 
'<strong><span class="page-num">' $page '</span></strong>';
                }
                else {
                    echo 
'<a class="page-num" href="/admin/index.php?section=' $_GET['section'] . '&action=list&page=' $page '">' $page '</a>';
                }
            }
        }
    }
}

/* Перенаправление после запроса или вывод ошибки в случае неудачи
 * $sql  - запрос в БД,
 * $path - куда переадресовать при успешном выполнении, если не указано - к списку
 * $msg  - сообщение при успешном выполнение
 */
function make_query ($sql$msg$path) {
    if (!isset(
$path)) {$path $_GET['section'];}
    if (
mysql_query ($sql)) {
        
header ('Location: /admin/index.php?section=' $path '&msg=' $msg); 
    } else {
        
print_error ('Ошибка: ' mysql_errno() . ': ' mysql_error ());
    }
}

// Удаляем запись из БД
// $section - из какого раздела/таблицы
// $id - номер записи в бд
function terminator () {
    
$id $_GET['id'];
    
$delete "DELETE FROM `" DB_PREFIX "_" $_GET['section'] . "` WHERE `id` = " $id " LIMIT 1";

    if (
$_SESSION['status'] == '1') { // удалять может только администратор
        
if (mysql_query ($delete)) {
            
header ('Location: /admin/index.php?section=' $_GET['section'] . '&action=list&msg=del');
        } else {
            
print_error ('При удалении записи возникла ошибка: ' mysql_errno() . ': ' mysql_error () . '.');
        }
    } else {
        
print_error ('Не достаточно прав для удаления.');
    }
}

// Очистка данных от html тегов
function clear_html ($include_data$exclude_data) {
    if (
is_array ($include_data)) {
        foreach  (
$include_data AS $key => $value) {
            
$output_data[$key] = clear_html ($include_data[$key], $exclude_data);
        }
    } else {
        if (!
in_array ($include_data$exclude_data)) {
            
$output_data htmlspecialchars ($include_data);
        } else {
            
$output_data $include_data;
        }
    }
    return 
$output_data;
}

// Удаляем пробелы, табы, переносы строки
function clear_space ($in_data) {
    
$search  = array("'[r|n|t]'""'s{2,}'");
    
$replace = array(' '' ');
    
$out_data=preg_replace($search,$replace,trim($in_data)); 
    return 
$out_data;
}

/* Транслитерирование строки
 * Используется для перевода русских значений поля url в транслит
 * Если значение поля url было пустое, вместо него берется значение поля title
 */
function translit ($origin_url$title) {

    global 
$url;

    
$arr = array (
        
'А' => 'a',     'а' => 'a'
        
'Б' => 'b',     'б' => 'b'
        
'В' => 'v',     'в' => 'v'
        
'Г' => 'g',     'г' => 'g'
        
'Д' => 'd',     'д' => 'd'
        
'Е' => 'e',     'е' => 'e'
        
'Ё' => 'yo',    'ё' => 'yo'
        
'Ж' => 'zh',    'ж' => 'zh',
        
'З' => 'z',     'з' => 'z'
        
'И' => 'i',     'и' => 'i'
        
'Й' => 'j',     'й' => 'j'
        
'К' => 'k',     'к' => 'k'
        
'Л' => 'l',     'л' => 'l'
        
'М' => 'm',     'м' => 'm'
        
'Н' => 'n',     'н' => 'n'
        
'О' => 'o',     'о' => 'o'
        
'П' => 'p',     'п' => 'p'
        
'Р' => 'r',     'р' => 'r'
        
'С' => 's',     'с' => 's'
        
'Т' => 't',     'т' => 't'
        
'У' => 'u',     'у' => 'u'
        
'Ф' => 'f',     'ф' => 'f'
        
'Х' => 'kh',    'х' => 'kh'
        
'Ц' => 'c',     'ц' => 'c'
        
'Ч' => 'ch',    'ч' => 'ch'
        
'Ш' => 'sh',    'ш' => 'sh'
        
'Щ' => 'shh',   'щ' => 'shh'
        
'Ъ' => '',      'ъ' => ''
        
'Ы' => 'y',     'ы' => 'y'
        
'Ь' => '',      'ь' => ''
        
'Э' => 'e',     'э' => 'e'
        
'Ю' => 'yu',    'ю' => 'yu'
        
'Я' => 'ya',    'я' => 'ya'
        
' ' => '-',
    );
    
    if (
$origin_url == '') {$origin_url $title;}
    
$key array_keys ($arr);
    
$val array_values ($arr);
    
$url str_replace ($key,$val,$origin_url); 

    return 
preg_replace ("/[^a-z0-9-]/i"""$url); 
}


/* Перевод даты в таймстемп
 * Входные данные имеют вид 12:45:56 17.12.2012
 */
function timestamp ($get_date) {

    global 
$date;

    
$date mktime (
    
substr ($get_date02),
    
substr ($get_date32),
    
substr ($get_date62),
    
substr ($get_date122),
    
substr ($get_date92),
    
substr ($get_date154));
    
    return 
$date;
}

// Проверяем ошибки в переменных POST и GET
function check_error () {
    
    global 
$error;
    global 
$action;

    
$error '';

    
// проверяем GET-запросы
    
if ($_GET) {
        
        
// проверяем id и pid
        
if (isset ($_GET['id'])  && !ctype_digit ($_GET['id']))  {$error .= 'id должен состоять только из цифр.';}
        if (isset (
$_GET['pid']) && !ctype_digit ($_GET['pid'])) {$error .= 'pid должен состоять только из цифр.';}

        
// определяем разрешенные значения параметра action
        
if (isset ($_GET['action']) && !in_array ($_GET['action'], array ('list''add''delete''edit''view''category''comments''delete_category''add_category''edit_subcategory''add_subcategory''delete_comment''edit_category''edit_comment''backup''album_list''album_add''album_edit''album_view''album_delete'))) {
            
$action 'list';
            
$error .= 'Не корректный параметр action.';
        } else {
            if (!empty (
$_GET['action'])) {
                
$action $_GET['action'];
            } else {
                
$action 'list';
            }
        }

        
// проверяем номер страницы
        
if (isset ($_GET['page']) && !ctype_digit ($_GET['page'])) {
            
$error .= 'Номер страницы должен быть цифрой.';
            unset (
$_GET['page']);
        }
    }

    
// проверяем POST-запросы
    
if ($_POST) {

        
// проверяем id
        
if ((isset ($_POST['id']) && $_POST['id'] !== '') && empty ($_POST['position']) && !ctype_digit ($_POST['id'])) {
            
$error .= 'id должен состоять только из цифр.' $_POST['id'];
        }

        
// проверяем pid
        
if (isset ($_POST['pid']) && empty ($_POST['position']) && !ctype_digit ($_POST['pid'])) {
            
$error .= 'pid должен состоять только из цифр.';
        }

        
// значение параметра position должно быть цифрой
        
if (isset ($_POST['id']) && isset ($_POST['position'])) {
            foreach (
$_POST['id'] as $testcase) {
                if (!
ctype_digit ($testcase)) {
                    
$error .= 'id должен состоять только из цифр.';
                }
            }
            foreach (
$_POST['position'] as $testcase) {
                if (!
ctype_digit ($testcase)) {
                    if (
$testcase != "") {
                        
$error .= 'position должно состоять только из цифр.';
                    }
                }
            }
        }
    }
}

/* Загрузка файлов
 * Входные значения:
 * $valid_types - разрешенные расширения файлов в виде массива,
 * $valid_mime  - то же для mime-типов
 * $dl_path     - путь для сохранения файла
 */
function file_upload ($valid_types$valid_mime$dl_path) {
    
$filenametmp $_FILES['file']['name']; // расположение временного файла
    
$ext strtolower (substr ($filenametmpstrrpos ($filenametmp"."))); // расширение файла

    // проверяем расширение файла
    
if (!in_array ($ext$valid_types)) {
        
print_error ('Файл не загружен. Разрешена загрузка только файлов с расширениями $valid_types. <a href="javascript:history.back(1)">Назад</a>');
        exit;
    }
    
    
// перемещаем временный файл в нужный каталог
    
if (!copy ($_FILES["file"]["tmp_name"], $dl_path)) {
        
print_error ('При загрузке файла произошла ошибка. <a href="javascript:history.back(1)">Назад</a>');
        exit;
    }
}

/* Обрезка изображения
 * $input_file  - путь к изображению,
 * $width       - ширина изображения в пикселях,
 * $height      - высота изображения в пикселях,
 * $output_file - путь для сохранения файла
 * $quality     - качество сжатия jpg в процентах
 */
function resize_pic ($input_file$width$height$output_file$quality) {
    
$src imagecreatefromjpeg ($input_file);
    
$w_src imagesx ($src);
    
$h_src imagesy ($src);
    
    
// если изображение горизонтальное
    
if ($w_src>=$h_src) {

        if (
$w_src >= $width && $h_src >= $height) {$neww $width$newh $height;
        } else {
$neww $w_src$newh $h_src;}

        
$k1 $neww/imagesx ($src);
        
$k2 $newh/imagesy ($src);
        
$k $k1 $k2 $k2 $k1;

        
$w intval (imagesx ($src)*$k);
        
$h intval (imagesy ($src)*$k);

        
$dest imagecreatetruecolor ($w,$h);
        
imagecopyresampled ($dest$src0000$w$himagesx ($src), imagesy ($src));
    }


    
// если изображение векртикальное
    
if ($w_src $h_src) {
        if (
$w_src >= $height && $h_src >= $height) {$neww $height$newh $height;
        } else {
$neww $w_src$newh $h_src;}

        
$k1 $neww/imagesx ($src);
        
$k2 $newh/imagesy ($src);
        
$k $k1 $k2 $k2 $k1;

        
$w intval (imagesx ($src)*$k);
        
$h intval (imagesy ($src)*$k);
        
$dest imagecreatetruecolor ($w$h);
        
imagecopyresampled ($dest$src0000$w$himagesx ($src), imagesy ($src));
    }

    
// сохраняем
    
$save imagejpeg ($dest$output_file$quality); //сохраняем рисунок в формате 

    // чистим память
    
imagedestroy ($dest);
}

/* Создаем квадратное превью из исходного изображения
 * $input_file  - путь к изображению,
 * $width       - ширина изображения в пикселях,
 * $height      - высота изображения в пикселях,
 * $output_file - путь для сохранения файла
 * $quality     - качество сжатия jpg в процентах
 */
function crop_preview ($input_file$width$output_file$quality) {
    
$src imagecreatefromjpeg ($input_file);
    
$w_src imagesx ($src);
    
$h_src imagesy ($src);

    
// создаём пустую квадратную картинку  
    
$dest imagecreatetruecolor ($width$width); 

    
// вырезаем квадратную серединку по x, если фото горизонтальное 
    
if ($w_src $h_src
    
imagecopyresized ($dest$src00round ((max ($w_src$h_src) - min ($w_src$h_src))/2), 0$width$widthmin ($w_src$h_src), min ($w_src$h_src)); 

    
// вырезаем квадратную верхушку по y, 
    // если фото вертикальное
    
if ($w_src $h_src
    
imagecopyresized ($dest$src0000$width$widthmin($w_src$h_src), min($w_src$h_src)); 

    
// квадратная картинка масштабируется без вырезок 
    
if ($w_src == $h_src
    
imagecopyresized ($dest$src0000$width$width$w_src$w_src); 

    
// вывод картинки и очистка памяти
    
$save Imagejpeg($dest$output_file$quality); //сохраняем рисунок в формате JPEG
    
imagedestroy($dest);
}

// Удаление файлов (для фотоальбома)
function files_delete ($file_id) {

    
$sql mysql_query ("SELECT date FROM `" DB_PREFIX "_photos` WHERE `id` = $file_id");
    
$row mysql_fetch_array ($sqlMYSQL_ASSOC);
    
$file_name $row['date'];

    
unlink ("../upload/photo/original/" $file_name ".jpg");
    
unlink ("../upload/photo/220-220/"  $file_name ".jpg");
    
unlink ("../upload/photo/800-600/"  $file_name ".jpg");
}

// Выводим счетчик с указанным id
function print_counter ($id) {
    
$counter_list mysql_query ("SELECT code FROM `" DB_PREFIX "_stats` WHERE `status` = '1' && `id` = " $id);
    while (
$row mysql_fetch_array ($counter_listMYSQL_ASSOC)) {
        echo 
$row['code'] . "rn";
    }
}
// Формируем содержимое страницы
function get_page () {

    global 
$page_title;
    global 
$page_text;
    global 
$page_keywords;
    global 
$page_description;

    
$url $_GET['url'];
    
$section $_GET['section'];

    if (isset (
$url) && $url !== 'main') {
        
$page_list mysql_query ("SELECT * FROM `" DB_PREFIX "_" $section "` WHERE `url` = '" $url "' && `position` != '0' LIMIT 1");

        while (
$row mysql_fetch_array ($page_listMYSQL_ASSOC)) {
            
$page_title         $row['title'];
            
$page_text          $row['text'];
            
$page_keywords      $row['keywords'];
            
$page_description   $row['description'];
        }
    } else {
        
$main_page mysql_query ("SELECT * FROM `" DB_PREFIX "_pages` WHERE `url` = 'main' && `position` != '0' LIMIT 1");

        if (
mysql_num_rows ($main_page) < '1') {
            
$page_text 'Не создано ни одной страницы или главная страница не выбрана. Если вы являетесь администратором сайта, перейдите в панель управления и создайте новые страницы.';
        }

        while (
$row mysql_fetch_array ($main_pageMYSQL_ASSOC)) {
            
$page_text     $row['text'];
            
$page_keywords $row['keywords'];
            
$page_description $row['description'];
        }
    }
    if (isset (
$page_list) && mysql_num_rows ($page_list) < '1') {
        
header ("Status: 404 Not Found");
        
header ("HTTP/1.0 404 Not Found");
        
$page_text 'Страница не найдена.';
    }
}


// Выводим список страниц без подстраниц
function page_list () {
    
$menu_list mysql_query ("SELECT * FROM `" DB_PREFIX "_pages` WHERE position != '0' && position != '' && `pid` = '0' ORDER BY `position`");

    if (
mysql_num_rows ($menu_list) > '0') {
        while (
$rows mysql_fetch_array ($menu_list)) {
            
$id    $rows['id'];
            
$title $rows['title'];
            
$url   $rows['url'];
            echo 
'<p><a href="/index.php?section=pages&url=' $url '">' $title '</a><p>';
        }
    }
}


/*// Выводим список страниц
function page_list () {
    $menu_list = mysql_query ("SELECT * FROM `" . DB_PREFIX . "_pages` WHERE position != '0' && position != '' ORDER BY `position`");

    if (mysql_num_rows ($menu_list) > '0') {
        while ($rows = mysql_fetch_array ($menu_list)) {
        $data[] = array (
                'id'      => $rows['id'], 
                'pid'     => $rows['pid'], 
                'title'   => $rows['title'],  
                'url'     => $rows['url']
                );
        }

        $tree = array ();
        foreach ($data as $row) { 
            $tree[(int) $row['pid']][] = $row;
        }

        function treePrint ($tree, $pid=0) {
            if (empty ($tree[$pid]))
                return;
            echo '<ul>';
            foreach ($tree[$pid] as $k => $row) {
                echo '
                <li class="page-list-tree">
                    <div class="page-list-item">
                        <a href="/index.php?section=' . $rows['section'] . '&url=' . $row['url'] . '">' . $row['title'] . '</a>
                    </div>';
                if (isset ($tree[$row['id']]))
                    treePrint ($tree, $row['id']);
            echo '</li>';
            }
            echo '</ul>';
        }

        treePrint($tree);
    }
}*/

?>
Онлайн: 0
Реклама