AntonLV 5 лет назад
Родитель
Сommit
eb26196c97

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

@@ -63,6 +63,8 @@ class BxEventsDb extends BxBaseModGroupsDb
         if ($oDateFrom > $oDateTo)
             return array();
 
+        $sModule = $this->_oConfig->getName();
+
         // increase start and end date to cover timezones
         $oDateFrom = $oDateFrom->sub(new DateInterval("P1D"));
         $oDateTo = $oDateTo->add(new DateInterval("P1D"));
@@ -166,6 +168,11 @@ class BxEventsDb extends BxBaseModGroupsDb
                 $a[$k]['start_utc'] = $oDateStart ? $oDateStart->getTimestamp() : 0;
                 $a[$k]['end_utc'] = $oDateEnd ? $oDateEnd->getTimestamp() : 0;
                 $a[$k]['url'] = BX_DOL_URL_ROOT . BxDolPermalinks::getInstance()->permalink('page.php?i=' . $this->_oConfig->CNF['URI_VIEW_ENTRY'] . '&id=' . $r['id']);
+                if(($oEvent = BxDolProfile::getInstanceByContentAndType($r['id'], $sModule)) !== false)
+                    $a[$k]['extendedProps'] = [
+                        'class' => 'bx-events-calendar-unit',
+                        'card' => $oEvent->getUnit()
+                    ];
             }
 
             // merge with all other events

+ 6 - 4
modules/boonex/events/classes/BxEventsModule.php

@@ -247,19 +247,21 @@ class BxEventsModule extends BxBaseModGroupsModule implements iBxDolCalendarServ
             if ('' == $aContentInfo['repeat_stop']) // don't display calendar for non repeating events
                 return '';
         } 
-        
-        
+
         if (isset($aData['context_id'])) {
             if (!$this->serviceIsEnableForContext($aData['context_id'])){
                 return '';
             }                
         } 
-        $o = new BxTemplCalendar(array(
+
+        $oCalendar = new BxTemplCalendar(array(
             'eventSources' => array (
                 bx_append_url_params(BX_DOL_URL_ROOT . $this->_oConfig->getBaseUri() . 'calendar_data', $aData),
             ),
         ), $this->_oTemplate);
-        return $o->display($sTemplate);
+
+        $this->_oTemplate->addCss(array('main.css'));
+        return $oCalendar->display($sTemplate);
     }
 
     /**

+ 18 - 0
modules/boonex/events/template/css/main.css

@@ -1,4 +1,22 @@
 /*-- Event Roles --*/
 #bx-events-set-role-popup .bx-menu-ver {
     margin: 0;
+}
+
+/*-- Event Calendar --*/
+.bx-events-calendar-unit .bx-base-pofile-unit-with-cover {
+    position: relative;
+    width: 20rem;
+}
+.bx-layout-column-thin .bx-events-calendar-unit .bx-base-pofile-unit-with-cover,
+.bx-media-phone .bx-events-calendar-unit .bx-base-pofile-unit-with-cover {
+    width: 100%;
+}
+.bx-events-calendar-unit .bx-base-pofile-unit-with-cover:after {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    content: "";
 }

+ 22 - 9
template/calendar.html

@@ -1,16 +1,29 @@
 <div id="__id__"></div>
 <script>
     var oDefaults = {
-			headerToolbar: {
-				initialView: 'dayGridMonth',
-				left: 'prev,next today',
-				center: 'title',
-				right: 'dayGridDay,dayGridWeek,dayGridMonth' 
-			},
-            navLinks: true, // can click day/week names to navigate views
+        headerToolbar: {
+            initialView: 'dayGridMonth',
+            left: 'prev,next today',
+            center: 'title',
+            right: 'dayGridDay,dayGridWeek,dayGridMonth' 
+        },
+        navLinks: true, // can click day/week names to navigate views
+        eventClassNames: function(oParams) {
+            if(oParams.view.type != 'dayGridDay' || !oParams.event.extendedProps.class)
+                return;
+
+            return oParams.event.extendedProps.class;
+        },
+        eventContent: function(oParams) {
+            if(oParams.view.type != 'dayGridDay' || !oParams.event.extendedProps.card)
+                return;
+
+            oParams.event.url = '';
+            return {html: oParams.event.extendedProps.card};
+        }
     };
     var oOptions = __options__;    
-	document.addEventListener('DOMContentLoaded', function() {
+    document.addEventListener('DOMContentLoaded', function() {
         new FullCalendar.Calendar(document.getElementById('__id__'), $.extend({}, oDefaults, oOptions)).render();
-	});
+    });
 </script>