Browse Source

+ обновление до версии v1.2.1

master
root 8 years ago
parent
commit
4e44896016
  1. 2
      README.md
  2. 81
      unicalendar/class.unicalendar.php
  3. 5
      unicalendar/lang/ru.txt
  4. 2
      unicalendar/module.php
  5. 8
      unicalendar/sql.php
  6. 56
      unicalendar/templates/admin_unicalendar_list.tpl

2
README.md

@ -14,6 +14,8 @@
##### Changelog:
##### 09.05.2017 - обновление модуля - версия 1.2.2 - добавлена проверка актуальности календарей при изменении количества документов в рубрике после создания календаря
##### 06.05.2017 - обновление модуля - версия 1.2.1 - оптимизация запросов БД для публичной части модуля
##### 05.05.2017 - обновление модуля - версия 1.2 - исправление ошибок, добавлено редактирование календарей, скрипты вынесены в секцию <head>

81
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&amp;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 "<tr class='noborder'><td align='center'><input type='checkbox' class='my-checkbox' name='u_chek".$v['Id']."' value='".$v['Id']."'></td>"."<td align='center'>".$v['Id']."</td>"."<td>".$v['document_title']."</td>"."<td align='center'>".$v['document_published'] = pretty_date(strftime(TIME_FORMAT, $v['document_published']))."</td></tr>";
}
}
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&amp;cp=' . SESSION);
exit;
}
}
?>

5
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 = "Выбрать/Снять все чекбоксы"
UCA_SELECT_ALL_INF = "Выбрать/Снять все чекбоксы"
UCA_ALERT_RELEV_YES = "Ок - данные календаря актуальны"
UCA_ALERT_RELEV_BAD = "Внимание - события в календаре неактуальны! На момент создания календаря документов в рубрике было больше, чем на текущий момент, это приводит к тому, что календарь содержит события, ведущие на страницу с ошибкой 404! Для устранения - пересохраните календарь!"
UCA_ALERT_RELEV_WAR = "Предупреждение - события в календаре неактуальны! На момент создания календаря документов в рубрике было меньше, чем на текущий момент. Для устранения - пересохраните календарь."

2
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'] = '<br>Модуль позволяет создавать различные календари событий. <br> Для вывода календаря используйте системный тег <strong>[mod_unicalendar:XXX]</strong>';
$modul['ModuleAutor'] = 'Repellent';
$modul['ModuleCopyright'] = '&copy; AVE.cms Team 2017';

