Jelajahi Sumber

#366 Events: calendar integration

Alex Trofimov 10 tahun lalu
induk
melakukan
3658a78a11

+ 79 - 0
modules/boonex/events/classes/BxEventsDb.php

@@ -25,6 +25,85 @@ class BxEventsDb extends BxBaseModGroupsDb
             'event_id' => $iContentId,
         ));
     }
+
+    public function getEntriesByDate($sDateStart, $sDateEnd)
+    {
+        // validate input data
+        if (false === ($oDateStart = date_create($sDateStart, new DateTimeZone('UTC'))))
+            return array();
+        if (false === ($oDateEnd = date_create($sDateEnd, new DateTimeZone('UTC'))))
+            return array();
+        if ($oDateStart > $oDateEnd)
+            return array();
+
+        // increase start and end date to cover timezones
+        $oDateStart = $oDateStart->sub(new DateInterval("P1D"));
+        $oDateEnd = $oDateEnd->add(new DateInterval("P1D"));
+
+        // look throught all days in the interval
+        $oDateIter = clone($oDateStart);
+        $aEntries = array();
+        while ($oDateIter->format('Y-m-d') != $oDateEnd->format('Y-m-d')) {
+
+            $oDateMin = date_create($oDateIter->format('Y-m-d') . '00:00:00', new DateTimeZone('UTC'));
+            $oDateMax = date_create($oDateIter->format('Y-m-d') . '23:59:59', new DateTimeZone('UTC'));
+                
+            // get all events for the specific day
+            $oDateMonthBegin = date_create($oDateIter->format('Y-m-01'), new DateTimeZone('UTC'));
+            $a = $this->getAll("SELECT DISTINCT `e`.`id`, `e`.`event_name` AS `title`, `e`.`date_start`, `e`.`date_end`, `e`.`timezone`
+                FROM `bx_events_data` AS `e`
+                LEFT JOIN `bx_events_intervals` AS `i` ON (
+                    `e`.`id` = `i`.`event_id`
+                    AND
+                    `e`.`date_start` <= :timestamp_min
+                    AND
+                    `i`.`repeat_stop` >= :timestamp_max
+                    AND (
+                        (0 = `i`.`repeat_year` OR 0 = (:year - :year_start) % `i`.`repeat_year`)
+                        AND 
+                        (0 = `i`.`repeat_month` OR  :month = `i`.`repeat_month`)
+                        AND 
+                        (0 = `i`.`repeat_week_of_month` OR :week_of_month = `i`.`repeat_week_of_month`)
+                        AND 
+                        (0 = `i`.`repeat_day_of_month` OR :day_of_month = `i`.`repeat_day_of_month`)
+                        AND 
+                        (0 = `i`.`repeat_day_of_week` OR :day_of_week = `i`.`repeat_day_of_week`)
+                    )
+                )
+                WHERE (`e`.`date_start` >= :timestamp_min AND `e`.`date_end` <= :timestamp_max AND `i`.`interval_id` IS NULL) OR (`i`.`interval_id` IS NOT NULL)
+            ", array(
+                'timestamp_min' => $oDateMin->getTimestamp(),
+                'timestamp_max' => $oDateMax->getTimestamp(),
+                'year_start' => $oDateStart->format('Y'),
+                'year' => $oDateIter->format('Y'),
+                'month' => $oDateIter->format('n'),
+                'week_of_month' => $oDateIter->format('W') - $oDateMonthBegin->format('W') + 1,
+                'day_of_month' => $oDateIter->format('j'),
+                'day_of_week' => $oDateIter->format('N'),
+            ));
+
+            // prepare variables for each event
+            $sCurrentDay = $oDateIter->format('Y-m-d');
+            foreach ($a as $k => $r) {
+                // TODO: check permissions
+                $sHoursStart = date('H:i:s', $r['date_start']);
+                $sHoursEnd = date('H:i:s', $r['date_end']);
+                $oStart = date_create($sCurrentDay . ' ' . $sHoursStart, new DateTimeZone($r['timezone']));
+                $oEnd = date_create($sCurrentDay . ' ' . $sHoursEnd, new DateTimeZone($r['timezone']));
+                $a[$k]['start'] = $oStart ? $oStart->format('c') : 0;
+                $a[$k]['end'] = $oEnd ? $oEnd->format('c') : 0;
+                $a[$k]['url'] = BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=' . $this->_oConfig->CNF['URI_VIEW_ENTRY'] . '&id=' . $r['id']);
+            }
+
+            // merge with all other events
+            $aEntries = array_merge($aEntries, $a);
+
+            // go to the next day
+            $oDateIter = $oDateIter->add(new DateInterval("P1D"));
+        }
+
+        return $aEntries;
+    }
 }
 
 /** @} */

