diff --git a/README.md b/README.md index 0e1a720..9af6e12 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,8 @@ ##### Changelog: +##### 09.05.2017 - обновление модуля - версия 1.2.2 - добавлена проверка актуальности календарей при изменении количества документов в рубрике после создания календаря + ##### 06.05.2017 - обновление модуля - версия 1.2.1 - оптимизация запросов БД для публичной части модуля ##### 05.05.2017 - обновление модуля - версия 1.2 - исправление ошибок, добавлено редактирование календарей, скрипты вынесены в секцию diff --git a/unicalendar/class.unicalendar.php b/unicalendar/class.unicalendar.php index d227394..98afc32 100644 --- a/unicalendar/class.unicalendar.php +++ b/unicalendar/class.unicalendar.php @@ -56,7 +56,7 @@ class Unicalendar * @param string $tpl_dir - путь к папке с шаблонами модуля */ function unicalendarList($tpl_dir) - { + { global $AVE_DB, $AVE_Template; $unicalendars = array(); @@ -99,9 +99,11 @@ class Unicalendar { $AVE_Template->assign('alert', htmlspecialchars(stripslashes($_REQUEST['alert']))); } + $AVE_Template->assign('unicalendars', $unicalendars); $AVE_Template->assign('formaction', 'index.php?do=modules&action=modedit&mod=unicalendar&moduleaction=new&sub=save&cp=' . SESSION); $AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'admin_unicalendar_list.tpl')); + } /** @@ -177,8 +179,19 @@ class Unicalendar 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']."\" },"; + $rubric_count .= $v['Id'].","; } $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."}}});});"; + + // считаем количество документов в категории на момент создания календаря и записываем значение в БД + $rubric_count = count(explode(",", chop($rubric_count, ' ,'))); + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_module_unicalendar + SET + uca_rub_doc_count = '" . $rubric_count . "' + WHERE id = '" . $uca_id . "' + "); // Создаем js файл для календаря с названием dataXXX.js - где XXX = Id календаря $fdir = "/modules/unicalendar/js/data-files/"; @@ -192,25 +205,36 @@ class Unicalendar fclose($df); } - // Если выбрали вывести все документы из заданной рубрики - документы с Id=1 (Главная) и 404 страница - выводиться не будут! + // Если выбрали вывести выбранные документы из заданной рубрики - документы с 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 + 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 + //получаем данные выбранных документов из заданной рубрики циклом, формируем строку 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']."\" },"; + $rubric_count .= $v['Id'].","; } $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."}}});});"; + // считаем количество выбранных документов в категории на момент создания календаря и записываем значение в БД + $rubric_count = count(explode(",", chop($rubric_count, ' ,'))); + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_module_unicalendar + SET + uca_rub_doc_count = '" . $rubric_count . "' + WHERE id = '" . $uca_id . "' + "); + // Создаем js файл для календаря с названием dataXXX.js - где XXX = Id календаря $fdir = "/modules/unicalendar/js/data-files/"; mkdir(BASE_DIR . $fdir, 0777, true); @@ -269,7 +293,7 @@ class Unicalendar $sql = $AVE_DB->Query(" SELECT Id FROM " . PREFIX . "_documents - WHERE rubric_id = '" . $urubric_id . "' AND Id !=1 && Id != '".PAGE_NOT_FOUND_ID."' AND $udoc_id + WHERE rubric_id = '" . $urubric_id . "' AND Id !=1 && Id != '".PAGE_NOT_FOUND_ID."' AND ".$udoc_id." "); $check_docs = array(); while ($row = $sql->FetchAssocArray()) @@ -284,7 +308,6 @@ class Unicalendar } - /** * Сохранение календаря после редактирования * @param int $unicalendar_id - идентификатор календаря @@ -349,8 +372,19 @@ class Unicalendar 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']."\" },"; + $rubric_count .= $v['Id'].","; } $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."}}});});"; + + // считаем количество документов в категории на момент создания календаря и записываем значение в БД + $rubric_count = count(explode(",", chop($rubric_count, ' ,'))); + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_module_unicalendar + SET + uca_rub_doc_count = '" . $rubric_count . "' + WHERE id = '" . $unicalendar_id . "' + "); // Создаем js файл для календаря с названием dataXXX.js - где XXX = Id календаря $fdir = "/modules/unicalendar/js/data-files/"; @@ -369,7 +403,7 @@ class Unicalendar $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 + WHERE rubric_id = '" . $urubric_id . "' AND Id !=1 && Id != '".PAGE_NOT_FOUND_ID."' AND ".$udoc_id." "); $results = array(); while ($row = $sql->FetchAssocArray()) @@ -380,9 +414,20 @@ class Unicalendar 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']."\" },"; + $rubric_count .= $v['Id'].","; } $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."}}});});"; + // считаем количество выбранных документов в категории на момент создания календаря и записываем значение в БД + $rubric_count = count(explode(",", chop($rubric_count, ' ,'))); + $AVE_DB->Query(" + UPDATE + " . PREFIX . "_module_unicalendar + SET + uca_rub_doc_count = '" . $rubric_count . "' + WHERE id = '" . $unicalendar_id . "' + "); + // Создаем js файл для календаря с названием dataXXX.js - где XXX = Id календаря $fdir = "/modules/unicalendar/js/data-files/"; mkdir(BASE_DIR . $fdir, 0777, true); @@ -439,6 +484,27 @@ class Unicalendar echo ""."".$v['Id'].""."".$v['document_title'].""."".$v['document_published'] = pretty_date(strftime(TIME_FORMAT, $v['document_published'])).""; } } + if (isset($_POST['all_doc'])) // если пришел запрос-проверка актуальности календаря (не будет выведен документ с Id=1 это Главная страница и документ Ошибка 404) + { + global $AVE_DB; + $sql = $AVE_DB->Query(" + SELECT Id + FROM " . PREFIX . "_documents + WHERE rubric_id = '" . $_POST['r_id'] . "' AND Id !=1 && Id != '".PAGE_NOT_FOUND_ID."' ".$_POST['udoc_id']." + "); + $all_doc_rub = array(); + while ($row = $sql->FetchAssocArray()) + { + array_push($all_doc_rub, $row); + } + foreach ( $all_doc_rub as $k=>$v ) + { + $doc_count .= $v['Id'].","; + } + $doc_count = count(explode(",", chop($doc_count, ' ,'))); + echo $doc_count; + $sql->Close(); + } exit; } @@ -461,6 +527,5 @@ class Unicalendar header('Location:index.php?do=modules&action=modedit&mod=unicalendar&moduleaction=1&cp=' . SESSION); exit; } - } ?> \ No newline at end of file diff --git a/unicalendar/lang/ru.txt b/unicalendar/lang/ru.txt index 416d11f..a32e13c 100644 --- a/unicalendar/lang/ru.txt +++ b/unicalendar/lang/ru.txt @@ -50,4 +50,7 @@ UCA_REFRECH_DOC_RUBRIC = "Обновить список документов и UCA_ID_INF = "Id" UCA_TITLE_INF = "Название документа" UCA_DATE_INF = "Дата создания" -UCA_SELECT_ALL_INF = "Выбрать/Снять все чекбоксы" \ No newline at end of file +UCA_SELECT_ALL_INF = "Выбрать/Снять все чекбоксы" +UCA_ALERT_RELEV_YES = "Ок - данные календаря актуальны" +UCA_ALERT_RELEV_BAD = "Внимание - события в календаре неактуальны! На момент создания календаря документов в рубрике было больше, чем на текущий момент, это приводит к тому, что календарь содержит события, ведущие на страницу с ошибкой 404! Для устранения - пересохраните календарь!" +UCA_ALERT_RELEV_WAR = "Предупреждение - события в календаре неактуальны! На момент создания календаря документов в рубрике было меньше, чем на текущий момент. Для устранения - пересохраните календарь." \ No newline at end of file diff --git a/unicalendar/module.php b/unicalendar/module.php index a20d7a8..19b9746 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.1'; + $modul['ModuleVersion'] = '1.2.2'; $modul['ModuleDescription'] = '
Модуль позволяет создавать различные календари событий.
Для вывода календаря используйте системный тег [mod_unicalendar:XXX]'; $modul['ModuleAutor'] = 'Repellent'; $modul['ModuleCopyright'] = '© AVE.cms Team 2017'; diff --git a/unicalendar/sql.php b/unicalendar/sql.php index 65e7958..90d4f49 100644 --- a/unicalendar/sql.php +++ b/unicalendar/sql.php @@ -29,6 +29,7 @@ $module_sql_install[] = "CREATE TABLE `CPPREFIX_module_unicalendar` ( `uca_rubric_id` varchar(10) NOT NULL, `uca_rubric_title` varchar(255) NOT NULL, `uca_doc_id` varchar(1024) NOT NULL, + `uca_rub_doc_count` int(10) NOT NULL, `uca_link` varchar(10) NOT NULL, `uca_day` varchar(10) NOT NULL, `uca_scroll` varchar(10) NOT NULL, @@ -58,6 +59,11 @@ $module_sql_update[] = " DROP IF EXISTS `uca_user_descript`, DROP IF EXISTS `uca_user_link`, DROP IF EXISTS `uca_user_time` - "; + "; + // Обновление таблицы в версии модуля v1.2.2 +$module_sql_update[] = " + ALTER TABLE `CPPREFIX_module_unicalendar` + ADD IF NOT EXISTS `uca_rub_doc_count` int(10) NOT NULL + AFTER `uca_doc_id`"; ?> \ No newline at end of file diff --git a/unicalendar/templates/admin_unicalendar_list.tpl b/unicalendar/templates/admin_unicalendar_list.tpl index 305a1ee..0f305ce 100644 --- a/unicalendar/templates/admin_unicalendar_list.tpl +++ b/unicalendar/templates/admin_unicalendar_list.tpl @@ -39,6 +39,7 @@ + @@ -49,6 +50,7 @@ Id {#UCA_TITLE#} {#UCA_EVENTS#} + Актуальность {#UCA_CP_TAG#} {#UCA_ACTIONS#} @@ -72,6 +74,11 @@ {/if} + + + +
+
@@ -87,8 +94,49 @@ {#UCA_DELETE#} - {/foreach} - {if !$unicalendars} + + + + {/foreach} + {if !$unicalendars}
{/if}