Browse Source

обновление до версии 1.2.3

master
root 8 years ago
parent
commit
35dba77337
  1. 2
      README.md
  2. 50
      unicalendar/class.unicalendar.php
  3. 5
      unicalendar/lang/ru.txt
  4. 2
      unicalendar/module.php
  5. 7
      unicalendar/sql.php
  6. 14
      unicalendar/templates/admin_unicalendar_edit.tpl
  7. 77
      unicalendar/templates/admin_unicalendar_list.tpl

2
README.md

@ -14,6 +14,8 @@
##### Changelog:
##### 14.05.2017 - обновление модуля - версия 1.2.3 - изменен алгоритм проверки актуальности календарей
##### 09.05.2017 - обновление модуля - версия 1.2.2 - добавлена проверка актуальности календарей при изменении количества документов в рубрике после создания календаря
##### 06.05.2017 - обновление модуля - версия 1.2.1 - оптимизация запросов БД для публичной части модуля

50
unicalendar/class.unicalendar.php

@ -142,7 +142,7 @@ class Unicalendar
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_module_unicalendar
WHERE id = id
WHERE id = '".$AVE_DB->InsertId()."'
");
$unicalendars = array();
while ($row = $sql->FetchAssocArray())
@ -176,17 +176,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'].",";
$rubric_count .= $v['Id']." OR 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, ' ,')));
// Получаем Id документов в категории на момент создания календаря и записываем значение в БД
$rubric_count ='Id='.$rubric_count;
$rubric_count = chop($rubric_count, ' OR Id=');
$AVE_DB->Query("
UPDATE
" . PREFIX . "_module_unicalendar
SET
uca_rub_doc_count = '" . $rubric_count . "'
uca_doc_id = '" . $rubric_count . "'
WHERE id = '" . $uca_id . "'
");
@ -222,16 +224,6 @@ class Unicalendar
}
$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);
@ -369,17 +361,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'].",";
$rubric_count .= $v['Id']." OR 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, ' ,')));
// Получаем Id документов в категории на момент создания календаря и записываем значение в БД
$rubric_count ='Id='.$rubric_count;
$rubric_count = chop($rubric_count, ' OR Id=');
$AVE_DB->Query("
UPDATE
" . PREFIX . "_module_unicalendar
SET
uca_rub_doc_count = '" . $rubric_count . "'
uca_doc_id = '" . $rubric_count . "'
WHERE id = '" . $unicalendar_id . "'
");
@ -415,16 +409,6 @@ class Unicalendar
}
$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);
@ -481,13 +465,13 @@ 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)
if (isset($_POST['check_rel'])) // если пришел запрос-проверка актуальности календаря (не будет выведен документ с 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']."
WHERE rubric_id = '" . $_POST['r_id'] . "' AND Id !=1 && Id != '".PAGE_NOT_FOUND_ID."'
");
$all_doc_rub = array();
while ($row = $sql->FetchAssocArray())
@ -498,9 +482,7 @@ class Unicalendar
{
$doc_count .= $v['Id'].",";
}
$doc_count = count(explode(",", chop($doc_count, ' ,')));
echo $doc_count;
$sql->Close();
echo $doc_count = chop($doc_count, ' ,');
}
exit;
}

5
unicalendar/lang/ru.txt

@ -53,5 +53,8 @@ UCA_DATE_INF = "Дата создания"
UCA_SELECT_ALL_INF = "Выбрать/Снять все чекбоксы"
UCA_RELEV = "Актуальность"
UCA_ALERT_RELEV_YES = "Ок - данные календаря актуальны"
UCA_ALERT_RELEV_BAD = "Внимание - события в календаре неактуальны! На момент создания календаря документов в рубрике было больше, чем на текущий момент, это приводит к тому, что календарь содержит события, ведущие на страницу с ошибкой 404! Для устранения - пересохраните календарь!"
UCA_ALERT_RELEV_BAD = "Внимание - события в календаре неактуальны! На момент создания календаря документов в рубрике было больше, чем на текущий момент, это приводит к тому, что календарь содержит события, ведущие на страницу с ошибкой 404! Для устранения - пересохраните/отредактируйте календарь!<br> <strong style=\'color:orange\'>ОТЧЕТ:</strong><br>В рубрике :<br> "
UCA_ALERT_RELEV_WAR = "Предупреждение - события в календаре неактуальны! На момент создания календаря документов в рубрике было меньше, чем на текущий момент. Для устранения - пересохраните календарь."
UCA_ALERT_RELEV_BAD_SD = "Внимание - события в календаре неактуальны! На момент создания календаря был(и) выбран(ы) документ(ы), которые(ых) на текущий момент не существует в рубрике. Это приводит к тому, что календарь содержит события, ведущие на страницу с ошибкой 404! Для устранения - пересохраните/отредактируйте календарь!<br> <strong style=\'color:orange\'>ОТЧЕТ:</strong><br>В рубрике :<br> "
UCA_ALERT_RELEV_BAD_SE = "<strong style=\'color:orange\'>,</strong><br> документ(ы) с <br><strong style=\'color:orange\'>Id = </strong>"
UCA_ALERT_RELEV_BAD_SF = "<strong style=\'color:orange\'>&nbsp;&nbsp;не найден(ы) !</strong>"