+ 4 - 0
modules/boonex/events/classes/BxEventsFormEntry.php

@@ -104,6 +104,10 @@ class BxEventsFormEntry extends BxBaseModGroupsFormEntry
                 ),
             );
         }
+
+        if (isset($this->aInputs['timezone'])) {
+            $this->aInputs['timezone']['values'] = array_combine(timezone_identifiers_list(), timezone_identifiers_list());
+        }
     }
 
     function initChecker ($aValues = array (), $aSpecificValues = array())

+ 16 - 0
modules/boonex/events/classes/BxEventsModule.php

@@ -19,6 +19,22 @@ class BxEventsModule extends BxBaseModGroupsModule
         parent::__construct($aModule);
     }
 
+    public function actionCalendarData()
+    {
+        // TODO: check permissions
+        
+        $aEntries = $this->_oDb->getEntriesByDate(bx_get('start'), bx_get('end'));
+        
+        header('Content-Type: application/json; charset=utf-8');
+        echo json_encode($aEntries);
+    }
+
+    public function serviceCalendar()
+    {
+        $o = new BxTemplCalendar(array('events' => BX_DOL_URL_ROOT . $this->_oConfig->getBaseUri() . 'calendar_data'), $this->_oTemplate);
+        return $o->display();
+    }
+
     public function actionIntervals()
     {
         $sAction = bx_get('a');

+ 24 - 0
modules/boonex/events/classes/BxEventsPageCalendar.php

@@ -0,0 +1,24 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
+ * CC-BY License - http://creativecommons.org/licenses/by/3.0/
+ *
+ * @defgroup    Events Events
+ * @ingroup     TridentModules
+ *
+ * @{
+ */
+
+/**
+ * Browse entries pages.
+ */
+class BxEventsPageCalendar extends BxBaseModGeneralPageBrowse
+{
+    public function __construct($aOptions, $oTemplate = null)
+    {
+        $this->MODULE = 'bx_events';
+        parent::__construct($aOptions, $oTemplate);
+    }
+}
+
+/** @} */

+ 15 - 3
modules/boonex/events/install/langs/en.xml

@@ -41,6 +41,14 @@
     <string name="_bx_events_form_profile_input_sys_reoccurring"><![CDATA[Reoccurring]]></string>
     <string name="_bx_events_form_profile_input_reoccurring"><![CDATA[Reoccurring]]></string>
     <string name="_bx_events_form_profile_input_reoccurring_add_interval"><![CDATA[Add repeating interval]]></string>
+    <string name="_bx_events_form_profile_input_sys_date_start"><![CDATA[Date start]]></string>
+    <string name="_bx_events_form_profile_input_date_start"><![CDATA[Date start]]></string>
+    <string name="_bx_events_form_profile_input_date_start_err"><![CDATA[Start date is mandatory]]></string>
+    <string name="_bx_events_form_profile_input_sys_date_end"><![CDATA[Date end]]></string>
+    <string name="_bx_events_form_profile_input_date_end"><![CDATA[Date end]]></string>    
+    <string name="_bx_events_form_profile_input_date_end_err"><![CDATA[End date is mandatory]]></string>
+    <string name="_bx_events_form_profile_input_sys_timezone"><![CDATA[Timezone]]></string>
+    <string name="_bx_events_form_profile_input_timezone"><![CDATA[Timezone]]></string>
 
     <string name="_bx_events_form_input_repeat_year"><![CDATA[Repeat year]]></string>
     <string name="_bx_events_form_input_repeat_month"><![CDATA[Repeat month]]></string>
@@ -84,7 +92,9 @@
 	<string name="_bx_events_page_title_sys_manage_administration"><![CDATA[Manage All Events]]></string>
 	<string name="_bx_events_page_title_manage"><![CDATA[Manage Events]]></string>
 	<string name="_bx_events_page_title_sys_top"><![CDATA[Top Events]]></string>
-	<string name="_bx_events_page_title_top"><![CDATA[Top Events]]></string>
+    <string name="_bx_events_page_title_top"><![CDATA[Top Events]]></string>
+	<string name="_bx_events_page_title_sys_calendar"><![CDATA[Events Calendar]]></string>
+	<string name="_bx_events_page_title_calendar"><![CDATA[Events Calendar]]></string>
 
 	<string name="_bx_events_page_block_title_sys_joined_entries"><![CDATA[Joined Events]]></string>
 	<string name="_bx_events_page_block_title_joined_entries"><![CDATA[Joined Events]]></string>
@@ -109,8 +119,8 @@
 	<string name="_bx_events_page_block_title_manage"><![CDATA[Manage Events]]></string>
     <string name="_bx_events_page_block_title_top_profiles"><![CDATA[Top Events]]></string>
     <string name="_bx_events_page_block_title_entry_social_sharing"><![CDATA[Share]]></string>
-
     <string name="_bx_events_page_block_title_categories"><![CDATA[Event categories]]></string>
+    <string name="_bx_events_page_block_title_calendar"><![CDATA[Events calendar]]></string>
 
     <string name="_bx_events_menu_title_submenu"><![CDATA[Events Submenu]]></string>
     <string name="_bx_events_menu_set_title_submenu"><![CDATA[Events Submenu]]></string>
@@ -192,7 +202,9 @@
 	<string name="_bx_events_menu_item_title_manage_all"><![CDATA[All Events]]></string>
 	<string name="_bx_events_menu_item_title_system_entries_top"><![CDATA[Top]]></string>
 	<string name="_bx_events_menu_item_title_entries_top"><![CDATA[Top]]></string>
-
+	<string name="_bx_events_menu_item_title_system_calendar"><![CDATA[Calendar]]></string>
+    <string name="_bx_events_menu_item_title_calendar"><![CDATA[Calendar]]></string>
+    
 	<string name="_bx_events_grid_filter_item_title_adm_select_one_filter1"><![CDATA[All Statuses]]></string>
 	<string name="_bx_events_grid_filter_item_title_adm_active"><![CDATA[Active]]></string>
 	<string name="_bx_events_grid_filter_item_title_adm_pending"><![CDATA[Pending]]></string>

+ 10 - 1
modules/boonex/events/install/sql/enable.sql

@@ -101,6 +101,14 @@ INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `lay
 INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
 ('bx_events_top', 1, 'bx_events', '_bx_events_page_block_title_top_profiles', 11, 2147483647, 'service', 'a:3:{s:6:\"module\";s:9:\"bx_events\";s:6:\"method\";s:19:\"browse_top_profiles\";s:6:"params";a:1:{i:0;b:1;}}', 0, 1, 0);
 
+-- PAGE: calendar
+
+INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
+('bx_events_calendar', '_bx_events_page_title_sys_calendar', '_bx_events_page_title_calendar', 'bx_events', 5, 2147483647, 1, 'events-calendar', 'page.php?i=events-calendar', '', '', '', 0, 1, 0, 'BxEventsPageCalendar', 'modules/boonex/events/classes/BxEventsPageCalendar.php');
+
+INSERT INTO `sys_pages_blocks`(`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES 
+('bx_events_calendar', 1, 'bx_events', '_bx_events_page_block_title_calendar', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:9:"bx_events";s:6:"method";s:8:"calendar";}', 0, 1, 0);
+
 -- PAGE: module manage own
 INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `layout_id`, `visible_for_levels`, `visible_for_levels_editable`, `uri`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES 
 ('bx_events_manage', '_bx_events_page_title_sys_manage', '_bx_events_page_title_manage', 'bx_events', 5, 2147483647, 1, 'events-manage', 'page.php?i=events-manage', '', '', '', 0, 1, 0, 'BxEventsPageBrowse', 'modules/boonex/events/classes/BxEventsPageBrowse.php');
@@ -192,7 +200,8 @@ INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES
 INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
 ('bx_events_submenu', 'bx_events', 'events-home', '_bx_events_menu_item_title_system_entries_recent', '_bx_events_menu_item_title_entries_recent', 'page.php?i=events-home', '', '', '', '', 2147483647, 1, 1, 1),
 ('bx_events_submenu', 'bx_events', 'events-top', '_bx_events_menu_item_title_system_entries_top', '_bx_events_menu_item_title_entries_top', 'page.php?i=events-top', '', '', '', '', 2147483647, 1, 1, 2),
-('bx_events_submenu', 'bx_events', 'events-manage', '_bx_events_menu_item_title_system_entries_manage', '_bx_events_menu_item_title_entries_manage', 'page.php?i=events-manage', '', '', '', '', 2147483646, 1, 1, 3);
+('bx_events_submenu', 'bx_events', 'events-calendar', '_bx_events_menu_item_title_system_calendar', '_bx_events_menu_item_title_calendar', 'page.php?i=events-calendar', '', '', '', '', 2147483647, 1, 1, 3),
+('bx_events_submenu', 'bx_events', 'events-manage', '_bx_events_menu_item_title_system_entries_manage', '_bx_events_menu_item_title_entries_manage', 'page.php?i=events-manage', '', '', '', '', 2147483646, 1, 1, 4);
 
 -- MENU: view submenu
 

+ 38 - 22
modules/boonex/events/install/sql/install.sql

@@ -10,6 +10,9 @@ CREATE TABLE IF NOT EXISTS `bx_events_data` (
   `event_name` varchar(255) NOT NULL,
   `event_cat` int(11) NOT NULL,
   `event_desc` text NOT NULL,
+  `date_start` int(11) DEFAULT NULL,
+  `date_end` int(11) DEFAULT NULL,
+  `timezone` varchar(255) DEFAULT NULL,
   `views` int(11) NOT NULL default '0',
   `rate` float NOT NULL default '0',
   `votes` int(11) NOT NULL default '0',
@@ -180,47 +183,60 @@ INSERT INTO `sys_form_displays`(`object`, `display_name`, `module`, `view_mode`,
 
 INSERT INTO `sys_form_inputs`(`object`, `module`, `name`, `value`, `values`, `checked`, `type`, `caption_system`, `caption`, `info`, `required`, `collapsed`, `html`, `attrs`, `attrs_tr`, `attrs_wrapper`, `checker_func`, `checker_params`, `checker_error`, `db_pass`, `db_params`, `editable`, `deletable`) VALUES 
 ('bx_event', 'bx_events', 'allow_view_to', 3, '', 0, 'custom', '_bx_events_form_profile_input_sys_allow_view_to', '_bx_events_form_profile_input_allow_view_to', '_bx_events_form_profile_input_allow_view_to_desc', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
+('bx_event', 'bx_events', 'cover', 'a:1:{i:0;s:20:\"bx_events_cover_crop\";}', 'a:1:{s:20:\"bx_events_cover_crop\";s:24:\"_sys_uploader_crop_title\";}', 0, 'files', '_bx_events_form_profile_input_sys_cover', '_bx_events_form_profile_input_cover', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_event', 'bx_events', 'date_end', 0, '', 0, 'datetime', '_bx_events_form_profile_input_sys_date_end', '_bx_events_form_profile_input_date_end', '', 1, 0, 0, '', '', '', 'date_time', '', '_bx_events_form_profile_input_date_end_err', 'DateTime', '', 1, 0),
+('bx_event', 'bx_events', 'date_start', 0, '', 0, 'datetime', '_bx_events_form_profile_input_sys_date_start', '_bx_events_form_profile_input_date_start', '', 1, 0, 0, '', '', '', 'date_time', '', '_bx_events_form_profile_input_date_start_err', 'DateTime', '', 1, 0),
 ('bx_event', 'bx_events', 'delete_confirm', 1, '', 0, 'checkbox', '_bx_events_form_profile_input_sys_delete_confirm', '_bx_events_form_profile_input_delete_confirm', '_bx_events_form_profile_input_delete_confirm_info', 1, 0, 0, '', '', '', 'avail', '', '_bx_events_form_profile_input_delete_confirm_error', '', '', 1, 0),
 ('bx_event', 'bx_events', 'do_submit', '_sys_form_account_input_submit', '', 0, 'submit', '_bx_events_form_profile_input_sys_do_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
-('bx_event', 'bx_events', 'event_desc', '', '', 0, 'textarea', '_bx_events_form_profile_input_sys_event_desc', '_bx_events_form_profile_input_event_desc', '', 0, 0, 0, '', '', '', '', '', '', 'XssMultiline', '', 1, 1),
 ('bx_event', 'bx_events', 'event_cat', '', '#!bx_events_cats', 0, 'select', '_bx_events_form_profile_input_sys_event_cat', '_bx_events_form_profile_input_event_cat', '', 1, 0, 0, '', '', '', 'avail', '', '_bx_events_form_profile_input_event_cat_err', 'Xss', '', 1, 1),
+('bx_event', 'bx_events', 'event_desc', '', '', 0, 'textarea', '_bx_events_form_profile_input_sys_event_desc', '_bx_events_form_profile_input_event_desc', '', 0, 0, 0, '', '', '', '', '', '', 'XssMultiline', '', 1, 1),
 ('bx_event', 'bx_events', 'event_name', '', '', 0, 'text', '_bx_events_form_profile_input_sys_event_name', '_bx_events_form_profile_input_event_name', '', 1, 0, 0, '', '', '', 'avail', '', '_bx_events_form_profile_input_event_name_err', 'Xss', '', 1, 0),
 ('bx_event', 'bx_events', 'initial_members', '', '', 0, 'custom', '_bx_events_form_profile_input_sys_initial_members', '_bx_events_form_profile_input_initial_members', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 1),
 ('bx_event', 'bx_events', 'join_confirmation', 1, '', 1, 'switcher', '_bx_events_form_profile_input_sys_join_confirm', '_bx_events_form_profile_input_join_confirm', '', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 1, 0),
-('bx_event', 'bx_events', 'cover', 'a:1:{i:0;s:20:"bx_events_cover_crop";}', 'a:1:{s:20:"bx_events_cover_crop";s:24:"_sys_uploader_crop_title";}', 0, 'files', '_bx_events_form_profile_input_sys_cover', '_bx_events_form_profile_input_cover', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
-('bx_event', 'bx_events', 'picture', 'a:1:{i:0;s:22:"bx_events_picture_crop";}', 'a:1:{s:22:"bx_events_picture_crop";s:24:"_sys_uploader_crop_title";}', 0, 'files', '_bx_events_form_profile_input_sys_picture', '_bx_events_form_profile_input_picture', '', 0, 0, 0, '', '', '', '', '', '_bx_events_form_profile_input_picture_err', '', '', 1, 0);
+('bx_event', 'bx_events', 'picture', 'a:1:{i:0;s:22:\"bx_events_picture_crop\";}', 'a:1:{s:22:\"bx_events_picture_crop\";s:24:\"_sys_uploader_crop_title\";}', 0, 'files', '_bx_events_form_profile_input_sys_picture', '_bx_events_form_profile_input_picture', '', 0, 0, 0, '', '', '', '', '', '_bx_events_form_profile_input_picture_err', '', '', 1, 0),
+('bx_event', 'bx_events', 'reoccurring', '', '', 0, 'custom', '_bx_events_form_profile_input_sys_reoccurring', '_bx_events_form_profile_input_reoccurring', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 1),
+('bx_event', 'bx_events', 'timezone', 'UTC', '', 0, 'select', '_bx_events_form_profile_input_sys_timezone', '_bx_events_form_profile_input_timezone', '', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 1, 0);
 
 INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`, `visible_for_levels`, `active`, `order`) VALUES 
-('bx_event_add', 'delete_confirm', 2147483647, 0, 3),
-('bx_event_add', 'cover', 2147483647, 0, 4),
-('bx_event_add', 'initial_members', 2147483647, 1, 5),
-('bx_event_add', 'picture', 2147483647, 1, 6),
-('bx_event_add', 'event_name', 2147483647, 1, 7),
-('bx_event_add', 'event_cat', 2147483647, 1, 8),
-('bx_event_add', 'event_desc', 2147483647, 1, 9),
-('bx_event_add', 'join_confirmation', 2147483647, 1, 10),
-('bx_event_add', 'allow_view_to', 2147483647, 1, 11),
-('bx_event_add', 'do_submit', 2147483647, 1, 12),
+('bx_event_add', 'delete_confirm', 2147483647, 0, 1),
+('bx_event_add', 'cover', 2147483647, 0, 2),
+('bx_event_add', 'initial_members', 2147483647, 1, 3),
+('bx_event_add', 'picture', 2147483647, 1, 4),
+('bx_event_add', 'event_name', 2147483647, 1, 5),
+('bx_event_add', 'event_cat', 2147483647, 1, 6),
+('bx_event_add', 'event_desc', 2147483647, 1, 7),
+('bx_event_add', 'date_start', 2147483647, 1, 8),
+('bx_event_add', 'date_end', 2147483647, 1, 9),
+('bx_event_add', 'timezone', 2147483647, 1, 10),
+('bx_event_add', 'reoccurring', 2147483647, 1, 11),
+('bx_event_add', 'join_confirmation', 2147483647, 1, 12),
+('bx_event_add', 'allow_view_to', 2147483647, 1, 13),
+('bx_event_add', 'do_submit', 2147483647, 1, 14),
 
-('bx_event_delete', 'delete_confirm', 2147483647, 1, 0),
 ('bx_event_delete', 'cover', 2147483647, 0, 0),
 ('bx_event_delete', 'picture', 2147483647, 0, 0),
+('bx_event_delete', 'delete_confirm', 2147483647, 1, 0),
 ('bx_event_delete', 'do_submit', 2147483647, 1, 1),
 ('bx_event_delete', 'event_name', 2147483647, 0, 2),
 ('bx_event_delete', 'event_cat', 2147483647, 0, 3),
 
+('bx_event_edit', 'initial_members', 2147483647, 0, 1),
 ('bx_event_edit', 'delete_confirm', 2147483647, 0, 2),
 ('bx_event_edit', 'cover', 2147483647, 0, 3),
-('bx_event_edit', 'picture', 2147483647, 1, 5),
-('bx_event_edit', 'event_name', 2147483647, 1, 6),
-('bx_event_edit', 'event_cat', 2147483647, 1, 7),
-('bx_event_edit', 'event_desc', 2147483647, 1, 8),
-('bx_event_edit', 'join_confirmation', 2147483647, 1, 9),
-('bx_event_edit', 'allow_view_to', 2147483647, 1, 10),
-('bx_event_edit', 'do_submit', 2147483647, 1, 11),
+('bx_event_edit', 'picture', 2147483647, 1, 4),
+('bx_event_edit', 'event_name', 2147483647, 1, 5),
+('bx_event_edit', 'event_cat', 2147483647, 1, 6),
+('bx_event_edit', 'event_desc', 2147483647, 1, 7),
+('bx_event_edit', 'date_start', 2147483647, 1, 8),
+('bx_event_edit', 'date_end', 2147483647, 1, 9),
+('bx_event_edit', 'timezone', 2147483647, 1, 10),
+('bx_event_edit', 'reoccurring', 2147483647, 1, 11),
+('bx_event_edit', 'join_confirmation', 2147483647, 1, 12),
+('bx_event_edit', 'allow_view_to', 2147483647, 1, 13),
+('bx_event_edit', 'do_submit', 2147483647, 1, 14),
 
-('bx_event_edit_cover', 'join_confirmation', 2147483647, 0, 0),
 ('bx_event_edit_cover', 'event_desc', 2147483647, 0, 0),
+('bx_event_edit_cover', 'join_confirmation', 2147483647, 0, 0),
 ('bx_event_edit_cover', 'delete_confirm', 2147483647, 0, 1),
 ('bx_event_edit_cover', 'event_name', 2147483647, 0, 2),
 ('bx_event_edit_cover', 'picture', 2147483647, 0, 3),

+ 13 - 2
modules/boonex/russian/data/langs/bx_events/ru.xml

@@ -41,6 +41,12 @@
     <string name="_bx_events_form_profile_input_sys_reoccurring"><![CDATA[Повторяющееся событие]]></string>
     <string name="_bx_events_form_profile_input_reoccurring"><![CDATA[Повторяющееся событие]]></string>
     <string name="_bx_events_form_profile_input_reoccurring_add_interval"><![CDATA[Добавить повторяющийся интервал]]></string>
+    <string name="_bx_events_form_profile_input_sys_date_start"><![CDATA[Начало]]></string>
+    <string name="_bx_events_form_profile_input_date_start"><![CDATA[Начало]]></string>
+    <string name="_bx_events_form_profile_input_sys_date_end"><![CDATA[Конец]]></string>
+    <string name="_bx_events_form_profile_input_date_end"><![CDATA[Конец]]></string>
+    <string name="_bx_events_form_profile_input_sys_timezone"><![CDATA[Часовой пояс]]></string>
+    <string name="_bx_events_form_profile_input_timezone"><![CDATA[Часовой пояс]]></string>
 
     <string name="_bx_events_form_input_repeat_year"><![CDATA[Повторять: год]]></string>
     <string name="_bx_events_form_input_repeat_month"><![CDATA[Повторять: месяц]]></string>
@@ -84,7 +90,9 @@
 	<string name="_bx_events_page_title_sys_manage_administration"><![CDATA[Управлять всеми событиями]]></string>
 	<string name="_bx_events_page_title_manage"><![CDATA[Управлять событиями]]></string>
 	<string name="_bx_events_page_title_sys_top"><![CDATA[Лучшие события]]></string>
-	<string name="_bx_events_page_title_top"><![CDATA[Лучшие события]]></string>
+    <string name="_bx_events_page_title_top"><![CDATA[Лучшие события]]></string>
+	<string name="_bx_events_page_title_sys_calendar"><![CDATA[Календарь событий]]></string>
+	<string name="_bx_events_page_title_calendar"><![CDATA[Календарь событий]]></string>
 
 	<string name="_bx_events_page_block_title_sys_joined_entries"><![CDATA[Участие в событиях]]></string>
 	<string name="_bx_events_page_block_title_joined_entries"><![CDATA[Участие в событиях]]></string>
@@ -110,6 +118,7 @@
     <string name="_bx_events_page_block_title_top_profiles"><![CDATA[Лучшие события]]></string>
     <string name="_bx_events_page_block_title_entry_social_sharing"><![CDATA[Поделиться]]></string>
     <string name="_bx_events_page_block_title_categories"><![CDATA[Категории событий]]></string>
+    <string name="_bx_events_page_block_title_calendar"><![CDATA[Календарь событий]]></string>
 
     <string name="_bx_events_menu_title_submenu"><![CDATA[Под-меню событий]]></string>
     <string name="_bx_events_menu_set_title_submenu"><![CDATA[Под-меню событий]]></string>
@@ -190,7 +199,9 @@
 	<string name="_bx_events_menu_item_title_manage_my"><![CDATA[Мой события]]></string>
 	<string name="_bx_events_menu_item_title_manage_all"><![CDATA[Все события]]></string>
 	<string name="_bx_events_menu_item_title_system_entries_top"><![CDATA[Популярные]]></string>
-	<string name="_bx_events_menu_item_title_entries_top"><![CDATA[Популярные]]></string>
+    <string name="_bx_events_menu_item_title_entries_top"><![CDATA[Популярные]]></string>
+	<string name="_bx_events_menu_item_title_system_calendar"><![CDATA[Календарь]]></string>
+    <string name="_bx_events_menu_item_title_calendar"><![CDATA[Календарь]]></string>
 
 	<string name="_bx_events_grid_filter_item_title_adm_select_one_filter1"><![CDATA[Все статусы]]></string>
 	<string name="_bx_events_grid_filter_item_title_adm_active"><![CDATA[Активные]]></string>