8
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`";
?>

56
unicalendar/templates/admin_unicalendar_list.tpl

@ -39,6 +39,7 @@
<col width="1">
<col width="*">
<col width="*">
<col width="100">
<col width="184">
<col width="1">
<col width="1">
@ -49,6 +50,7 @@
<td>Id</td>
<td>{#UCA_TITLE#}</td>
<td>{#UCA_EVENTS#}</td>
<td>Актуальность</td>
<td>{#UCA_CP_TAG#}</td>
<td colspan="3">{#UCA_ACTIONS#}</td>
</tr>
@ -72,6 +74,11 @@
{/if}
</div>
</td>
<td align="center">
<input type="hidden" name="uca_count_js_{$unicalendar.id}" id="uca_count_js_{$unicalendar.id}" value="" />
<input type="hidden" name="uca_count_real_{$unicalendar.id}" id="uca_count_real_{$unicalendar.id}" value="" />
<div id="count_wrap_{$unicalendar.id}" class="toprightDir" style="" title=""></div>
</td>
<td align="center">
<div class="pr12" style="display: table; position: relative; text-align: right;">
<input style="width: 130px;" id="uca_{$unicalendar.id}" name="textfield" type="text" readonly value="[mod_unicalendar:{$unicalendar.id}]" size="17" />
@ -87,8 +94,49 @@
<a class="btn redBtn ConfirmDelete" dir="{#UCA_DELETE_UNICLN#}" name="{#UCA_DELETE_UNICLN_A#}" href="index.php?do=modules&action=modedit&mod=unicalendar&moduleaction=delunicalendar&id={$unicalendar.id}&cp={$sess}">{#UCA_DELETE#}</a>
</td>
</tr>
{/foreach}
{if !$unicalendars}
<script type="text/javascript">
// START ПРОВЕРКА АКТУАЛЬНОСТИ ДАННЫХ В КАЛЕНДАРЯХ
$.ajax({ldelim}
type: 'POST',
url: 'index.php?do=modules&action=modedit&mod=unicalendar&moduleaction=events_new&cp={$sess}',
async: true,
data: {ldelim}all_doc:'all_doc', tstamp: new Date().getTime(), r_id:'{$unicalendar.uca_rubric_id}' {if $unicalendar.uca_events == 2} , udoc_id:'AND {$unicalendar.uca_doc_id}' {/if} {rdelim},
success: function(data) {ldelim}
$('#uca_count_js_{$unicalendar.id}').val('');
$('#uca_count_real_{$unicalendar.id}').val('');
$('#uca_count_js_{$unicalendar.id}').val({$unicalendar.uca_rub_doc_count});
$('#uca_count_real_{$unicalendar.id}').val(data);
var uca_count_js_{$unicalendar.id} = $("#uca_count_js_{$unicalendar.id}").val();
var uca_count_real_{$unicalendar.id} = $("#uca_count_real_{$unicalendar.id}").val();
if (uca_count_js_{$unicalendar.id} == uca_count_real_{$unicalendar.id})// количество документов в рубрике равно количеству документов в файле
{ldelim}
$('#count_wrap_{$unicalendar.id}').prop('style', 'width:18px;height:18px;background:green;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px;');
$('#count_wrap_{$unicalendar.id}').prop('title', '{#UCA_ALERT_RELEV_YES#}');// выводим подсказку - Ок - данные календаря актуальны
{rdelim}
else if (uca_count_js_{$unicalendar.id} > uca_count_real_{$unicalendar.id})// количество документов в рубрике меньше количества документов в файле
{ldelim}
$('#count_wrap_{$unicalendar.id}').prop('style', 'width:18px;height:18px;background:red;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px;');
$('#count_wrap_{$unicalendar.id}').prop('title', '{#UCA_ALERT_RELEV_BAD#}');// выводим подсказку -Внимание - события в календаре неактуальны! На момент создания календаря документов в рубрике было больше, чем на текущий момент, это приводит к тому, что календарь содержит события, ведущие на страницу с ошибкой 404! Для устранения - пересохраните календарь!
{rdelim}
else if (uca_count_js_{$unicalendar.id} < uca_count_real_{$unicalendar.id})// количество документов в рубрике больше количества документов в файле
{ldelim}
$('#count_wrap_{$unicalendar.id}').prop('style', 'width:18px;height:18px;background:orange;-moz-border-radius:50px;-webkit-border-radius:50px;border-radius:50px;');
$('#count_wrap_{$unicalendar.id}').prop('title', '{#UCA_ALERT_RELEV_WAR#}');// Предупреждение - события в календаре неактуальны! На момент создания календаря документов в рубрике было меньше, чем на текущий момент. Для устранения - пересохраните календарь.
{rdelim};
{rdelim},
error: function(xhr, str){ldelim}
$.jGrowl("{#SaveError#}", {ldelim}
header: '{#SentData#}',
theme: 'error'
{rdelim});
{rdelim}
{rdelim}); // END ПРОВЕРКА АКТУАЛЬНОСТИ ДАННЫХ В КАЛЕНДАРЯХ
</script>
{/foreach}
{if !$unicalendars}
<tr>
<td colspan="6">
<ul class="messages">
@ -189,6 +237,10 @@
</div>
{/if}
<script>
// START Получаем значениe value выбранного option - События календаря
$('#uca_events_sel').change(function(){ldelim}
$('#uca_events').val('');

Loading…
Cancel
Save