From 41fa75bf807128ad66519f00653a056719cbae40 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 6 May 2017 14:21:37 +0500 Subject: [PATCH] =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=201.2.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + unicalendar/class.unicalendar.php | 288 +++++++++++++++++++----------- unicalendar/lang/ru.php | 2 +- unicalendar/module.php | 2 +- 4 files changed, 184 insertions(+), 110 deletions(-) diff --git a/README.md b/README.md index 95c8f0a..0e1a720 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,8 @@ ##### Changelog: +##### 06.05.2017 - обновление модуля - версия 1.2.1 - оптимизация запросов БД для публичной части модуля + ##### 05.05.2017 - обновление модуля - версия 1.2 - исправление ошибок, добавлено редактирование календарей, скрипты вынесены в секцию ##### 10.04.2017 - обновление модуля - версия 1.1.2 - fix вывода документа - ошибка 404. diff --git a/unicalendar/class.unicalendar.php b/unicalendar/class.unicalendar.php index 99c8f51..d227394 100644 --- a/unicalendar/class.unicalendar.php +++ b/unicalendar/class.unicalendar.php @@ -25,119 +25,22 @@ class Unicalendar { require(BASE_DIR . '/modules/unicalendar/lang/ru.php'); // загружаем файл ленгов для php переменных // подключаем JS скрипты и CSS файлы календаря в секцию head - $eventCalendar_css = ''; - $eventCalendar_theme_responsive_css = ''; - $moment_js = ''; - $jquery_eventCalendar_js = ''; - + $eventCalendar_css = ''; + $eventCalendar_theme_responsive_css = ''; + $moment_js = ''; + $jquery_eventCalendar_js = ''; $GLOBALS['user_header']['module_unicalendar_'] = $eventCalendar_css."\n".$eventCalendar_theme_responsive_css."\n".$moment_js."\n".$jquery_eventCalendar_js; - - global $AVE_DB, $AVE_Template; - $sql = $AVE_DB->Query(" - SELECT * - FROM " . PREFIX . "_module_unicalendar - WHERE id = '" . $id . "' - "); - $unicalendars = array(); - while ($row = $sql->FetchAssocArray()) - { - array_push($unicalendars, $row); - } - foreach ( $unicalendars as $k=>$v ) - { - $uevents = $v['uca_events']; - $urubric_id = $v['uca_rubric_id']; - $udoc_id = $v['uca_doc_id']; - $uca_day = $v['uca_day']; - $uca_scroll = $v['uca_scroll']; - $uca_link = $v['uca_link']; - $uca_descript = $v['uca_descript']; - } - // Если выбрали вывести все документы из заданной рубрики - документы с Id=1 (Главная) и 404 страница - выводиться не будут! - if ($uevents !='' && $uevents == '1'){ - $sql = $AVE_DB->Query(" - SELECT Id, document_alias, document_title, document_published, document_meta_description - FROM " . PREFIX . "_documents - WHERE rubric_id = '" . $urubric_id . "' AND Id !=1 && Id != '".PAGE_NOT_FOUND_ID."' - "); - $results = array(); - while ($row = $sql->FetchAssocArray()) - { - array_push($results, $row); - } - //получаем данные всех документов из заданной рубрики циклом, формируем строку JSON - foreach ( $results as $k=>$v ) - { - $uni_data .= "{ \"date\": \"".pretty_date(strftime('%Y-%m-%d %H:%M:%S', $v['document_published']))."\", \"title\": \"".$v['document_title']."\", \"description\": \"".$v['document_meta_description']."\", \"url\": \"".$v['document_alias']."\" },"; - } - $js_data_files = "$(function(){"."var data".$id." = [".$uni_data."]; $(\"#eventCalendar".$id."\").eventCalendar({jsonData: data".$id.", jsonDateFormat: \"human\", startWeekOnMonday: ".$uca_day.", eventsScrollable: ".$uca_scroll.", openEventInNewWindow: ".$uca_link.", dateFormat: \"dddd DD-MM-YYYY\", showDescription: ".$uca_descript.", locales: {locale: \"".$uca_locale."\", txt_noEvents: \"".$uca_no_events."\", txt_SpecificEvents_prev: \"\", txt_SpecificEvents_after: \"".$uca_real_events."\", txt_NextEvents: \"".$uca_next_events."\", txt_GoToEventUrl: \"".$uca_look_events."\", moment: {\"months\" : ".$uca_months_events.", \"monthsShort\" : ".$uca_monshort_events.", \"weekdays\" : ".$uca_weekdays_events.", \"weekdaysShort\" : ".$uca_wdayshort_events.", \"weekdaysMin\" : ".$uca_wdaymin_events."}}});});"; - - // Создаем js файл для календаря с названием dataXXX.js - где XXX = Id календаря - $fdir = "/modules/unicalendar/js/data-files/"; - mkdir(BASE_DIR . $fdir, 0777, true); - chmod(BASE_DIR . $fdir, 0777); - $df = fopen(BASE_DIR . "/modules/unicalendar/js/data-files/data".$id.".js", "w") - or die($uca_not_write_file);// ругаемся если нет прав на запись в директорию data-files ! - flock($df,2); - fwrite($df, $js_data_files); - flock($df,3); - fclose($df); - - // Записываем в секции подключение js файла с данными календаря, согласно Id этого календаря - $data_dir = "/modules/unicalendar/js/data-files"; - $filename = BASE_DIR .$data_dir."/data".$id.".js"; - if (file_exists($filename)) - { - $GLOBALS['user_header']['module_unicalendar_' . $id] = ''; // подключаем в секции js файл с данным , согласно Id календаря - } - else { - echo $uca_file_not_found.$id.".js"; // если не смогли подключить файл -выводим сообщение-подсказку - }; - - } - - // Если выбрали вывести выбранные документы из заданной рубрики - документы с Id=1 (Главная) и 404 страница - выводиться не будут! - if ($uevents !='' && $uevents == '2'){ - $sql = $AVE_DB->Query(" - SELECT Id, document_alias, document_title, document_published, document_meta_description - FROM " . PREFIX . "_documents - WHERE rubric_id = '" . $urubric_id . "' AND Id !=1 && Id != '".PAGE_NOT_FOUND_ID."' AND $udoc_id - "); - $results = array(); - while ($row = $sql->FetchAssocArray()) - { - array_push($results, $row); - } - //получаем данные выбранных документов из заданной рубрики циклом, формируем строку JSON - foreach ( $results as $k=>$v ) - { - $uni_data .= "{ \"date\": \"".pretty_date(strftime('%Y-%m-%d %H:%M:%S', $v['document_published']))."\", \"title\": \"".$v['document_title']."\", \"description\": \"".$v['document_meta_description']."\", \"url\": \"".$v['document_alias']."\" },"; - } - $js_data_files = "$(function(){"."var data".$id." = [".$uni_data."]; $(\"#eventCalendar".$id."\").eventCalendar({jsonData: data".$id.", jsonDateFormat: \"human\", startWeekOnMonday: ".$uca_day.", eventsScrollable: ".$uca_scroll.", openEventInNewWindow: ".$uca_link.", dateFormat: \"dddd DD-MM-YYYY\", showDescription: ".$uca_descript.", locales: {locale: \"".$uca_locale."\", txt_noEvents: \"".$uca_no_events."\", txt_SpecificEvents_prev: \"\", txt_SpecificEvents_after: \"".$uca_real_events."\", txt_NextEvents: \"".$uca_next_events."\", txt_GoToEventUrl: \"".$uca_look_events."\", moment: {\"months\" : ".$uca_months_events.", \"monthsShort\" : ".$uca_monshort_events.", \"weekdays\" : ".$uca_weekdays_events.", \"weekdaysShort\" : ".$uca_wdayshort_events.", \"weekdaysMin\" : ".$uca_wdaymin_events."}}});});"; - - // Создаем js файл для календаря с названием dataXXX.js - где XXX = Id календаря - $fdir = "/modules/unicalendar/js/data-files/"; - mkdir(BASE_DIR . $fdir, 0777, true); - chmod(BASE_DIR . $fdir, 0777); - $df = fopen(BASE_DIR . "/modules/unicalendar/js/data-files/data".$id.".js", "w") - or die($uca_not_write_file);// ругаемся если нет прав на запись в директорию data-files ! - flock($df,2); - fwrite($df, $js_data_files); - flock($df,3); - fclose($df); - - // Записываем в секции подключение js файла с данными календаря, согласно Id этого календаря + // подключаем в секции js файл с данным , согласно Id календаря $data_dir = "/modules/unicalendar/js/data-files"; $filename = BASE_DIR .$data_dir."/data".$id.".js"; if (file_exists($filename)) { - $GLOBALS['user_header']['module_unicalendar_' . $id] = ''; // подключаем в секции js файл с данным , согласно Id календаря + $GLOBALS['user_header']['module_unicalendar_' . $id] = ''; } else { echo $uca_file_not_found.$id.".js"; // если не смогли подключить файл -выводим сообщение-подсказку }; - } - + global $AVE_Template; $AVE_Template->assign('id', $id); $AVE_Template->display($tpl_dir . 'unicalendar.tpl'); } @@ -234,6 +137,91 @@ class Unicalendar uca_scroll = '" . $_POST['uca_scroll'] . "', uca_descript = '" . $_POST['uca_descript'] . "' "); + + // Получаем обновленные данные календаря + require(BASE_DIR . '/modules/unicalendar/lang/ru.php'); // загружаем файл ленгов для php переменных + $sql = $AVE_DB->Query(" + SELECT * + FROM " . PREFIX . "_module_unicalendar + WHERE id = id + "); + $unicalendars = array(); + while ($row = $sql->FetchAssocArray()) + { + array_push($unicalendars, $row); + } + foreach ( $unicalendars as $k=>$v ) + { + $uca_id = $v['id']; + $uevents = $v['uca_events']; + $urubric_id = $v['uca_rubric_id']; + $udoc_id = $v['uca_doc_id']; + $uca_day = $v['uca_day']; + $uca_scroll = $v['uca_scroll']; + $uca_link = $v['uca_link']; + $uca_descript = $v['uca_descript']; + } + // Если выбрали вывести все документы из заданной рубрики - документы с Id=1 (Главная) и 404 страница - выводиться не будут! + if ($uevents !='' && $uevents == '1'){ + $sql = $AVE_DB->Query(" + SELECT Id, document_alias, document_title, document_published, document_meta_description + FROM " . PREFIX . "_documents + WHERE rubric_id = '" . $urubric_id . "' AND Id !=1 && Id != '".PAGE_NOT_FOUND_ID."' + "); + $results = array(); + while ($row = $sql->FetchAssocArray()) + { + array_push($results, $row); + } + //получаем данные всех документов из заданной рубрики циклом, формируем строку JSON + foreach ( $results as $k=>$v ) + { + $uni_data .= "{ \"date\": \"".pretty_date(strftime('%Y-%m-%d %H:%M:%S', $v['document_published']))."\", \"title\": \"".$v['document_title']."\", \"description\": \"".$v['document_meta_description']."\", \"url\": \"".$v['document_alias']."\" },"; + } + $js_data_files = "$(function(){"."var data".$uca_id." = [".$uni_data."]; $(\"#eventCalendar".$uca_id."\").eventCalendar({jsonData: data".$uca_id.", jsonDateFormat: \"human\", startWeekOnMonday: ".$uca_day.", eventsScrollable: ".$uca_scroll.", openEventInNewWindow: ".$uca_link.", dateFormat: \"dddd DD-MM-YYYY\", showDescription: ".$uca_descript.", locales: {locale: \"".$uca_locale."\", txt_noEvents: \"".$uca_no_events."\", txt_SpecificEvents_prev: \"\", txt_SpecificEvents_after: \"".$uca_real_events."\", txt_NextEvents: \"".$uca_next_events."\", txt_GoToEventUrl: \"".$uca_look_events."\", moment: {\"months\" : ".$uca_months_events.", \"monthsShort\" : ".$uca_monshort_events.", \"weekdays\" : ".$uca_weekdays_events.", \"weekdaysShort\" : ".$uca_wdayshort_events.", \"weekdaysMin\" : ".$uca_wdaymin_events."}}});});"; + + // Создаем js файл для календаря с названием dataXXX.js - где XXX = Id календаря + $fdir = "/modules/unicalendar/js/data-files/"; + mkdir(BASE_DIR . $fdir, 0777, true); + chmod(BASE_DIR . $fdir, 0777); + $df = fopen(BASE_DIR . "/modules/unicalendar/js/data-files/data".$uca_id.".js", "w") + or die($uca_not_write_file);// ругаемся если нет прав на запись в директорию data-files ! + flock($df,2); + fwrite($df, $js_data_files); + flock($df,3); + fclose($df); + } + + // Если выбрали вывести все документы из заданной рубрики - документы с Id=1 (Главная) и 404 страница - выводиться не будут! + if ($uevents !='' && $uevents == '2'){ + $sql = $AVE_DB->Query(" + SELECT Id, document_alias, document_title, document_published, document_meta_description + FROM " . PREFIX . "_documents + WHERE rubric_id = '" . $urubric_id . "' AND Id !=1 && Id != '".PAGE_NOT_FOUND_ID."' AND $udoc_id + "); + $results = array(); + while ($row = $sql->FetchAssocArray()) + { + array_push($results, $row); + } + //получаем данные всех документов из заданной рубрики циклом, формируем строку JSON + foreach ( $results as $k=>$v ) + { + $uni_data .= "{ \"date\": \"".pretty_date(strftime('%Y-%m-%d %H:%M:%S', $v['document_published']))."\", \"title\": \"".$v['document_title']."\", \"description\": \"".$v['document_meta_description']."\", \"url\": \"".$v['document_alias']."\" },"; + } + $js_data_files = "$(function(){"."var data".$uca_id." = [".$uni_data."]; $(\"#eventCalendar".$uca_id."\").eventCalendar({jsonData: data".$uca_id.", jsonDateFormat: \"human\", startWeekOnMonday: ".$uca_day.", eventsScrollable: ".$uca_scroll.", openEventInNewWindow: ".$uca_link.", dateFormat: \"dddd DD-MM-YYYY\", showDescription: ".$uca_descript.", locales: {locale: \"".$uca_locale."\", txt_noEvents: \"".$uca_no_events."\", txt_SpecificEvents_prev: \"\", txt_SpecificEvents_after: \"".$uca_real_events."\", txt_NextEvents: \"".$uca_next_events."\", txt_GoToEventUrl: \"".$uca_look_events."\", moment: {\"months\" : ".$uca_months_events.", \"monthsShort\" : ".$uca_monshort_events.", \"weekdays\" : ".$uca_weekdays_events.", \"weekdaysShort\" : ".$uca_wdayshort_events.", \"weekdaysMin\" : ".$uca_wdaymin_events."}}});});"; + + // Создаем js файл для календаря с названием dataXXX.js - где XXX = Id календаря + $fdir = "/modules/unicalendar/js/data-files/"; + mkdir(BASE_DIR . $fdir, 0777, true); + chmod(BASE_DIR . $fdir, 0777); + $df = fopen(BASE_DIR . "/modules/unicalendar/js/data-files/data".$uca_id.".js", "w") + or die($uca_not_write_file);// ругаемся если нет прав на запись в директорию data-files ! + flock($df,2); + fwrite($df, $js_data_files); + flock($df,3); + fclose($df); + } } header('Location:index.php?do=modules&action=modedit&mod=unicalendar&moduleaction=1'. $alert); exit; @@ -319,10 +307,94 @@ class Unicalendar uca_descript = '" . $_POST['uca_descript'] . "' WHERE id = '" . $unicalendar_id . "' "); - $as = array(); - $as->$_POST['uca_title']; - $as->$_POST['uca_rubric_title']; - echo json_encode($as); + $as = array(); + $as->$_POST['uca_title']; + $as->$_POST['uca_rubric_title']; + echo json_encode($as); + // Получаем обновленные данные календаря + require(BASE_DIR . '/modules/unicalendar/lang/ru.php'); // загружаем файл ленгов для php переменных + $sql = $AVE_DB->Query(" + SELECT * + FROM " . PREFIX . "_module_unicalendar + WHERE id = '" . $unicalendar_id . "' + "); + $unicalendars = array(); + while ($row = $sql->FetchAssocArray()) + { + array_push($unicalendars, $row); + } + foreach ( $unicalendars as $k=>$v ) + { + $uevents = $v['uca_events']; + $urubric_id = $v['uca_rubric_id']; + $udoc_id = $v['uca_doc_id']; + $uca_day = $v['uca_day']; + $uca_scroll = $v['uca_scroll']; + $uca_link = $v['uca_link']; + $uca_descript = $v['uca_descript']; + } + // Если выбрали вывести все документы из заданной рубрики - документы с Id=1 (Главная) и 404 страница - выводиться не будут! + if ($uevents !='' && $uevents == '1'){ + $sql = $AVE_DB->Query(" + SELECT Id, document_alias, document_title, document_published, document_meta_description + FROM " . PREFIX . "_documents + WHERE rubric_id = '" . $urubric_id . "' AND Id !=1 && Id != '".PAGE_NOT_FOUND_ID."' + "); + $results = array(); + while ($row = $sql->FetchAssocArray()) + { + array_push($results, $row); + } + //получаем данные всех документов из заданной рубрики циклом, формируем строку JSON + foreach ( $results as $k=>$v ) + { + $uni_data .= "{ \"date\": \"".pretty_date(strftime('%Y-%m-%d %H:%M:%S', $v['document_published']))."\", \"title\": \"".$v['document_title']."\", \"description\": \"".$v['document_meta_description']."\", \"url\": \"".$v['document_alias']."\" },"; + } + $js_data_files = "$(function(){"."var data".$unicalendar_id." = [".$uni_data."]; $(\"#eventCalendar".$unicalendar_id."\").eventCalendar({jsonData: data".$unicalendar_id.", jsonDateFormat: \"human\", startWeekOnMonday: ".$uca_day.", eventsScrollable: ".$uca_scroll.", openEventInNewWindow: ".$uca_link.", dateFormat: \"dddd DD-MM-YYYY\", showDescription: ".$uca_descript.", locales: {locale: \"".$uca_locale."\", txt_noEvents: \"".$uca_no_events."\", txt_SpecificEvents_prev: \"\", txt_SpecificEvents_after: \"".$uca_real_events."\", txt_NextEvents: \"".$uca_next_events."\", txt_GoToEventUrl: \"".$uca_look_events."\", moment: {\"months\" : ".$uca_months_events.", \"monthsShort\" : ".$uca_monshort_events.", \"weekdays\" : ".$uca_weekdays_events.", \"weekdaysShort\" : ".$uca_wdayshort_events.", \"weekdaysMin\" : ".$uca_wdaymin_events."}}});});"; + + // Создаем js файл для календаря с названием dataXXX.js - где XXX = Id календаря + $fdir = "/modules/unicalendar/js/data-files/"; + mkdir(BASE_DIR . $fdir, 0777, true); + chmod(BASE_DIR . $fdir, 0777); + $df = fopen(BASE_DIR . "/modules/unicalendar/js/data-files/data".$unicalendar_id.".js", "w") + or die($uca_not_write_file);// ругаемся если нет прав на запись в директорию data-files ! + flock($df,2); + fwrite($df, $js_data_files); + flock($df,3); + fclose($df); + } + + // Если выбрали вывести выбранные документы из заданной рубрики - документы с Id=1 (Главная) и 404 страница - выводиться не будут! + if ($uevents !='' && $uevents == '2'){ + $sql = $AVE_DB->Query(" + SELECT Id, document_alias, document_title, document_published, document_meta_description + FROM " . PREFIX . "_documents + WHERE rubric_id = '" . $urubric_id . "' AND Id !=1 && Id != '".PAGE_NOT_FOUND_ID."' AND $udoc_id + "); + $results = array(); + while ($row = $sql->FetchAssocArray()) + { + array_push($results, $row); + } + //получаем данные выбранных документов из заданной рубрики циклом, формируем строку JSON + foreach ( $results as $k=>$v ) + { + $uni_data .= "{ \"date\": \"".pretty_date(strftime('%Y-%m-%d %H:%M:%S', $v['document_published']))."\", \"title\": \"".$v['document_title']."\", \"description\": \"".$v['document_meta_description']."\", \"url\": \"".$v['document_alias']."\" },"; + } + $js_data_files = "$(function(){"."var data".$unicalendar_id." = [".$uni_data."]; $(\"#eventCalendar".$unicalendar_id."\").eventCalendar({jsonData: data".$unicalendar_id.", jsonDateFormat: \"human\", startWeekOnMonday: ".$uca_day.", eventsScrollable: ".$uca_scroll.", openEventInNewWindow: ".$uca_link.", dateFormat: \"dddd DD-MM-YYYY\", showDescription: ".$uca_descript.", locales: {locale: \"".$uca_locale."\", txt_noEvents: \"".$uca_no_events."\", txt_SpecificEvents_prev: \"\", txt_SpecificEvents_after: \"".$uca_real_events."\", txt_NextEvents: \"".$uca_next_events."\", txt_GoToEventUrl: \"".$uca_look_events."\", moment: {\"months\" : ".$uca_months_events.", \"monthsShort\" : ".$uca_monshort_events.", \"weekdays\" : ".$uca_weekdays_events.", \"weekdaysShort\" : ".$uca_wdayshort_events.", \"weekdaysMin\" : ".$uca_wdaymin_events."}}});});"; + + // Создаем js файл для календаря с названием dataXXX.js - где XXX = Id календаря + $fdir = "/modules/unicalendar/js/data-files/"; + mkdir(BASE_DIR . $fdir, 0777, true); + chmod(BASE_DIR . $fdir, 0777); + $df = fopen(BASE_DIR . "/modules/unicalendar/js/data-files/data".$unicalendar_id.".js", "w") + or die($uca_not_write_file);// ругаемся если нет прав на запись в директорию data-files ! + flock($df,2); + fwrite($df, $js_data_files); + flock($df,3); + fclose($df); + } + exit; } diff --git a/unicalendar/lang/ru.php b/unicalendar/lang/ru.php index 37bfab6..8cb35c7 100644 --- a/unicalendar/lang/ru.php +++ b/unicalendar/lang/ru.php @@ -12,5 +12,5 @@ $uca_weekdays_events = "[ \"Воскресенье\", \"Понедельник\ $uca_wdayshort_events = "[ \"Вс\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\" ]"; $uca_wdaymin_events = "[ \"Вс\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\" ]"; $uca_not_write_file = "Не могу записать файл. Проверьте права на запись директории data-files (Путь: /modules/unicalendar/js/data-files)"; -$uca_file_not_found = "Файл не найден! Проверьте в директории /modules/unicalendar/js/data-files/ наличие файла data"; +$uca_file_not_found = "Файл не найден! Возможно календарь был удален, но в документе остался тег несуществующего более календаря, так же проверьте в директории /modules/unicalendar/js/data-files/ наличие файла data"; ?> \ No newline at end of file diff --git a/unicalendar/module.php b/unicalendar/module.php index e6747c2..a20d7a8 100644 --- a/unicalendar/module.php +++ b/unicalendar/module.php @@ -14,7 +14,7 @@ if (defined('ACP')) { $modul['ModuleName'] = 'Универсальный календарь событий'; $modul['ModuleSysName'] = 'unicalendar'; - $modul['ModuleVersion'] = '1.2'; + $modul['ModuleVersion'] = '1.2.1'; $modul['ModuleDescription'] = '
Модуль позволяет создавать различные календари событий.
Для вывода календаря используйте системный тег [mod_unicalendar:XXX]'; $modul['ModuleAutor'] = 'Repellent'; $modul['ModuleCopyright'] = '© AVE.cms Team 2017';