4O4
- Not found- -
From 68fc9e55e538e03f94509731ab41a0c8cf96710f Mon Sep 17 00:00:00 2001
From: George Halkiadakis
- Παρακαλώ ελέγξτε το email σας και ακολουθήστε το σύνδεσμο ενεργοποίησης
- που σας 'εχει αποσταλεί, ώστε να έχετε πρόσβαση σε επιπλέον περιεχόμενο του site
-
- Υπάρχει ήδη χρήστης με αυτό το email. Αν δεν θυμάστε το password
- μπορείτε να κάνετε επαναφορά του ακολουθώντας
- αυτό το σύνδεσμο.
-
- =$item['info']?>
- {$day} {$month} {$year} Ίσως κάποιο εισαγωγικό κείμενο, στατικό ή δυναμικό.
- Pellentesque non mauris ut orci volutpat sollicitudin ut vel ligula. Nullam et leo eu ante ornare ultrices a a leo. Proin non accumsan ex, sit amet finibus purus.
-
- Vestibulum posuere maximus nisl eget consequat. Etiam venenatis lectus sed libero vestibulum viverra. Sed nec nibh ac nulla venenatis tincidunt eu ut diam. Sed tincidunt, arcu sit amet pharetra ornare, libero nunc placerat nunc, at dictum dui diam sit amet metus. Sed venenatis vehicula nisl at hendrerit.
- Επιτυχής Εγγραφή
- Αποτυχία Εγγραφής
-
- το παρόν αυτοποιημένο email σάς έχει σταλεί γιατί έχει γίνει αίτημα εγγραφής σας στο Classroom.
-
- Όνομα επαφής: ". $envelope['name'] ."
- Email : ". $envelope['email'] ."
-
- Για να ενεργοποιήσετε την πρόσβασή σας στο site θα πρέπει να παρακαλώ πατήστε στον
- παρακάτω σύνδεσμο url
- .
-
-
- Μετά την ενεργοποίηση θα έχετε πρόσσβαση στο περιεχόμενο του site.
-
- Μην απαντήσετε στο email γιατί δεν υπάρχει φυσική επαφή η οποία να λαμβάνει τυχόν replies.
";
- if (!$mail->send()) {
- return false;
- } else {
- return true;
- }
-
- }
-
-
-
-
-}
-
-
-
-
-
-/**
- *
- *
-
-Optimization per concept alternative technologies
---- -- -- - - -
-
-## Session
-File Session
-Database Session
-Redis Session
-Memcached Session
-
----
-
-## Cache
-File Cache
-Database Cache
-Redis Cache
-Memcashed Cache
-
----
-
-## Log
-File Log
-Database Log
-Log event to Slack
-Log event to Email
-
- *
- *
- */
-
-/** custom email api
- *
- * host : https://api.roptron.gr
- * apikey : md5(hash)-substring(0,5, md5(service)) 8668d1c4a8f5aba236a8f821d148340f-0c83f
- * message : serialize([
- * from[email] => from name
- * replyTo[email] => reply-to-Name
- * to => [
- * email => email-name
- * secondemail => another email name
- * ]
- * type => html
- * charset => utf8
- * subject => mail subject
- * mailBody => html string
- * ])
- *
- */
-
-/** Several custom APIs
- *
- * Mailer
- *
- * sendpulse
- * rU8WEmcHsRcEQaH
- * rU8WEmcHsRcEQaH
- *
- * mailjet
- * piipiis@g
- * EN6Xg8!99ZTKaYp7
- *
- *
- * sendGrid
- * piipiis
- * EN6Xg899ZTKU8WEmcHsR54321
- *
- *
- * time4vps...
- * https://community.time4vps.com/discussion/75/are-any-ports-blocked-by-time4vps
- *
- * test activation code:
- * ca42d68cfba5fbbafeacc010b8e3a551
- *
- *
- *
- * MAIL API
- * --- -- -- - - -
- * client = ip/mp5(IP) or domain/md5(ref_domain)
- * token = md5(client + timestamp + rand(0,10000))
- *
- * api : auth_content : client : token
- * --- : --- : --- : ---
- * mail : ip|domain : md5(*) : md5(...) -> send an email
- * image : ip|domain : md5(*) : md5(...) -> proccess an image (resize|crop|convert)
- * slack : ip|domain : md5(*) : md5(...) -> send a slack message to channel
- * database : ip|domain : md5(*) : md5(...) ->
- *
- */
-
\ No newline at end of file
diff --git a/html/app/models/Jorge.php b/html/app/models/Jorge.php
deleted file mode 100644
index 5d79007..0000000
--- a/html/app/models/Jorge.php
+++ /dev/null
@@ -1,172 +0,0 @@
- [],
- 'relate' => [],
- 'fields' => []
- ];
-
- public function __construct()
- {
- $db = Registry::use('database');
-
- // get all tables
- $tableList = $db->runQuery("SHOW TABLES", []);
-
- // get all CREATE TABLE statements
- foreach($tableList as $tableArray) {
- $table = array_shift($tableArray);
- $create = $db->runQuery("SHOW CREATE TABLE {$table}", []);
- $this->tables['create'][$table] = $create[0]['Create Table'];
- }
-
- // define relations
- $this->tables['relate'] = [
-
- 'lesson' => [
- 'course' => 'course.id = lesson.course_id',
- 'lesson_media' => 'lesson_media.lesson_id = lesson.id',
- 'lesson_privilege' => 'lesson_privilege.lesson_id = lesson.id'
- ],
-
- 'page' => [
- 'page_media' => 'page_media.page_id = page.id'
- ],
-
- 'user' => [
- 'user_privilege' => 'user_privilege.user_id = user.id'
- ],
-
- 'privilege' => [
- 'user_privilege' => 'user_privilege.privilege_id = privilege.id'
- ],
-
- ];
-
- $this->extractTableFields();
-
- // return true;
- }
-
-
- /** Create...
- * one or more database tables
- * ---
- * @param $datasource (string|void) : table name or none
- * if none then all tables will be created
- * @return (boolean)
- *
- * NOTE:
- * for safety reasons this method is not executing SQL;
- * it just echoes the SQL that needs to be executed in
- * order to crate all database tables.
- */
- public function create($datasource = '')
- {
- // if no datasource passed then datasource is all tables
- if ($datasource == '') {
- $datasource = array_keys(self::$tables['create']);
-
- } else {
- // if datasource exist, make it an array
- if (array_key_exists($datasource, self::$tables['create'])) {
- $datasource = [ $datasource ];
-
- } else {
- // table does not exist
- return fasle;
- }
- }
-
- $sql = "";
- foreach( $datasource as $table ) {
- $sql .= "-- CREATE ". $table .";\n". self::$tables['create'][$table] . "\n\n";
- }
-
- return ['sql' => $sql];
- }
-
-
- /** Calculate fields of every table
- * ---
- * Parse every CREATE SQL statement and extract list of fields;
- * Algorithm implements linear-parsing (faster than a recursive one)
- */
- private function extractTableFields()
- {
- // words used by SQL that can not be field names
- $nonFields = ['PRIMARY', 'KEY', '(', ')', 'CONSTRAINT', 'UNIQUE']; // reduced list (used on CREATE)
-
- foreach( $this->tables['create'] as $table => $sqlCreate ) {
-
- $fields = []; // variable to hold the extracted fields
-
- // get text between first open-parentesis and last close-parentesis
- // this is waht lies between 'CREATE TABLE table(' and ') [ENGINE whatever]'
- // (including the patenteses)
- preg_match_all(
- "/\((((?>[^()]+)|(?R))*)\)/",
- str_replace("\n", '', $sqlCreate),
- $match
- );
- // remove 1st+last parentesis
- $mainDefinitions = substr($match[0][0], 1, -1);
-
- // replace comma (,) on sub-parenthesis
- // ex: 'decimal(18, 2)' turns to 'decimal(18: 2)'
- // or: 'PRIMARY KEY (id1, id2)' turns to 'PRIMARY KEY (id1: id2)'
- $sentences = preg_replace(
- '/\\(([0-9a-zA-Z_`]*)[ ,]([0-9a-zA-Z_` ]*)\\)/',
- '($1:$2)',
- $mainDefinitions,
- -1
- );
-
- // devide the banth of sentences to field definitions
- $defines = explode(',', $sentences);
-
- // now each denine holds a full field definition
- // like: `ID` int(11) NOT NULL AUTO_INCREMENT
-
- foreach($defines as $def) {
- // check the first term of each sentence
- $terms = explode(' ', trim($def,));
- $term = array_shift($terms);
-
- if (!in_array($term, $nonFields)) {
- $fields[ str_replace('`', '', $term) ] = implode(' ', $terms);
- }
- }
-
- $this->tables['fields'][$table] = $fields;
- }
-
- return;
- }
-
- public function databaseDocumentation()
- {
- return $this->tables['fields'];
- }
-
-}
\ No newline at end of file
diff --git a/html/app/models/_info.md b/html/app/models/_info.md
deleted file mode 100644
index 5504523..0000000
--- a/html/app/models/_info.md
+++ /dev/null
@@ -1,150 +0,0 @@
-
-# info about the structrure of the models
-
-According to the former impementation (atcom) the project will need to handle 200+ tables.
-The former project includes 209 tables with 5 or more rows (and 325 tables totaly)
-
-
-
-## Database schema
-
-Main tables and recomended constraints:
-
-```
-SET NAMES utf8;
-SET time_zone = '+00:00';
-SET foreign_key_checks = 0;
-SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
-
-SET NAMES utf8mb4;
-
-DROP TABLE IF EXISTS `course`;
-CREATE TABLE `course` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `parent_id` int(11) NOT NULL COMMENT 'if 0 then this is a root course',
- `label` varchar(140) COLLATE utf8mb4_unicode_ci NOT NULL,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
-
-DROP TABLE IF EXISTS `lesson`;
-CREATE TABLE `lesson` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `course_id` int(11) NOT NULL,
- `title` varchar(140) COLLATE utf8mb4_unicode_ci NOT NULL,
- `body` text COLLATE utf8mb4_unicode_ci NOT NULL,
- `published` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0 = unpublished, 1 = published',
- PRIMARY KEY (`id`),
- KEY `course_id` (`course_id`),
- CONSTRAINT `lesson_ibfk_1` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`),
- CONSTRAINT `lesson_ibfk_2` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
-
-DROP TABLE IF EXISTS `lesson_media`;
-CREATE TABLE `lesson_media` (
- `lesson_id` int(11) NOT NULL,
- `media_id` int(11) NOT NULL,
- PRIMARY KEY (`lesson_id`,`media_id`),
- KEY `media_id` (`media_id`),
- CONSTRAINT `lesson_media_ibfk_1` FOREIGN KEY (`lesson_id`) REFERENCES `lesson` (`id`),
- CONSTRAINT `lesson_media_ibfk_2` FOREIGN KEY (`lesson_id`) REFERENCES `lesson` (`id`),
- CONSTRAINT `lesson_media_ibfk_3` FOREIGN KEY (`lesson_id`) REFERENCES `lesson` (`id`),
- CONSTRAINT `lesson_media_ibfk_4` FOREIGN KEY (`media_id`) REFERENCES `media` (`id`),
- CONSTRAINT `lesson_media_ibfk_5` FOREIGN KEY (`lesson_id`) REFERENCES `lesson` (`id`) ON DELETE NO ACTION,
- CONSTRAINT `lesson_media_ibfk_6` FOREIGN KEY (`media_id`) REFERENCES `media` (`id`) ON DELETE NO ACTION,
- CONSTRAINT `lesson_media_ibfk_7` FOREIGN KEY (`lesson_id`) REFERENCES `lesson` (`id`) ON DELETE NO ACTION,
- CONSTRAINT `lesson_media_ibfk_8` FOREIGN KEY (`media_id`) REFERENCES `media` (`id`) ON DELETE NO ACTION
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
-
-DROP TABLE IF EXISTS `lesson_privilege`;
-CREATE TABLE `lesson_privilege` (
- `lesson_id` int(11) NOT NULL,
- `privilege_id` int(11) NOT NULL COMMENT 'minimum privilege required to access the lesson',
- KEY `lesson_id` (`lesson_id`),
- KEY `privilege_id` (`privilege_id`),
- CONSTRAINT `lesson_privilege_ibfk_1` FOREIGN KEY (`lesson_id`) REFERENCES `lesson` (`id`),
- CONSTRAINT `lesson_privilege_ibfk_2` FOREIGN KEY (`privilege_id`) REFERENCES `privilege` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
-
-DROP TABLE IF EXISTS `media`;
-CREATE TABLE `media` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `label` varchar(140) COLLATE utf8mb4_unicode_ci NOT NULL,
- `type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
- `path` varchar(320) COLLATE utf8mb4_unicode_ci NOT NULL,
- `referable` tinyint(4) NOT NULL DEFAULT '1' COMMENT '0 = hidden, 1 = referable',
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
-
-DROP TABLE IF EXISTS `page`;
-CREATE TABLE `page` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `title` varchar(140) COLLATE utf8mb4_unicode_ci NOT NULL,
- `body` text COLLATE utf8mb4_unicode_ci NOT NULL,
- `published` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0 = unpublished; 1 = published',
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
-
-DROP TABLE IF EXISTS `page_media`;
-CREATE TABLE `page_media` (
- `page_id` int(11) NOT NULL,
- `media_id` int(11) NOT NULL,
- KEY `page_id` (`page_id`),
- KEY `media_id` (`media_id`),
- CONSTRAINT `page_media_ibfk_1` FOREIGN KEY (`page_id`) REFERENCES `page` (`id`) ON DELETE NO ACTION,
- CONSTRAINT `page_media_ibfk_2` FOREIGN KEY (`media_id`) REFERENCES `media` (`id`) ON DELETE NO ACTION
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
-
-DROP TABLE IF EXISTS `privilege`;
-CREATE TABLE `privilege` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `alias` varchar(8) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'keep it simple; use latin',
- `label` varchar(140) COLLATE utf8mb4_unicode_ci NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `alias` (`alias`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
-
-DROP TABLE IF EXISTS `privilege_inherit`;
-CREATE TABLE `privilege_inherit` (
- `higher_id` int(11) NOT NULL COMMENT 'higher priviledges inherit (include) lower ones',
- `lower_id` int(11) NOT NULL,
- PRIMARY KEY (`higher_id`,`lower_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
-
-DROP TABLE IF EXISTS `user`;
-CREATE TABLE `user` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `first_name` int(11) NOT NULL,
- `last_name` int(11) NOT NULL,
- `email` int(11) NOT NULL,
- `expiration` int(11) NOT NULL COMMENT 'account expiration date; 0 = never',
- `password` int(11) NOT NULL,
- `salt` int(11) NOT NULL,
- `otp` int(11) NOT NULL COMMENT 'one time password for reset password',
- `otp_expiration` int(11) NOT NULL,
- `active` int(11) NOT NULL COMMENT 'account flag; 1=active, 0=inactive',
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
-
-DROP TABLE IF EXISTS `user_privilege`;
-CREATE TABLE `user_privilege` (
- `user_id` int(11) NOT NULL,
- `privilege_id` int(11) NOT NULL,
- PRIMARY KEY (`user_id`,`privilege_id`),
- KEY `privilege_id` (`privilege_id`),
- CONSTRAINT `user_privilege_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
- CONSTRAINT `user_privilege_ibfk_2` FOREIGN KEY (`privilege_id`) REFERENCES `privilege` (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
-```
-
-
diff --git a/html/app/models/admin/History_model.php b/html/app/models/admin/History_model.php
deleted file mode 100644
index 04ce630..0000000
--- a/html/app/models/admin/History_model.php
+++ /dev/null
@@ -1,34 +0,0 @@
-query(
- "INSERT INTO history
- (user_id, `type`, `message`, `note`, `ip`)
- VALUES
- (:uid, :type, :msg, :note, :ip)",
- [
- ':uid' => $user_id,
- ':type' => $type,
- ':msg' => $message,
- ':note' => $note,
- ':ip' => Registry::get('REQUEST')->IP
- ]
- )->lastInsertID();
-
- }
-
-
-
-}
\ No newline at end of file
diff --git a/html/app/models/admin/User_model.php b/html/app/models/admin/User_model.php
deleted file mode 100644
index 62d99db..0000000
--- a/html/app/models/admin/User_model.php
+++ /dev/null
@@ -1,263 +0,0 @@
-query(
- "SELECT * FROM user WHERE email = :email AND active = 1",
- [ ':email' => $email ]
- )->getFirst();
-
- // if no user, return false
- if ($user === false) return false;
-
- return $user;
- }
-
-
- /** get user (by index key)
- *
- * user detailed array
- * includes all user properties + granted roles + privileges
- *
- * @param $id (int) : user id
- * @param $value (string)
- */
- public static function getUser($id)
- {
- $user = Registry::use('database')->query(
- "SELECT user.*,
- ( -- construct array (json) of roles granted to user
- SELECT CONCAT(
- '[',
- GROUP_CONCAT(role.id),
- ']'
- )
- FROM `role`
- WHERE role.id IN (
- SELECT user_role.role_id
- FROM user_role
- WHERE user_role.user_id = :id
- )
- ) AS Roles_json,
- ( -- construct array of (root-)privileges granted to user
- SELECT CONCAT(
- '[',
- GROUP_CONCAT(privilege.id),
- ']'
- )
- FROM privilege
- WHERE privilege.id IN (
- SELECT user_privilege.privilege_id
- FROM user_privilege
- WHERE user_privilege.user_id = :id
- )
- ) AS RootPrivileges_json,
- ( -- construct array of (root-)privileges granted to user
- SELECT CONCAT(
- '[',
- GROUP_CONCAT(privilege.includes),
- ']'
- )
- FROM privilege
- WHERE privilege.id IN (
- SELECT user_privilege.privilege_id
- FROM user_privilege
- WHERE user_privilege.user_id = :id
- )
- ) AS SubPrivileges_json
- FROM user
- WHERE id = :id",
- [ ':id' => $id ]
- )->getFirst();
-
-
- // if no user, return false
- if ($user === false) return false;
-
-
- // TODO:
- // * merge root+sub privilede lists
- // * convert json strings to php arrays
-
-
- // TODO:
- // cache user super array
-
- return $user;
- }
-
-
- /** create user
- *
- * creates user record;
- * assigns privileged (usualy defaults);
- * creates activation_code
- *
- * @param $data (array): Request->POST array
- * @param $password (string): secure hashed password
- *
- * @return $activation_code
- *
- */
- public static function registerUser($data, $password, $privileges = DEFAULT_PRIVILEGES)
- {
- $required_fields = [
- 'name',
- 'surname',
- 'email',
- 'password'
- ];
-
- // check required fields
- $isOK = true;
- foreach($required_fields as $fi) {
- if (empty($data[$fi])) $isOK = false;
- }
- // if empty required fields exists ... return false
- if (!$isOK) {
- return [ "success" => false, 'error' => EMPTY_REQUIRED_FIELDS ];
- }
-
-
- // TODO:
- // check if email exists
- // ...
-
- // create an activation code
- $activation_code = md5($data['email'].time().rand(0, 10000));
-
- // if isOK go on and...
- // create user record
- $new_user_id = Registry::use('database')->query(
- "INSERT INTO user
- (`first_name`, `last_name`, `email`, `password`, `active`, `activation`)
- VALUES
- (:nam, :surname, :email, :pass, :act, :actcode)",
- [
- ':nam' => $data['name'],
- ':surname' => $data['surname'],
- ':email' => $data['email'],
- ':pass' => $password,
- ':act' => 0, // needs email confirmation to be activated ...
- ':actcode' => $activation_code // ... with the activation code
- ]
- )->lastInsertID();
-
- // set default privileges
- // self::set_user_privileges($new_user_id, $privileges);
-
- // update history
- History::trackUserAccess($new_user_id, TRACK_ACCOUNT, 'Create User Account');
-
- // return success and user id
- return [
- "success" => true,
- 'id' => $new_user_id ,
- 'activation' => $activation_code
- ];
- }
-
-
- /** activate
- *
- * check if activation code is valid;
- * if valid, set account active;
- *
- * @param $ticket (hex/MD5): activation code;
- *
- */
- public static function activate($ticket)
- {
- $user = Registry::use('database')->query(
- "SELECT * FROM user WHERE activation = :ticket",
- [ 'ticket' => $ticket ]
- )->getFirst();
-
- // if no user with this activation code, return false
- if ($user === false) return false;
-
- // remove activation code from user record
- Registry::use('database')->runQuery(
- "UPDATE user
- SET active = 1, `activation` = NULL
- WHERE activation = :ticket",
- [ 'ticket' => $ticket ]
- );
-
- // update history
- History::trackUserAccess($user['id'], TRACK_ACCOUNT, 'User Account Activated');
-
- return true;
-
- }
-
-
-}
-
-/* example query getUser (super-array)
---- -- -- - - -
-
-SELECT user.*,
-( -- array (json) of roles granted to user
- SELECT CONCAT('[', GROUP_CONCAT(role.id), ']')
- FROM `role`
- WHERE role.id IN (
- SELECT user_role.role_id
- FROM user_role
- WHERE user_role.user_id = 1
- )
-) AS Roles_json,
-(
- SELECT CONCAT(
- '[',
- GROUP_CONCAT(privilege.id),
- ']'
- )
- FROM privilege
- WHERE privilege.id IN (
- SELECT user_privilege.privilege_id
- FROM user_privilege
- WHERE user_privilege.user_id = 1
- )
-) AS RootPrivileges_json,
-(
- SELECT CONCAT( -- array of array of sub-privileges
- '[',
- GROUP_CONCAT( -- array (json) of subprivileges
- (
- SELECT CONCAT(
- '[',
- GROUP_CONCAT(included_id),
- ']'
- )
- FROM privilege_includes
- WHERE privilege_id = privilege.id
- )
- ),
- ']'
- )
- FROM privilege
- WHERE privilege.id IN (
- SELECT user_privilege.privilege_id
- FROM user_privilege
- WHERE user_id = 1
- )
-) AS SubPrivileges_json
-FROM user
-WHERE id = 1
---- */
\ No newline at end of file
diff --git a/html/app/models/cms/Media_model.php b/html/app/models/cms/Media_model.php
deleted file mode 100644
index 6a4a681..0000000
--- a/html/app/models/cms/Media_model.php
+++ /dev/null
@@ -1,36 +0,0 @@
-, rights =>, path => ]
-
- // validate ticket
- // ValidateAccess::for($ticket)
-
- // serve
- // header("Content-type: type");
- // passthru('cat $media_path');
-
-
- return Registry::use('database')->query(
- "SELECT * FROM pages
- WHERE FullFriendlyUrl = :url AND IsActive = 1",
- [ ':url' => $url ]
- )->getFirst();
- }
-
-}
-
-
-
-// check:
-// https://stackoverflow.com/questions/1353850/serve-image-with-php-script-vs-direct-loading-an-image
\ No newline at end of file
diff --git a/html/app/models/cms/Page_model.php b/html/app/models/cms/Page_model.php
deleted file mode 100644
index fda5fb1..0000000
--- a/html/app/models/cms/Page_model.php
+++ /dev/null
@@ -1,18 +0,0 @@
-query(
- "SELECT * FROM pages
- WHERE FullFriendlyUrl = :url AND IsActive = 1",
- [ ':url' => $url ]
- )->getFirst();
- }
-
-}
\ No newline at end of file
diff --git a/html/app/models/market/Market_repository.php b/html/app/models/market/Market_repository.php
deleted file mode 100644
index 1338426..0000000
--- a/html/app/models/market/Market_repository.php
+++ /dev/null
@@ -1,235 +0,0 @@
- "SELECT * FROM cars WHERE age = :Age"
- * ... won't make your code sexier nor easier to read; it will just increase
- * your label's entropy and make trickier to pick your next sensable label;
- *
- * repository classes include two methods (inherited by the abstract, so
- * you do not need to implement something more than just construct
- * the $repository array)
- * ** pull: for pulling a query by a friendly name
- * ** echo: optional method used by some devolopment tools
- *
- * TODO: development tool using echo is still in progress
- */
-class Market_repository extends Repository
-{
- //// use Repository; // repository trait includes
- //// // a method to pull an entity of the gathering
- //// // and method to (TODO:) ...
-
- /** repository is an array of Prepare SWL queries;
- * each query is attached to the array via a friendly label;
- *
- * NOTE: (PROPOSAL)
- * ---
- * about the label:
- * 1. keep names short descriptive but not too long
- * 2. main entity/entities shall be UPPERCASED
- * 3. determinands/adjectives shall be Cappitalized
- * 4. words are connected with underscore (_)
- * 5. if SQL inludes bind-holderd, label shall be suffixed with '_by:'
- * followed by holder names connected with undercores (case-sensitively)
- *
- * about the data-bind holders (if present):
- * 1. all holders are prefixed with ':'
- * 2. holder name shall begin with a letter and contain one word.
- *
- * example:
- * 'Active_EMPLOYEES_by:Age_CityID' => "SELECT Em.*, c.*
- * FROM employee Em LEFT JOIN city c ON c.id = Em.city_id
- * WHERE c.id = :CityID AND Em.age = :Age"
- *
- * It is recommended to leave a descriptive comment befor each declaration
- * and you may also include sql-comments inside the query.
- */
- public static $repository = [
-
- // PRODUCTS by: storeID, ProductUrl
- // picks all product properties
- // + default image + price for certain store
- 'Active_PRODUCT_by:storeID_ProductUrl' =>
- "SELECT p.*,
- pc.ID AS ProductCategory,
- pc.Hierarchy,
- pc.FullFriendlyUrl AS `Path`,
- prices.ProductPrice_OriginalPrice AS Price,
- prices.ProductPrice_DiscountedPrice AS DiscountPrice,
- prices.UnitMeasurePrice_OriginalPrice AS PerUnitPrice,
- prices.UnitMeasurePrice_DiscountedPrice AS PerUnitDiscountPrice,
- b.Title BrandName
- FROM products p
- LEFT JOIN products_to_product_categories p2pc ON p.ID = p2pc.SimpleProductID
- LEFT JOIN product_categories pc ON p2pc.ProductCategoryID = pc.ID
- LEFT JOIN prices ON p.SKU = prices.SKU
- LEFT JOIN products_to_images p2i ON p2i.SimpleProductID = p.ID
- LEFT JOIN assets ON assets.ID = p2i.ImageID
- LEFT JOIN brands b ON b.ID = p.BrandID
- WHERE pc.IsActive = 1 AND pc.IsCurrentlyActive = 1
- AND p2i.Order = 1
- AND p.IsActive = 1
- AND p.Published = 1
- AND prices.PriceListID = :storeID
- AND p.FriendlyUrl = :ProductUrl"
- ,
-
- // PRODUCTS by: storeID, ProductID
- // picks all product properties
- // + default image + price for certain store
- 'Active_PRODUCT_by:storeID_ProductID' =>
- "SELECT p.*,
- pc.ID AS ProductCategory,
- pc.Hierarchy,
- pc.FullFriendlyUrl AS `Path`,
- prices.ProductPrice_OriginalPrice AS Price,
- prices.ProductPrice_DiscountedPrice AS DiscountPrice,
- prices.UnitMeasurePrice_OriginalPrice AS PerUnitPrice,
- prices.UnitMeasurePrice_DiscountedPrice AS PerUnitDiscountPrice,
- b.Title BrandName
- FROM products p
- LEFT JOIN products_to_product_categories p2pc ON p.ID = p2pc.SimpleProductID
- LEFT JOIN product_categories pc ON p2pc.ProductCategoryID = pc.ID
- LEFT JOIN prices ON p.SKU = prices.SKU
- LEFT JOIN products_to_images p2i ON p2i.SimpleProductID = p.ID
- LEFT JOIN assets ON assets.ID = p2i.ImageID
- LEFT JOIN brands b ON b.ID = p.BrandID
- WHERE pc.IsActive = 1 AND pc.IsCurrentlyActive = 1
- AND p2i.Order = 1
- AND p.IsActive = 1
- AND p.Published = 1
- AND prices.PriceListID = :storeID
- AND p.ID = :ProductID"
- ,
-
- // CATEGORY-PRODUCTS by: storeID, likeHierarchy
- // traverses all products from category and subcategories
- // picke price and default image
- 'CATEGORY-PRODUCTS_by:storeID_likeHierarchy' =>
- "SELECT p.*,
- assets.Url AS ImageUrl,
- pc.FullFriendlyUrl AS `Path`,
- prices.ProductPrice_OriginalPrice AS Price,
- prices.ProductPrice_DiscountedPrice AS DiscountPrice,
- prices.UnitMeasurePrice_OriginalPrice AS PerUnitPrice,
- prices.UnitMeasurePrice_DiscountedPrice AS PerUnitDiscountPrice
- FROM products p
- LEFT JOIN prices ON p.SKU = prices.SKU
- LEFT JOIN products_to_product_categories p2pc ON p2pc.SimpleProductID = p.ID
- LEFT JOIN product_categories pc ON pc.ID = p2pc.ProductCategoryID
- LEFT JOIN products_to_images p2i ON p2i.SimpleProductID = p.ID
- LEFT JOIN assets ON assets.ID = p2i.ImageID
- WHERE p2pc.ProductCategoryID IN (
- SELECT `ID` FROM product_categories
- WHERE Hierarchy LIKE :likeHierarchy
- )
- AND p2i.Order = 1
- AND p.IsActive = 1
- AND p.Published = 1
- AND prices.PriceListID = :storeID"
- ,
-
- // Count Products
- // of all last-lever Product categories
- // by StoreID
- // ---
- // used on creating product_categories tree
- // ProductCategories_model::tree()
- 'Count_Last_Level_PRODUCTS_by:storeID' =>
- "SELECT pc.ID, COUNT(p.ID) as `Counter`
- FROM product_categories pc
- LEFT JOIN products_to_product_categories p2pc ON pc.ID = p2pc.ProductCategoryID
- LEFT JOIN products p ON p2pc.SimpleProductID = p.ID
- LEFT JOIN prices ON p.SKU = prices.SKU
- LEFT JOIN products_to_images p2i ON p2i.SimpleProductID = p.ID
- LEFT JOIN assets ON assets.ID = p2i.ImageID
- WHERE pc.IsActive = 1 AND pc.IsCurrentlyActive = 1
- AND p2i.Order = 1
- AND pc.Level = 2
- AND p.IsActive = 1
- AND p.Published = 1
- AND prices.PriceListID = :storeID
- GROUP BY pc.ID"
- ,
-
- // PRODUCT by: ProductID
- // Join images array (json string)
- // Join prices for all stores (json string)
- 'Active_PRODUCT_complete_by:ProductID' =>
- "SELECT p.*, pc.ID AS ProductCategory,
- pc.Hierarchy, pc.FullFriendlyUrl AS `Path`,
- ( -- get all store prices as Json
- SELECT JSON_ARRAYAGG(JSON_OBJECT(
- 'Store', prices.PriceListID,
- 'Price', prices.ProductPrice_OriginalPrice,
- 'DiscountPrice', prices.ProductPrice_DiscountedPrice,
- 'PerUnitPrice', prices.UnitMeasurePrice_OriginalPrice,
- 'PerUnitDiscountPrice', prices.UnitMeasurePrice_DiscountedPrice
- ))
- FROM prices
- WHERE prices.SKU = p.SKU
- ) as pricesJson,
- ( -- get all images as Json
- SELECT JSON_ARRAYAGG(JSON_OBJECT(
- 'Order', p2i.Order,
- 'Url', assets.Url,
- 'Title', assets.Title,
- 'Description', assets.Description
- ))
- FROM products_to_images p2i
- LEFT JOIN assets ON assets.ID = p2i.ImageID
- WHERE p2i.SimpleProductID = p.ID
- ) AS imagesJson,
- b.Title BrandName
- FROM products p
- LEFT JOIN products_to_product_categories p2pc ON p.ID = p2pc.SimpleProductID
- LEFT JOIN product_categories pc ON p2pc.ProductCategoryID = pc.ID
- LEFT JOIN products_to_images p2i ON p2i.SimpleProductID = p.ID
- LEFT JOIN assets ON assets.ID = p2i.ImageID
- LEFT JOIN brands b ON b.ID = p.BrandID
- WHERE pc.IsActive = 1 AND pc.IsCurrentlyActive = 1
- AND p2i.Order = 1
- AND p.IsActive = 1
- AND p.Published = 1
- AND p.ID = :ProductID"
- ,
-
- // Product images by: ProductID
- // (sorted by 'order' field)
- 'PRODUCT_IMAGES_by:productID' =>
- "SELECT a.Url, a.Title, a.Description
- FROM products p
- LEFT JOIN products_to_images p2i ON p2i.SimpleProductID = p.ID
- LEFT JOIN assets a ON a.ID = p2i.ImageID
- WHERE p.IsActive = 1
- AND p.Published = 1
- AND p.ID = :productID
- ORDER BY p2i.Order"
-
- ];
-
- /* no need to impement anything else;
- * you can overide if needed the default methods:
- * + public static function pull($entity){ }
- * + public static function echo($content =false){ }
- */
-
-}
diff --git a/html/app/models/market/Payment_template.txt b/html/app/models/market/Payment_template.txt
deleted file mode 100644
index 4a66a1a..0000000
--- a/html/app/models/market/Payment_template.txt
+++ /dev/null
@@ -1,98 +0,0 @@
-class WC_Piraeusbank_Gateway extends WC_Payment_Gateway {
-
- public function __construct()
-
- function pb_get_pages($title = false, $indent = true)
-
- function pb_get_installments($title = false, $indent = true)
-
- function generate_piraeusbank_form($order_id)
-
- function process_payment($order_id)
-
- function receipt_page($order)
-
- function check_piraeusbank_response()
-
- function piraeusbank_message()
-
- function woocommerce_add_piraeusbank_gateway($methods)
-
- function piraeusbank_plugin_action_links($links, $file)
-
-}
-
-
-
-class WC_NBG_Gateway extends WC_Payment_Gateway {
-
- public function __construct()
-
- public function admin_options()
-
- function init_form_fields()
-
- function nbg_get_pages($title = false, $indent = true)
-
- function nbg_get_installments($title = false, $indent = true)
-
- function generate_nbg_form($order_id)
-
- function process_payment($order_id)
-
- function receipt_page($order) {
-
- function check_nbg_response()
-
- function nbg_message()
-
- function woocommerce_add_nbg_gateway($methods)
-
- function nbg_plugin_action_links($links, $file)
-
-}
-
-
-
-global $wc;
-
- $this->id = 'nbg_gateway';
- $this->icon = apply_filters('nbg_icon', plugins_url('assets/nbg.png', __FILE__));
- $this->has_fields = false;
- $this->notify_url = WC()->api_request_url('WC_NBG_Gateway');
- $this->method_description = __('National Bank Greece Payment Gateway allows you to accept payment through various channels such as Maestro, Mastercard and Visa cards On your Woocommerce Powered Site.', 'woocommerce-nbg-payment-gateway');
- $this->redirect_page_id = $this->get_option('redirect_page_id');
- $this->method_title = 'National Bank of Greece Gateway';
-
- // Load the form fields.
- $this->init_form_fields();
-
- //dhmioyrgia vashs
-
- global $wpdb;
-
- if ($wpdb->get_var("SHOW TABLES LIKE '" . $wpdb->prefix . "nbg_transactions'") === $wpdb->prefix . 'nbg_transactions') {
- // The database table exist
- } else {
- // Table does not exist
- $query = 'CREATE TABLE IF NOT EXISTS ' . $wpdb->prefix . 'nbg_transactions (id int(11) unsigned NOT NULL AUTO_INCREMENT,merchantreference varchar(30) not null, reference varchar(100) not null, orderid varchar(100) not null , timestamp datetime default null, PRIMARY KEY (id))';
- $wpdb->query($query);
- }
-
-
- // Load the settings.
- $this->init_settings();
-
-
- // Define user set variables
- $this->title = $this->get_option('title');
- $this->description = $this->get_option('description');
- $this->nbg_Username = $this->get_option('nbg_Username');
- $this->nbg_Password = $this->get_option('nbg_Password');
-
- $this->nbg_description= $this->get_option('nbg_description');
- $this->mode = $this->get_option('mode');
- $this->nbg_installments= $this->get_option('nbg_installments');
- //Actions
- add_action('woocommerce_receipt_nbg_gateway', array($this, 'receipt_page'));
- add_action('woocommerce_update_options_payment_gateways_' . $this->id, array($this
diff --git a/html/app/models/market/ProductCategories_model.php b/html/app/models/market/ProductCategories_model.php
deleted file mode 100644
index d8c274e..0000000
--- a/html/app/models/market/ProductCategories_model.php
+++ /dev/null
@@ -1,199 +0,0 @@
-query( "SELECT * FROM product_categories
- WHERE FullFriendlyUrl = :url AND IsActive = 1",
- [ ':url' => $url ]
- )->getFirst();
-
- if ($category === false) { return false; } // no category? -> false
-
- // GET PRODUCTS of category
- $category['products'] = self::categoryProductsByHierarchy($category['Hierarchy']);
- return $category;
- }
-
-
- /** Get (product_) category from ID
- * --- (self explanatory)
- * @param $id (int): Catgory ID (usualy from products)
- * @return $category (array); also includes all category products
- */
- public static function categoryFromID($id)
- {
- return Registry::use('database')->query( "SELECT * FROM product_categories
- WHERE `ID` = :url AND IsActive = 1",
- [':id' => $id]
- )->getFirst();
-
- }
-
-
- /** categoryProductsByHierarchy
- * ---
- * This method returns the products belonging to a certain
- * category (and all it's the children/sub-categories);
- * It uses category.Hierarchy in a WHERE LIKE condition to
- * make it fast.
- *
- * The method is category.Level agnostic
- *
- * @param $category (array)
- * @return $products (array)
- */
- public static function categoryProductsByHierarchy($hierarchy, $store = 904)
- {
- // GET PRODUCTS of category
- // NOTE:
- // category.Hierarchy is used
-
- return Registry::use('database')->runQuery(
- Market_repository::pull('CATEGORY-PRODUCTS_by:storeID_likeHierarchy'),
- [
- ':likeHierarchy' => $hierarchy.'%',
- ':storeID' => 904
- ]
- );
- }
-
-
- # depricated:
- # now Proxy has the responsibility to cache whatever
- # ---
- # /** GET tree of product_categories
- # * ---
- # * get from cache or cache it after creation
- # */
- # public static function tree($store = 904)
- # {
- # $cacheKey = get_called_class() . $store .'/tree';
- #
- # // IF category CACHED
- # $cache = Registry::use('cache');
- # $tree = $cache->get($cacheKey);
- # if ($tree !== false) {
- # return $tree;
- # }
- #
- # // (not cached) Create and Cache it
- # $tree = self::createCategoriesTree();
- # $cache->set($cacheKey, $tree, CACHE_ROOT_TTL);
- #
- # return $tree;
- # }
-
-
- /** CREATE product_categories tree
- * NOTE: includes active categories only;
- *
- * Algorith uses 'Hierarchy' for category path-positioning,
- * implementing a linear conctruction of the requested tree;
- * (faster and less source-consuming than a recursive algo)
- */
- public static function tree($store = 904)
- {
- $tree = []; // variable to hold results
-
- $db = Registry::use('database');
-
- // get raw categories data ---------------------------------------------
-
- $raw = $db->runQuery( "SELECT `ID`, Title, `Level`, Hierarchy,
- ParentID, `Order`, FullFriendlyUrl
- FROM product_categories pc
- WHERE IsActive = 1 AND IsCurrentlyActive = 1
- ORDER BY pc.Level asc, pc.Order asc, pc.Hierarchy asc",
- []
- );
-
- // count products per 3rd level category -------------------------------
-
- $countProducts = $db->runQuery(
- Market_repository::pull('Count_Last_Level_PRODUCTS_by:storeID'),
- [ ':storeID' => $store ]
- );
- // map categoryID -> Counter
- $mapCounter = [];
- foreach($countProducts as $rec) $mapCounter[$rec['ID']] = $rec['Counter'];
-
- // parse raw data to hierarchical tree (2 pass) ------------------------
-
- // 1st pass: parse raw data, construct and fill the $tree array ........
- foreach($raw as $rec) {
-
- // create category path from Hierarchy (format: .10.10100. )
- // so remove 1st and last dots (.) from Hierarchy string
- // then explode via dot-character (.)
- $categoryPath = explode('.', substr($rec['Hierarchy'], 1, -1));
-
- switch ($rec['Level']) {
- case 0:
- $tree[$categoryPath[0]] = [
- 'info' => $rec,
- 'childs' => []
- ]; break;
-
- case 1:
- $tree[$categoryPath[0]]['childs'][$categoryPath[1]] = [
- 'info' => $rec,
- 'childs' => []
- ]; break;
-
- case 2:
- $tree[$categoryPath[0]]['childs'][$categoryPath[1]]['childs'][$categoryPath[2]] = [
- 'info' => $rec,
- 'count' => isset($mapCounter[$categoryPath[2]]) ? $mapCounter[$categoryPath[2]] : 0
- ]; break;
-
- default:
- // nothing...
- }
-
- }
-
- // 2nd pass: remove categories with no products ........................
- foreach($tree as $id0 => $rec0) {
- $count0 = 0;
-
- foreach($rec0['childs'] as $id1 => $rec1) {
- $count1 = 0;
-
- foreach($rec1['childs'] as $id2 => $rec2) {
- if ($rec2['count']>0) $count1++;
- else unset($tree[$id0]['childs'][$id1]['childs'][$id2]);
- }
-
- if ($count1 > 0) $count0++;
- else unset($tree[$id0]['childs'][$id1]);
- }
-
- if (!$count0) unset($tree[$id0]);
- }
-
- return $tree;
- }
-
-
-}
\ No newline at end of file
diff --git a/html/app/models/market/Product_model.php b/html/app/models/market/Product_model.php
deleted file mode 100644
index aa554a1..0000000
--- a/html/app/models/market/Product_model.php
+++ /dev/null
@@ -1,49 +0,0 @@
-query(
- Market::pull('Active_PRODUCT_by:storeID_ProductUrl'),
- [
- ':storeID' => $store,
- ':ProductUrl' => $url
- ]
- )->getFirst();
-
- // if no product, return false
- if ($product === false) return false;
-
- // inject product's images
- $product['Images'] = self::getProductImages($product['ID']);
-
- return $product;
- }
-
-
- public static function getProductImages($id)
- {
- ## return Registry::use('database')->runQuery(
- ## "SELECT a.Url, a.Title, a.Description
- ## FROM products p
- ## LEFT JOIN products_to_images p2i ON p2i.SimpleProductID = p.ID
- ## LEFT JOIN assets a ON a.ID = p2i.ImageID
- ## WHERE p.IsActive = 1 AND p.Published = 1
- ## AND p.ID = :id
- ## ORDER BY p2i.Order",
- ## [ ':id' => $id ]
- ## );
-
- return Registry::use('database')->runQuery(
- Market::pull('PRODUCT_IMAGES_by:productID'),
- ['productID' => $id ]
- );
- }
-
-}
\ No newline at end of file
diff --git a/html/app/models/todo.md b/html/app/models/todo.md
deleted file mode 100644
index defd21e..0000000
--- a/html/app/models/todo.md
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-Privilege
----
-
-Privilege::list_of_privileges( privilege_id )
-
-Privilege::privileges_tree()
-
-
-
-
-
-User
----
-
-User::get_privileges
-
-
-User::has_privilege( privilege_id )
-
-
-User::reset_password()
- -> create otp
- -> send email
-
-
-User::set_privilege( privilege_id )
-
-
-User::track_action()
- -> user_id
- -> action : Contoller::method(args)
- -> timestamp
-
-
-
-Lesson:
----
-
-Lesson::create_lesson( POST )
-
-Lesson::get_lesson( lesson_id )
-
-
-
-Course
----
-
-Course::create_course( POST )
-
-Course::courses_tree()
-
-
-
-Upgrades (??)
----
-
-
-A1
-
-A2 : includes A1
-
-A3 : includes A1, A2
-
-A4 : includes A1, A2, A3
-
-
-A1 100
-A2 200
-A3 350
-A4 500
-
-B1 100
-B2 200
-B3 400
-B4 800
-
-
-:1 -> 0%
-:2 -> 15%
-:3 -> 20%
-
-
-
-
-A1 -> A2
-A1 -> A3
-A1 -> A4
-
-A2 -> A3
-A2 -> A4
-
-A3 -> A4
-
-A1 < A2 < A3 < A4
-
-
-
-B1 -> B2
-B1 -> B3
-B1 -> B4
-
-B2 -> B3
-B2 -> B4
-
-B3 -> B4
-
-
-A1+B1
-
-A2+B2
-
-A3+B3
-
-
-A1+B1 -> A2+B2
-A1+B1 -> A3+B3
-A1+B1 -> A4+B4
-
-A2+B2 -> A3+B3
-A2+B2 -> A4+B4
-
-A3+B3 -> A4+B4
-
-
-
-UPGRADE PRICE = upper_priv_price - own_priv_price
-
-buy 1 item : -0%
-buy 2 items : -10%
-buy 3 items : -15%
diff --git a/html/app/routes/api.php b/html/app/routes/api.php
deleted file mode 100644
index 61e485b..0000000
--- a/html/app/routes/api.php
+++ /dev/null
@@ -1,81 +0,0 @@
- 'nobody knows it (but you got a secret smile;)']);
-}); // 404
-
-
-
-// Account
-///////////////////////////////////////////////////////////////////////////////////////////////
-
-// [ok] login
-// [ok] register
-// [ok] activate
-// [..] ask-reset
-// [..] reset
-// [..] profile
-// [..] edit-profile
-// [..] subscriptions
-// [..] payments
-// [..] pay
-// [..] order
-
-
-Route::add('/login', function() { Render::view('user/login'); });
-Route::add('/registration', function() { Render::view('user/registration'); });
-
-
-Route::add('/account/check-login', function() {
- $response = Auth::login();
- Render::json(['status' => $response]);
- },
- 'post'
-);
-
-// user sends a registration form;
-Route::add('/account/register', function() {
- $response = Auth::register();
- Render::json($response);
- },
- 'post'
-);
-
-// user requests activation
-Route::add('/account/activate', function() { Auth::activate(); } );
-
-// user profile
-Route::add('/account/profile', function() {
- // check if user is activated and loged in
- // then ...
- },
- 'post'
-);
-
-
-
-Route::add('/account/reset_password', function() { Auth::reset_password(); } );
-
-
-
-
-
-// Resolve urls
-// --- -- -- - - -
-Route::add('/course/([0-9a-zA-Z-_]*)',
- function($label) { Course::show([$label]); }
-);
-
-Route::add('/lesson/([0-9a-f]*)/([0-9a-zA-Z-_]*)',
- function($ticket, $lesson) { Lesson::show([$lesson, $ticket]); }
-);
-
-Route::add('/media/([0-9a-f]*)/([0-9a-zA-Z-_]*)/([0-9]*)/',
- function($ticket, $type, $id) { Media::serve([$type, $id, $ticket]); }
-);
-
-
-// 4-th level paths belong to products
-// ---
-Route::add('/about/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)',
- function($a, $b, $c) { Page::show([$a, $b, $c]); }
-);
-
-
-/** URL-format Proposal:
- * -----------------------------------------------------------------------------
- *
- * Page (almost-static content):
- * /about/{url}
-# Route::add('/about/([0-9a-zA-Z-_\/]*)', function($url) { Page::fromUrl($url); });
- *
- * Product:
- * /{level-1}/{level-2}/{level-3}/{friendly-url}-{id}
-# Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)-([0-9]*)',
-# function($category, $subcategory, $group, $label, $id) {
-# Product::fromID([$$category, $subcategory, $group, $label], $id);
-# }
-# );
- *
- * Category
- * /{category}/[ {subcategory}[ /{group}]]
-Route::add('/([0-9a-zA-Z-_]*)', function($a) { Category::url([$a]); };
-Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)', function($a, $b) { Category::url([$a, $b]); });
-Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)', function($a, $b, $c) { Category::url([$a, $b, $c]); });
- * -----------------------------------------------------------------------------
- */
-
-
-/* EXAMPLES (use it for brainsrtorming)
- * -----------------------------------------------------------------------------
- *
- // Typical Use
- // ---
- Route::add('/art', function() { Art::blah(); });
- Route::add('/art/db', function() { Art::fromDatabase(); });
- Route::add('/art/([0-9]*)', function($id) { Art::getInfo($id); });
-
-
- // Get-Post route example
- // ---
- Route::add('/contact-form', function() {
- echo '';
- }, 'get');
-
- Route::add('/contact-form', function() {
- echo 'Hey! The form has been sent:
'; print_r($_POST);
- }, 'post');
-
-
- // Accept number as parameter
- // ---
- Route::add('/foo/([0-9]*)/bar', function($var1) {
- // echo $var1.' is a number!';
- echo "{$var1} is a number!";
- });
-
-
- // About pages
- // ---
- Route::add('/about/([0-9a-zA-Z-_]*)', function($page) {
- InfoPage::render('about/'.page);
- });
-
-
- // handle a request like: /foo/123/bar/3254-lefki-zaxari-marata-1kg
- // where first-numeric-part of last-uri-section (3254) is the product number
- // ---
- Route::add('/foo/([0-9]*)/bar/([0-9]*)-([0-9a-zA-Z-_]*)', function($num, $id, $name) {
- echo $num .' is some nomber, id = '. $id .' and label = '. $name;
- });
-
-
- // handle a request like: /zaxares-glykantika/lefki-zaxari-year-2022-45678
- // where last-numeric-part of last-uri-section (45678) is the product number
- // ---
- Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)-([0-9]*)',
- function($category, $subcategory, $group, $label, $id) {
- Shop::product([$$category, $subcategory, $group, $label], $id);
- });
-
-
- // last chance to resolve (some friendly url)
- // ---
- Route::add('/([0-9a-zA-Z-_]*)', function($a) { Resolve::uri([$a]); });
- Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)', function($a, $b) { Resolve::uri([$a, $b]); });
- Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)', function($a, $b, $c) { Resolve::uri([$a, $b, $c]); });
-
-
- // Product page
- // handle a request like: /pantopoleio/zaxares/lefki-zaxari/lefki-zaxari-year-2022-45678
- // where last-numeric-part of last-uri-section (45678) is the product number
- // ---
- Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)-([0-9]*)',
- function($category, $subcategory, $group, $label, $id) {
- Shop::product([$$category, $subcategory, $group, $label], $id);
- });
-* ------------------------------------------------------------------------------
-*/
diff --git a/html/app/views/admin/skeleton.php b/html/app/views/admin/skeleton.php
deleted file mode 100644
index a9c2dcf..0000000
--- a/html/app/views/admin/skeleton.php
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-
- 4O4
- Not found
-
- = isset($title) ? $title : PAGE_404_TITLE ?>
- Oops!
- —
-
- = $message ?? "" ?>
- =$item['title']?>
-
- =$breadcrumbs[ $category_id ]['rec']['title']?>
-
-
-
-
-
-
-
- Υποκατηγορίες
- Άρθρα / Δημοσιεύσεις
-
- $posts_formated,
- 'fieldset' => ['intro', 'date']
- ]);
- ////////////////////////////////////////////////////
- ?>
-
-
-
-
- Welcome to Wiki!
-
-
-
- Τελευταίες Δημοσιεύσεις
-
- $posts_formated,
- 'fieldset' => $fieldset
- ]);
- ////////////////////////////////////////////////////////
- ?>
-
-
";
-for( $i = 0 ; $i < 250 ; $i++ ) {
-
- $temp = $non_root;
- shuffle($temp);
-
- $post = [
- 'title' => some_lorem_title(),
- 'category' => intval($temp[0]),
- 'body' => some_lorem_html()
- ];
- print_r($post);
-
- $wiki->add_post($post);
-}
-echo "";
\ No newline at end of file
diff --git a/html/app/views/simple/post.php b/html/app/views/simple/post.php
deleted file mode 100644
index 9e37cd9..0000000
--- a/html/app/views/simple/post.php
+++ /dev/null
@@ -1,236 +0,0 @@
-get_post($post_id);
-$categories = $wiki->category_tree();
-$breadcrumbs = Render::all_breadcrumbs($categories);
-
-if ($post == false) { // when post not found
- $post = [ // create a virtual record with error messages
- 'id' => 0,
- 'title' => 'Το άρθρο που αναζητήσατε δεν υπάρχει',
- 'category_id' => 0,
- 'intro' => 'Για να βρειτε το άρθρο που ψάχνετε χρησιμοποιήστε την αναζήτηση
- του wiki ή πλοηγηθείτε στο δέντρο των κατηγοριών.',
- 'body' => ""
- ];
-
-} else { // post found; prepare article's data to render
-
- $category_id = $post['category_id'];
-
- // find parent_ids of current category (to open the menu tree)
- $category_path = [];
- foreach($breadcrumbs[$category_id]['parents'] as $parent) {
- $category_path[] = intval($parent['id']);
- }
- $category_path[] = intval($category_id);
-
-}
-
-
-// format special parts of post
-$parsedown = new Parsedown();
-$body_html = $parsedown->text($post['body']); // body: markdown to html
-
-// decode json output (tags + medias)
-if ($post['tags_json'] != null) { $tags = json_decode($post['tags_json']); }
-if ($post['medias_json'] != null) { $medias = json_decode($post['medias_json']); }
-
-
-// then render the page ...
-// -----------------------------------------------------------------------------
-?>
-
-
-
- - Δημοσίευση: =Render::date_friendly($post['creation_date'])?> - - — Τελευταία Ενημέρωση: =Render::date_friendly($post['update_date'])?> - -
- - - -=$post['intro']?>
- - - -Αν έχετε ήδη λογαρισμό συνδεθείτε.
-Σε κάθε περίπτωση μπορείτε να επιστρέψετε στην αρχική σελίδα.
-