-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #292 from ferishili/issue-280
- Loading branch information
Showing
14 changed files
with
385 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
<?php | ||
|
||
namespace Meetings; | ||
|
||
use ElanEv\Model\MeetingCourse; | ||
// use CourseMember; | ||
use CourseDate; | ||
use Course; | ||
use PluginEngine; | ||
|
||
/** | ||
* WidgetHandler.php - contains function for MeetingPlugin widget handling. | ||
* | ||
* @author Farbod Zamani Broujeni (zamani@elan-ev.de) | ||
*/ | ||
class WidgetHandler | ||
{ | ||
/** | ||
* Get all current and up-coming meetings | ||
* | ||
* @param array $userCourses list of courses which user is participated and has a default meeting room | ||
* @return array | ||
*/ | ||
public static function getMeetingsForWidget() | ||
{ | ||
global $user, $perm; | ||
|
||
// Handle Admin users. | ||
if ($perm->have_perm('admin') || $perm->have_perm('root')) { | ||
$courses = Course::findBySQL( | ||
'INNER JOIN vc_meeting_course AS mc ON seminar_id = mc.course_id | ||
WHERE mc.is_default = 1 AND mc.active = 1' | ||
); | ||
} else { | ||
$courses = Course::findBySQL( | ||
'INNER JOIN seminar_user AS su USING(Seminar_id) | ||
INNER JOIN vc_meeting_course AS mc ON seminar_id = mc.course_id | ||
WHERE su.user_id = ? AND mc.is_default = 1 AND mc.active = 1 ORDER BY mkdate ASC', | ||
[$user->id] | ||
); | ||
} | ||
|
||
$widgetItemsArray = self::getTodaysMeetings($courses); | ||
|
||
return $widgetItemsArray; | ||
} | ||
|
||
/** | ||
* Sort the meetings which are happening or will be happened today. | ||
* | ||
* @param array $courses list of courses which user is participated and has a default meeting room | ||
* @return array | ||
*/ | ||
private function getTodaysMeetings($courses) { | ||
if (empty($courses)) { | ||
return []; | ||
} | ||
|
||
$currents = []; | ||
$upcomings = []; | ||
|
||
$whereCurrent = 'range_id = ? AND date <= ? AND end_time >= ?'; | ||
$whereUpcoming = 'range_id = ? AND date > ? AND end_time < ? ORDER BY date ASC'; | ||
$now = strtotime('now'); | ||
$tonight = strtotime('tomorrow midnight'); | ||
|
||
foreach ($courses as $course) { | ||
$currentSessionDate = CourseDate::findOneBySQL($whereCurrent, | ||
[ | ||
$course->seminar_id, | ||
$now, | ||
$now, | ||
]); | ||
if ($currentSessionDate) { | ||
$widgetItem = self::prepareWidgetItems($course, $currentSessionDate); | ||
if (!empty($widgetItem)) { | ||
$currents[] = $widgetItem; | ||
} | ||
// Here we stop the process by simply passing the itteration. | ||
continue; | ||
} | ||
|
||
$upcomingSessionDate = CourseDate::findOneBySQL($whereUpcoming, | ||
[ | ||
$course->seminar_id, | ||
$now, | ||
$tonight, | ||
]); | ||
if ($upcomingSessionDate) { | ||
$upcomings[] = self::prepareWidgetItems($course, $upcomingSessionDate); | ||
} | ||
} | ||
|
||
$widgetItemsArray = []; | ||
|
||
if (!empty($currents)) { | ||
$widgetItemsArray['current'] = $currents; | ||
} | ||
|
||
if (!empty($upcomings)) { | ||
$widgetItemsArray['upcoming'] = $upcomings; | ||
} | ||
|
||
return $widgetItemsArray; | ||
} | ||
|
||
/** | ||
* Prepare the widget item. | ||
* | ||
* @param Course $course course object | ||
* @param CourseDate $courseDate course date object | ||
* @return array | ||
*/ | ||
private function prepareWidgetItems(Course $course, CourseDate $courseDate) { | ||
$meetingCourse = MeetingCourse::findOneBySQL('course_id = ? AND is_default = 1', [$course->seminar_id]); | ||
$widgetItem = [ | ||
'item_title' => $course->name . ': ' . _('Heute') . date(", H:i", $courseDate->date) . " - " . date("H:i", $courseDate->end_time), | ||
'course_id' => $course->seminar_id, | ||
'course_title' => $course->name, | ||
'termin_id' => $courseDate->termin_id, | ||
'termin_start' => $courseDate->date, | ||
'termin_end' => $courseDate->end_time, | ||
'termin_fullname' => $courseDate->getFullname('verbose'), | ||
'meeing_name' => $meetingCourse->meeting->name, | ||
'meeting_id' => $meetingCourse->meeting->id, | ||
'meeting_course_url' => PluginEngine::getURL('meetingplugin', ['cid' => $course->id], 'index', true), | ||
'meeting_join_url' => PluginEngine::getURL('meetingplugin', [], "api/rooms/join/{$course->id}/{$meetingCourse->meeting->id}") | ||
]; | ||
|
||
return $widgetItem; | ||
} | ||
} |
49 changes: 49 additions & 0 deletions
49
migrations/039_add_default_column_to_meeting_course_table.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
<?php | ||
|
||
/** | ||
* Adding default column to the meeting course table to be used it in widget and appoinments. | ||
* | ||
* @author Farbod Zamani Broujeni (zamani@elan-ev.de) | ||
*/ | ||
class AddDefaultColumnToMeetingCourseTable extends Migration | ||
{ | ||
/** | ||
* {@inheritdoc} | ||
*/ | ||
public function description() | ||
{ | ||
return 'Adding is_default column to the meeting course table to be used it in widget and appoinments.'; | ||
} | ||
|
||
/** | ||
* {@inheritdoc} | ||
*/ | ||
public function up() | ||
{ | ||
$db = DBManager::get(); | ||
$db->exec( | ||
'ALTER TABLE | ||
vc_meeting_course | ||
ADD COLUMN | ||
is_default TINYINT NOT NULL DEFAULT 0 AFTER active' | ||
); | ||
|
||
SimpleORMap::expireTableScheme(); | ||
} | ||
|
||
/** | ||
* {@inheritdoc} | ||
*/ | ||
public function down() | ||
{ | ||
$db = DBManager::get(); | ||
$db->exec( | ||
'ALTER TABLE | ||
vc_meeting_course | ||
DROP COLUMN | ||
is_default' | ||
); | ||
|
||
SimpleORMap::expireTableScheme(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
<article class="studip"> | ||
<? if (count($items)): ?> | ||
<? if (isset($items['current'])): ?> | ||
<article class="studip toggle open <?= ContentBoxHelper::classes('meeting-widget-current') ?>" id="meeting-widget-current"> | ||
<header> | ||
<h1> | ||
<a href="<?= ContentBoxHelper::href('meeting-widget-current') ?>"> | ||
<?= htmlReady($texts['current']) ?> | ||
</a> | ||
</h1> | ||
</header> | ||
<? foreach ($items['current'] as $item): ?> | ||
<article class="studip toggle"> | ||
<header> | ||
<h1 onclick="window.open('<?= $item['meeting_join_url'] ?>', '_self');return false;"> | ||
<?= Icon::create('chat', 'inactive')->asImg(['class' => 'text-bottom']) ?> | ||
<?= htmlReady($item['item_title']) ?> | ||
</h1> | ||
<nav> | ||
<a href="<?= $item['meeting_join_url'] ?>" title="<?= htmlReady($texts['to_meeting']) ?>" target="_blank"> | ||
<?= Icon::create('door-enter', 'clickable')->asImg(['class' => 'text-bottom']) ?> | ||
</a> | ||
<a href="<?= $item['meeting_course_url'] ?>" title="<?= htmlReady($texts['to_course']) ?>"> | ||
<?= Icon::create('seminar', 'clickable')->asImg(['class' => 'text-bottom']) ?> | ||
</a> | ||
</nav> | ||
</header> | ||
</article> | ||
<? endforeach; ?> | ||
</article> | ||
<? endif; ?> | ||
<? if (isset($items['upcoming'])): ?> | ||
<article class="studip toggle <?= \ContentBoxHelper::classes('meeting-widget-upcoming') ?>" id="meeting-widget-upcoming"> | ||
<header> | ||
<h1> | ||
<a href="<?= \ContentBoxHelper::href('meeting-widget-upcoming') ?>"> | ||
<?= htmlReady($texts['upcoming']) ?> | ||
</a> | ||
</h1> | ||
</header> | ||
<? foreach ($items['upcoming'] as $item): ?> | ||
<article class="studip toggle"> | ||
<header> | ||
<h1 onclick="window.open('<?= $item['meeting_join_url'] ?>', '_self');return false;"> | ||
<?= Icon::create('chat', 'inactive')->asImg(['class' => 'text-bottom']) ?> | ||
<?= htmlReady($item['item_title']) ?> | ||
</h1> | ||
<nav> | ||
<a href="<?= $item['meeting_join_url'] ?>" target="_blank"> | ||
<?= Icon::create('door-enter', 'clickable')->asImg(['class' => 'text-bottom']) ?> | ||
</a> | ||
<a href="<?= $item['meeting_course_url'] ?>"> | ||
<?= Icon::create('seminar', 'clickable')->asImg(['class' => 'text-bottom']) ?> | ||
</a> | ||
</nav> | ||
</header> | ||
</article> | ||
<? endforeach; ?> | ||
</article> | ||
<? endif; ?> | ||
<? else: ?> | ||
<section> | ||
<?= htmlReady($texts['empty']) ?> | ||
</section> | ||
<? endif; ?> | ||
</article> |
Oops, something went wrong.