Page Menu
Home
GitPull.it
Search
Configure Global Search
Log In
Files
F2912091
D42.1742288778.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
10 KB
Referenced Files
None
Subscribers
None
D42.1742288778.diff
View Options
diff --git a/includes/class-DailyEvents.php b/includes/class-DailyEvents.php
--- a/includes/class-DailyEvents.php
+++ b/includes/class-DailyEvents.php
@@ -1,6 +1,6 @@
<?php
-# Linux Day 2016 - List events daily
-# Copyright (C) 2016, 2017 Valerio Bozzolan, Ludovico Pavesi, Linux Day Torino
+# from Linux Day 2016 - now Suckless Conference
+# Copyright (C) 2016, 2017, 2018, 2019, 2020 Valerio Bozzolan, Ludovico Pavesi, Linux Day Torino
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -21,29 +21,47 @@
class DailyEvents {
/**
- * Get daily events from a conference and a chapter
+ * Get the daily Event(s) from a Conference and a Chapter ID
+ *
+ * As default the Event(s) are joined with Track, Chapter and Room.
*
* @param $conference object Conference
* @param $chapter object Chapter
- * @param $fields array Fields to be selected
+ * @param $fields array Fields to be selected from the full Event object
+ * @param $additional_conditions callable Callback that can be used to apply additional Query conditions. First argument: Query object.
* @return array
*/
- public static function fromConferenceChapter( $conference, $chapter, $fields = [] ) {
+ public static function fromConferenceChapter( $conference, $chapter, $fields = [], $additional_conditions = null ) {
$conference_ID = $conference->getConferenceID();
$chapter_ID = $chapter->getChapterID();
- $events = FullEvent::factoryByConferenceChapter( $conference_ID, $chapter_ID )
+ // prepare the query
+ $events_query = ( new QueryEvent() )
+ ->joinTrack()
+ ->joinChapter()
+ ->joinRoom()
+ ->whereConferenceID( $conference_ID )
+ ->whereChapterID( $chapter_ID )
->select( $fields )
->orderBy( Event::START )
- ->orderBy( Track::ORDER )
- ->queryResults();
+ ->orderBy( Track::ORDER );
+
+ // check if we should apply additional conditions
+ if( $additional_conditions ) {
+ $additional_conditions( $events_query );
+ }
+ // query all the Events in an array
+ $events = $events_query->queryResults();
+
+ // index all the Events
$incremental_hour = 0;
$last_hour = -1;
$last_event_ID = -1;
foreach( $events as $i => $event ) {
- // Remember that it's a JOIN with duplicates
+
+ // Remember that it's a JOIN with duplicates (TODO: untrue now I think)
if( $last_event_ID === $event->getEventID() ) {
unset( $events[ $i ] );
continue;
@@ -66,7 +84,8 @@
// Fill `->hour`
$event->hour = $incremental_hour;
- $last_event_ID = $event->event_ID;
+ // (TODO: remove, should work)
+ $last_event_ID = $event->getEventID();
$last_hour = $hour;
}
diff --git a/includes/class-QueryChapter.php b/includes/class-QueryChapter.php
new file mode 100644
--- /dev/null
+++ b/includes/class-QueryChapter.php
@@ -0,0 +1,82 @@
+<?php
+# Linux Day Torino website - classes
+# Copyright (C) 2020 Valerio Bozzolan
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Methods related to a QueryChapter class
+ */
+trait QueryChapterTrait {
+
+ /**
+ * Where the Chapter is...
+ *
+ * @param object $event Chapter
+ * @return self
+ */
+ public function whereChapter( $event ) {
+ return $this->whereChapterID( $event->getChapterID() );
+ }
+
+ /**
+ * Where the Chapter ID is...
+ *
+ * @param int $id Chapter ID
+ * @return self
+ */
+ public function whereChapterID( $id ) {
+ return $this->whereInt( $this->CHAPTER_ID, $id );
+ }
+
+ /**
+ * Join a generic table with the Chapter table
+ *
+ * @param string $type Join type
+ * @return self
+ */
+ public function joinChapter( $type = 'INNER' ) {
+
+ // build the:
+ // INNER JOIN chapter ON (chapter.chapter_ID = chapter_ID)
+ return $this->joinOn( $type, Chapter::T, Chapter::ID_, $this->CHAPTER_ID );
+ }
+
+}
+
+/**
+ * Utility used to Query a Chapter.
+ */
+class QueryChapter {
+
+ use QueryChapterTrait;
+
+ /**
+ * Full name of the column of the Chapter ID
+ */
+ protected $CHAPTER_ID = 'chapter_ID';
+
+ /**
+ * Constructor
+ */
+ public function __construct() {
+
+ parent::__construct();
+
+ $this->from( Chapter::T );
+
+ $this->defaultClass( Chapter::class );
+ }
+
+}
diff --git a/includes/class-QueryEvent.php b/includes/class-QueryEvent.php
--- a/includes/class-QueryEvent.php
+++ b/includes/class-QueryEvent.php
@@ -1,6 +1,6 @@
<?php
# Linux Day Torino website - classes
-# Copyright (C) 2018, 2019 Valerio Bozzolan, Linux Day Torino
+# Copyright (C) 2018, 2019, 2020 Valerio Bozzolan, Linux Day Torino
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -17,6 +17,9 @@
// load dependent traits
class_exists( QueryConference::class, true );
+class_exists( QueryChapter ::class, true );
+class_exists( QueryTrack ::class, true );
+class_exists( QueryRoom ::class, true );
/**
* Methods for a QueryEvent class
@@ -69,6 +72,9 @@
class QueryEvent extends Query {
use QueryEventTrait;
+ use QueryChapterTrait;
+ use QueryTrackTrait;
+ use QueryRoomTrait;
/**
* Univoque Event ID column name
@@ -129,16 +135,6 @@
->whereInt( EventUser::USER_, $user->getUserID() );
}
- /**
- * Join a table with the Chapter table
- *
- * @param string $type Join type
- * @return self
- */
- public function joinChapter( $type = 'INNER' ) {
- return $this->joinOn( $type, 'chapter', 'chapter.chapter_ID' , $this->CHAPTER_ID );
- }
-
/**
* Join a table with the Track table
*
diff --git a/includes/class-QueryRoom.php b/includes/class-QueryRoom.php
new file mode 100644
--- /dev/null
+++ b/includes/class-QueryRoom.php
@@ -0,0 +1,82 @@
+<?php
+# Linux Day Torino website - classes
+# Copyright (C) 2020 Valerio Bozzolan
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Methods related to a QueryRoom class
+ */
+trait QueryRoomTrait {
+
+ /**
+ * Where the Room is...
+ *
+ * @param object $event Room
+ * @return self
+ */
+ public function whereRoom( $event ) {
+ return $this->whereRoomID( $event->getRoomID() );
+ }
+
+ /**
+ * Where the Room ID is...
+ *
+ * @param int $id Room ID
+ * @return self
+ */
+ public function whereRoomID( $id ) {
+ return $this->whereInt( $this->ROOM_ID, $id );
+ }
+
+ /**
+ * Join a generic table with the Room table
+ *
+ * @param string $type Join type
+ * @return self
+ */
+ public function joinRoom( $type = 'INNER' ) {
+
+ // build the:
+ // INNER JOIN room ON (room.room_ID = room_ID)
+ return $this->joinOn( $type, Room::T, Room::ID_, $this->ROOM_ID );
+ }
+
+}
+
+/**
+ * Utility used to Query a Room.
+ */
+class QueryRoom {
+
+ use QueryRoomTrait;
+
+ /**
+ * Full name of the column of the Room ID
+ */
+ protected $ROOM_ID = 'room_ID';
+
+ /**
+ * Constructor
+ */
+ public function __construct() {
+
+ parent::__construct();
+
+ $this->from( Room::T );
+
+ $this->defaultClass( Room::class );
+ }
+
+}
diff --git a/includes/class-QueryTrack.php b/includes/class-QueryTrack.php
new file mode 100644
--- /dev/null
+++ b/includes/class-QueryTrack.php
@@ -0,0 +1,82 @@
+<?php
+# Linux Day Torino website - classes
+# Copyright (C) 2020 Valerio Bozzolan
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Methods related to a QueryTrack class
+ */
+trait QueryTrackTrait {
+
+ /**
+ * Where the Track is...
+ *
+ * @param object $event Track
+ * @return self
+ */
+ public function whereTrack( $event ) {
+ return $this->whereTrackID( $event->getTrackID() );
+ }
+
+ /**
+ * Where the Track ID is...
+ *
+ * @param int $id Track ID
+ * @return self
+ */
+ public function whereTrackID( $id ) {
+ return $this->whereInt( $this->TRACK_ID, $id );
+ }
+
+ /**
+ * Join a generic table with the Track table
+ *
+ * @param string $type Join type
+ * @return self
+ */
+ public function joinTrack( $type = 'INNER' ) {
+
+ // build the:
+ // INNER JOIN track ON (track.track_ID = track_ID)
+ return $this->joinOn( $type, Track::T, Track::ID_, $this->TRACK_ID );
+ }
+
+}
+
+/**
+ * Utility used to Query a Track.
+ */
+class QueryTrack {
+
+ use QueryTrackTrait;
+
+ /**
+ * Full name of the column of the Track ID
+ */
+ protected $TRACK_ID = 'track_ID';
+
+ /**
+ * Constructor
+ */
+ public function __construct() {
+
+ parent::__construct();
+
+ $this->from( Track::T );
+
+ $this->defaultClass( Track::class );
+ }
+
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Mar 18, 10:06 (12 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
825008
Default Alt Text
D42.1742288778.diff (10 KB)
Attached To
Mode
D42: refactor with new Query classes
Attached
Detach File
Event Timeline
Log In to Comment