2
unicalendar/module.php

@ -14,7 +14,7 @@ if (defined('ACP'))
{
$modul['ModuleName'] = 'Универсальный календарь событий';
$modul['ModuleSysName'] = 'unicalendar';
$modul['ModuleVersion'] = '1.2.2';
$modul['ModuleVersion'] = '1.2.3';
$modul['ModuleDescription'] = '<br>Модуль позволяет создавать различные календари событий. <br> Для вывода календаря используйте системный тег <strong>[mod_unicalendar:XXX]</strong>';
$modul['ModuleAutor'] = 'Repellent';
$modul['ModuleCopyright'] = '&copy; AVE.cms Team 2017';

7
unicalendar/sql.php

@ -26,7 +26,6 @@ $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,
@ -57,9 +56,9 @@ $module_sql_update[] = "
DROP IF EXISTS `uca_user_link`,
DROP IF EXISTS `uca_user_time`
";
// Обновление таблицы в версии модуля v1.2.2
// Обновление таблицы в версии модуля v1.2.3
$module_sql_update[] = "
ALTER TABLE `CPPREFIX_module_unicalendar`
ADD IF NOT EXISTS `uca_rub_doc_count` int(10) NOT NULL
AFTER `uca_doc_id`";
DROP IF EXISTS `uca_rub_doc_count`
";
?>

14
unicalendar/templates/admin_unicalendar_edit.tpl

@ -218,12 +218,22 @@
{/foreach}
<script>
{if $unicalendars.uca_events == 2}// START Если событиями календаря являются выбранные доки из рубрики
// START получаем данные активных чекбоксов-документов
{foreach from=$check_docs item=check_docs}
$("#inp_doc_{$check_docs.Id}").attr('checked', 'checked' );// активируем чекбоксы в списке документов
{/foreach}
// END получаем данные активных чекбоксов-документов
// START пишем значение активных чекбоксов в input, т.к. календарь мог стать не актуальным с момента его создания до момента редактирования
var values = [];
$("input:checkbox.my-checkbox").filter(':checked').each(function() {ldelim}
values.push(this.value);
{rdelim});
$('#uca_doc_id').val("Id="+values.join(' OR Id=')+" ");
// END пишем значение активных чекбоксов в input, т.к. календарь мог стать не актуальным с момента его создания до момента редактирования
// START считаем активные чекбоксы при открытии страницы и если находим только один активный чекбокс выбранного документа - запрещаем редактирование
var count = $(':checkbox.my-checkbox:checked').length;// ведем подсчет отмеченных чекбоксов
if (count <= '1'){ldelim}//если количество чекбоксов документов <= 1
@ -267,6 +277,10 @@
$('#uca_doc_id').val("Id="+values.join(' OR Id=')+" ");
{rdelim});
{rdelim});// END CHECK - отмечаем - снимаем чекбоксы документов по одному и пишем в input значение
{/if}// END Если событиями календаря являются выбранные доки из рубрики
// START обнуляем значение value у input Название календаря при событии focus
$('#uca_title').focus(function(){ldelim}
$('#uca_title').val('');

77
unicalendar/templates/admin_unicalendar_list.tpl

@ -69,8 +69,8 @@
</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="" />
{* <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">
@ -93,29 +93,43 @@
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},
data: {ldelim}check_rel:'check_rel', tstamp: new Date().getTime(), r_id:'{$unicalendar.uca_rubric_id}', udoc_id:'AND {$unicalendar.uca_doc_id}'{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})// количество документов в рубрике равно количеству документов в файле
var old_array = '';// объявляем переменную
var uca_trim_id = 'Id=';// объявляем переменную и пишем в нее значение
var uca_trim_or = ' OR ';// объявляем переменную и пишем в нее значение
var uca_trim_br = ' ';// объявляем переменную и пишем в нее значение
var count_old_array = '';// объявляем переменную
var count_new_array = '';// объявляем переменную
old_array1 = str_replace(uca_trim_id, '', '{$unicalendar.uca_doc_id}'); // вырезаем из строки Id=
old_array2 = str_replace(uca_trim_or, ',', old_array1);// вырезаем из строки OR
old_array3 = str_replace(uca_trim_br, '', old_array2);// вырезаем из строки пробелы
old_array = old_array3.split(',');// создаем массив из данных календаря
var new_array = data.split(',');// создаем массив из данных пришедших из БД по запросу "актуальность календарей"
var diff = $(old_array).not(new_array).get(); // сравниваем массивы и записываем в переменную ОТСУТСТВУЮЩИЕ Id документов, которые содержит календарь
count_old_array = old_array.length;// количество элементов в массиве при создании календаря
count_new_array = new_array.length;// количество элементов в массиве в текущий момент
if (count_old_array == count_new_array && diff == '' {if $unicalendar.uca_events == 2} || count_old_array < count_new_array && diff == '' {/if})// если условие истинно - календарь актуален
{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})// количество документов в рубрике меньше количества документов в файле
else if (count_old_array == count_new_array && diff != '' || count_old_array != count_new_array && diff != '')
{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})// количество документов в рубрике больше количества документов в файле
{if $unicalendar.uca_events == 1}
$('#count_wrap_{$unicalendar.id}').prop('title', '{#UCA_ALERT_RELEV_BAD#}<strong style=\'color:orange\'>{$unicalendar.uca_rubric_title}</strong>{#UCA_ALERT_RELEV_BAD_SE#}<strong style=\'color:orange\'>'+diff+'</strong>{#UCA_ALERT_RELEV_BAD_SF#}');// Внимание - события в календаре неактуальны! На момент создания календаря был(и) выбран(ы) документ(ы), которые(ых) на текущий момент не существует в рубрике. Это приводит к тому, что календарь содержит события, ведущие на страницу с ошибкой 404! Для устранения - пересохраните календарь!
{elseif $unicalendar.uca_events == 2}
$('#count_wrap_{$unicalendar.id}').prop('title', '{#UCA_ALERT_RELEV_BAD_SD#}<strong style=\'color:orange\'>{$unicalendar.uca_rubric_title}</strong>{#UCA_ALERT_RELEV_BAD_SE#}<strong style=\'color:orange\'>'+diff+'</strong>{#UCA_ALERT_RELEV_BAD_SF#}');// Внимание - события в календаре неактуальны! На момент создания календаря был(и) выбран(ы) документ(ы), которые(ых) на текущий момент не существует в рубрике. Это приводит к тому, что календарь содержит события, ведущие на страницу с ошибкой 404! Для устранения - пересохраните календарь!
{/if}
{rdelim}{if $unicalendar.uca_events == 2}; {elseif $unicalendar.uca_events == 1}
else if (count_old_array < count_new_array && diff == '')
{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#}');// Предупреждение - события в календаре неактуальны! На момент создания календаря документов в рубрике было меньше, чем на текущий момент. Для устранения - пересохраните календарь.
$('#count_wrap_{$unicalendar.id}').prop('title', '{#UCA_ALERT_RELEV_WAR#}');// выводим подсказку - Внимание - события в календаре неактуальны! На момент создания календаря документов в рубрике было больше, чем на текущий момент...
{rdelim};
{/if}// завершение условий проверки
{rdelim},
error: function(xhr, str){ldelim}
$.jGrowl("{#SaveError#}", {ldelim}
@ -425,4 +439,37 @@
// Копируем системные теги при клике в буфер обмена
var clipboard = new Clipboard('.copyBtn');
// Start аналог php функции str_replace
function str_replace ( search, replace, subject ) {ldelim}
if(!(replace instanceof Array)){ldelim}
replace=new Array(replace);
if(search instanceof Array){ldelim}
while(search.length>replace.length){ldelim}
replace[replace.length]=replace[0];
{rdelim}
{rdelim}
{rdelim}
if(!(search instanceof Array))search=new Array(search);
while(search.length>replace.length){ldelim}
replace[replace.length]='';
{rdelim}
if(subject instanceof Array){ldelim}
for(k in subject){ldelim}
subject[k]=str_replace(search,replace,subject[k]);
{rdelim}
return subject;
{rdelim}
for(var k=0; k<search.length; k++){ldelim}
var i = subject.indexOf(search[k]);
while(i>-1){ldelim}
subject = subject.replace(search[k], replace[k]);
i = subject.indexOf(search[k],i);
{rdelim}
{rdelim}
return subject;
{rdelim} // END аналог php функции str_replace
</script>
Loading…
Cancel
Save