summaryrefslogtreecommitdiff
path: root/public/app/controllers/Cms.php
diff options
context:
space:
mode:
authorGeo Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-04-27 18:16:44 +0300
committerGeo Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-04-27 18:16:44 +0300
commitb52e052bd3741c1ddf1bdaa43079ba5a9eafc8bd (patch)
treeebf54306edc20705544ea4d10cb12b34a66c05cc /public/app/controllers/Cms.php
parent187335950742b4c7ec011ede6e6d1ae86662cb1f (diff)
downloadclassroom-b52e052bd3741c1ddf1bdaa43079ba5a9eafc8bd.tar.gz
classroom-b52e052bd3741c1ddf1bdaa43079ba5a9eafc8bd.tar.bz2
classroom-b52e052bd3741c1ddf1bdaa43079ba5a9eafc8bd.zip
setting blueprint in action
Diffstat (limited to 'public/app/controllers/Cms.php')
-rw-r--r--public/app/controllers/Cms.php259
1 files changed, 259 insertions, 0 deletions
diff --git a/public/app/controllers/Cms.php b/public/app/controllers/Cms.php
new file mode 100644
index 0000000..306bc88
--- /dev/null
+++ b/public/app/controllers/Cms.php
@@ -0,0 +1,259 @@
+<?php
+
+namespace app\controllers;
+
+use Registry;
+use Render;
+use app\controllers\Auth;
+use app\models\Cms_model;
+use app\extends\Cache_service;
+
+/** CMS class
+ * (Content Management System)
+ *
+ * Serves the content;
+ * Reponds to all front-end front-office requests
+ *
+ */
+class Cms {
+
+
+ ## PERMITION
+ ## -------------------------------------------------------------------------
+
+
+ /** is admin or permited
+ *
+ * shortcut method for checking access authorization
+ *
+ * returns true if user belogns to the admin group
+ * OR has the specified permition/privilege
+ *
+ * @param $privilege_id (int)
+ *
+ * NOTE:
+ * unlike the other authorization methods ...
+ * $privilege_id is NOT an array but a single privilege id
+ *
+ * @return true|false
+ */
+ private static function is_admin_or_permited( $privilege_id )
+ {
+ return (
+ Auth::in_admin_group()
+ || Auth::hasPermition([ $privilege_id ])
+ );
+ }
+
+
+
+ ## FILES
+ ## -------------------------------------------------------------------------
+
+
+ /** serve file by file_path
+ * (request is valid only for admin users)
+ *
+ * @param $file_path (string): relative file path
+ * GET @param type (string) : media-type of file
+ */
+ public static function serve_file($file_path)
+ {
+ $file = self::get_file_attributes($file_path);
+
+ // if user is authorized
+ if (self::is_admin_or_permited($file['privilege_id'])) {
+
+ $media_type = Registry::get('REQUEST')->GET['type']; // get media-type
+ $real_path = MEDIA_STORAGE_ROOT . $file_path; // construct real path
+
+ if (!file_exists($real_path)) {
+ Render::view('error/404');
+
+ } else {
+ Render::file($real_path, $media_type);
+ }
+
+ } else {
+ Render::view('error/404', [
+ 'error_code' => 403,
+ 'moto' => 'Forbidden',
+ 'message' => ''
+ ]);
+ }
+ }
+
+
+ /** get_file_attributes
+ *
+ * returns attributes of a file
+ * (medias are proxied for speed optimization)
+ *
+ * @param $path (string) : file path
+ * @return $file attributes --or-- false
+ */
+ private static function get_file_attributes($path)
+ {
+ $medias = Cache_service::files_attributes();
+
+ foreach($medias as $key => $medi) {
+
+ if ($medi['path'] == $path) {
+
+ return $medi;
+ }
+ }
+
+ return false;
+ }
+
+
+
+ ## COURSES
+ ## -------------------------------------------------------------------------
+
+
+ /** course
+ * prepare and render the course view
+ *
+ * @param $id : course id
+ */
+ public static function course($id)
+ {
+ $id = intval($id); // course id
+
+ // collect all data needed for course view
+ // --- -- -- - - -
+ $cache = Cache_service::courses_struct();
+ $tree = $cache['tree'];
+ $breadcrumbs = $cache['breadcrumbs'];
+ $lessons = Cms_model::lessons_of_course(intval($id));
+
+ // find parent_ids of current category (to open the menu tree)
+ // ---
+ $course_path = [];
+ foreach($breadcrumbs[$id]['parents'] as $key => $parent) {
+ $course_path[] = intval($parent['id']);
+ }
+ $course_path[] = $id;
+
+ // then Render
+ // --- -- -- - - -
+ Render::view('templates/course', [
+ 'id' => $id,
+ 'title' => $breadcrumbs[ $id ]['rec']['label'],
+ 'categories' => $tree,
+ 'breadcrumbs' => $breadcrumbs,
+ 'lessons' => $lessons,
+ 'course_path' => $course_path,
+ // needed by footer
+ 'entity' => Cache_service::pages_list()
+ ]);
+ }
+
+
+
+ ## LESSONS
+ ## -------------------------------------------------------------------------
+
+
+
+ /** lesson
+ *
+ * check if user is authorized to view the content;
+ * if so, prepare and render the lesson view
+ *
+ * @param $id : lesson id
+ */
+ public static function lesson($id)
+ {
+ $id = intval($id); // lesson id
+
+ $lesson = Cms_model::lesson($id); // get lesson
+ $course_id = $lesson['course_id']; // get course id
+ $pri_id = $lesson['privilege_id']; // privilege needed
+
+
+ if (self::is_admin_or_permited($pri_id)) {
+
+ // collect all data needed for course view
+ // --- -- -- - - -
+ $cache = Cache_service::courses_struct();
+ $tree = $cache['tree'];
+ $breadcrumbs = $cache['breadcrumbs'];
+
+ // find parent_ids of current category (to open the menu tree)
+ // ---
+ $course_path = [];
+ foreach($breadcrumbs[$course_id]['parents'] as $key => $parent) {
+ $course_path[] = intval($parent['id']);
+ }
+ $course_path[] = intval($course_id);
+
+ // NOTE: CRITICAL:
+ // do not pass Class::method directly to the eported variables
+ // $entity = Cache_service::pages_list();
+
+ // var_dump($entity); die();
+
+ // then Render
+ // --- -- -- - - -
+ Render::view('templates/lesson', [
+ // main content
+ 'id' => $id,
+ 'course_id' => $course_id,
+ 'title' => $lesson['title'],
+ 'lesson' => $lesson,
+ // needed for side panel and breadcrunbs
+ 'categories' => $tree,
+ 'breadcrumbs' => $breadcrumbs,
+ 'course_path' => $course_path,
+ // needed by footer
+ 'entity' => Cache_service::pages_list()
+ ]);
+
+ } else { // user is not authorized
+ Render::view('error/general', [
+ 'title' => 'Δεν έχετε πρόσβαση',
+ 'message' => 'Θα πρέπει να αγοράσετε το πακέτο πρόσβασης '
+ . $pri_id
+ .' για να δείτε το περιεχόμενο!
+ <br><br>
+ Αγόρασε τώρα το <button class="btn">πακέτο πρόσβασης '. $pri_id .'</button>'
+ ]);
+ }
+
+ }
+
+
+ ## PAGES
+ ## -------------------------------------------------------------------------
+
+
+ /** lesson
+ *
+ * check if user is authorized to view the content;
+ * if so, prepare and render the lesson view
+ *
+ * @param $id : lesson id
+ */
+ public static function page($id)
+ {
+ $id = intval($id); // lesson id
+
+ $pages = Cache_service::pages_list();
+ $page = $pages[$id];
+
+ // then Render
+ // --- -- -- - - -
+ Render::view('templates/page', [
+ // main content
+ 'id' => $id,
+ 'page' => $page,
+ // needed by footer
+ 'entity' => $pages
+ ]);
+
+ }
+
+}