Browse Source

версия 1.2.1

master
root 7 years ago
parent
commit
41fa75bf80
  1. 2
      README.md
  2. 288
      unicalendar/class.unicalendar.php
  3. 2
      unicalendar/lang/ru.php
  4. 2
      unicalendar/module.php

2
README.md

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

288
unicalendar/class.unicalendar.php

@ -25,119 +25,22 @@ class Unicalendar
{
require(BASE_DIR . '/modules/unicalendar/lang/ru.php'); // загружаем файл ленгов для php переменных
// подключаем JS скрипты и CSS файлы календаря в секцию head
$eventCalendar_css = '<link rel="stylesheet" href="'.ABS_PATH.'modules/unicalendar/css/eventCalendar.css" type="text/css" media="screen" charset="utf-8" />';
$eventCalendar_theme_responsive_css = '<link rel="stylesheet" href="'.ABS_PATH.'modules/unicalendar/css/eventCalendar_theme_responsive.css" type="text/css" media="screen" charset="utf-8" />';
$moment_js = '<script src="'.ABS_PATH.'modules/unicalendar/js/moment.js" type="text/javascript" charset="utf-8"></script>';
$jquery_eventCalendar_js = '<script src="'.ABS_PATH.'modules/unicalendar/js/jquery.eventCalendar.js" type="text/javascript" charset="utf-8"></script>';
$eventCalendar_css = '<link rel="stylesheet" href="'.ABS_PATH.'modules/unicalendar/css/eventCalendar.css" type="text/css" media="screen" />';
$eventCalendar_theme_responsive_css = '<link rel="stylesheet" href="'.ABS_PATH.'modules/unicalendar/css/eventCalendar_theme_responsive.css" type="text/css" media="screen" />';
$moment_js = '<script src="'.ABS_PATH.'modules/unicalendar/js/moment.js" type="text/javascript"></script>';
$jquery_eventCalendar_js = '<script src="'.ABS_PATH.'modules/unicalendar/js/jquery.eventCalendar.js" type="text/javascript"></script>';
$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);
// Записываем в секции <head> подключение 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] = '<script src="'.ABS_PATH.'modules/unicalendar/js/data-files/data'.$id.'.js" type="text/javascript" charset="utf-8"></script>'; // подключаем в секции <head> 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);
// Записываем в секции <head> подключение js файла с данными календаря, согласно Id этого календаря
// подключаем в секции <head> 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] = '<script src="'.ABS_PATH.'modules/unicalendar/js/data-files/data'.$id.'.js" type="text/javascript" charset="utf-8"></script>'; // подключаем в секции <head> js файл с данным , согласно Id календаря
$GLOBALS['user_header']['module_unicalendar_' . $id] = '<script src="'.ABS_PATH.'modules/unicalendar/js/data-files/data'.$id.'.js" type="text/javascript"></script>';
}
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;
}

2
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";
?>

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

Loading…
Cancel
Save