diff options
author | Malf Furious <m@lfurio.us> | 2016-10-22 00:29:30 -0400 |
---|---|---|
committer | Malf Furious <m@lfurio.us> | 2016-10-22 00:29:30 -0400 |
commit | ed99654d2e139a847a63e9295bf976d17462ee34 (patch) | |
tree | 23ab0c9d3b813da85e08d4008dbf98b7f0c9fd01 /app/class/object.class.php | |
parent | 9d0ff6546fb03489bbd127aeec6ee161e204a139 (diff) | |
download | scrott-ed99654d2e139a847a63e9295bf976d17462ee34.tar.gz scrott-ed99654d2e139a847a63e9295bf976d17462ee34.zip |
Deprecate application code
Setup to perform an iteration of development focused on a simpler
implementation and eliminating redundancy in design.
Diffstat (limited to 'app/class/object.class.php')
-rw-r--r-- | app/class/object.class.php | 640 |
1 files changed, 0 insertions, 640 deletions
diff --git a/app/class/object.class.php b/app/class/object.class.php deleted file mode 100644 index 7c0b7bb..0000000 --- a/app/class/object.class.php +++ /dev/null @@ -1,640 +0,0 @@ -<?php - -/* - * SCROTT Copyright (C) 2016 Malf Furious - * - * Scrott is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, - * or (at your option) any later version. - * - * Scrott is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - * License for more details. - */ - -require_once "class/framework.class.php"; -require_once "class/user.class.php"; - -/* - * Base class for Scrott database objects - */ -abstract class Object extends Framework -{ - var $DEFAULT_OBJECT_PERMISSIONS = 120; - - /* - * Constructor - */ - function __construct($childTable = "object", $childCols = null) - { - $this->db = $this->getDbConnection(); - - $this->table = "object"; - $this->cols = array( - "guid", - "perms", - "owner", - "parent", - "name", - "timeCreated", - "timeUpdated", - "type" - ); - - $this->childTable = $this->db->esc($childTable); - $this->childCols = array(); - - if (is_array($childCols)) - { - foreach ($childCols as $col) - $this->childCols[] = $this->db->esc($col); - } - } - - /* - * Populate this object with data from the DB with a given GUID - */ - function loadObj($guid = null) - { - if (is_null($guid)) - return; - - if (!$this->isGUID($guid)) - return; - - $escdGuid = $this->db->esc($guid); - - /* Base fields */ - $query = "SELECT * FROM `" . $this->table . "` WHERE `guid` = '" . $escdGuid . "'"; - $result = $this->db->query($query)[0]; - - foreach ($this->cols as $col) - { - if (isset($result[$col])) - $this->$col = $result[$col]; - } - - /* Child Table fields */ - $query = "SELECT * FROM `" . $this->childTable . "` WHERE `guid` = '" . $escdGuid . "'"; - $result = $this->db->query($query)[0]; - - foreach ($this->childCols as $col) - { - if (isset($result[$col])) - $this->$col = $result[$col]; - } - } - - /* - * Write this object to the database - */ - function saveObj() - { - if (isset($this->guid)) - { - $this->timeUpdated = $this->getCurrentTimestamp(); - - /* Update Base */ - $updateStr = ""; - - foreach ($this->cols as $col) - { - if (!isset($this->$col)) - continue; - - $updateStr .= "`" . $col . "` = '" . $this->db->esc($this->$col) . "', "; - } - - if (strlen($updateStr) > 0) - { - $updateStr = substr($updateStr, 0, -2); // remove ", " from the end - $query = "UPDATE `" . $this->table . "` SET " . $updateStr . " WHERE `guid` = '" . $this->db->esc($this->guid) . "'"; - $this->db->query($query); - } - - /* Update Child */ - $updateStr = ""; - - foreach ($this->childCols as $col) - { - if (!isset($this->$col)) - continue; - - $updateStr .= "`" . $col . "` = '" . $this->db->esc($this->$col) . "', "; - } - - if (strlen($updateStr) > 0) - { - $updateStr = substr($updateStr, 0, -2); // remove ", " from the end - $query = "UPDATE `" . $this->childTable . "` SET " . $updateStr . " WHERE `guid` = '" . $this->db->esc($this->guid) . "'"; - $this->db->query($query); - } - } - - else - { - $this->guid = $this->getNewGUID(); - $this->timeCreated = $this->getCurrentTimestamp(); - $this->timeUpdated = $this->timeCreated; - - /* Insert Base */ - $colsStr = ""; - $valsStr = ""; - - foreach ($this->cols as $col) - { - if (!isset($this->$col)) - continue; - - $colsStr .= "`" . $col . "`, "; - $valsStr .= "'" . $this->db->esc($this->$col) . "', "; - } - - if (strlen($colsStr) > 0) - { - $colsStr = substr($colsStr, 0, -2); // remove ", " - $valsStr = substr($valsStr, 0, -2); - $query = "INSERT INTO `" . $this->table . "` (" . $colsStr . ") VALUES (" . $valsStr . ")"; - $this->db->query($query); - } - - /* Insert Child */ - $colsStr = ""; - $valsStr = ""; - - foreach ($this->childCols as $col) - { - if (!isset($this->$col)) - continue; - - $colsStr .= "`" . $col . "`, "; - $valsStr .= "'" . $this->db->esc($this->$col) . "', "; - } - - if (strlen($colsStr) > 0) - { - $colsStr = substr($colsStr, 0, -2); // remove ", " - $valsStr = substr($valsStr, 0, -2); - $query = "INSERT INTO `" . $this->childTable . "` (" . $colsStr . ") VALUES (" . $valsStr . ")"; - $this->db->query($query); - } - } - } - - /* - * Remove this object from the database - */ - function delObj() - { - if (!isset($this->guid)) - return; - - /* Delete Base */ - $query = "DELETE FROM `" . $this->table . "` WHERE `guid` = '" . $this->db->esc($this->guid) . "'"; - $this->db->query($query); - - /* Delete Child */ - $query = "DELETE FROM `" . $this->childTable . "` WHERE `guid` = '" . $this->db->esc($this->guid) . "'"; - $this->db->query($query); - - /* obj_member garbage collection */ - $query = "DELETE FROM `obj_member` WHERE `guid` = '" . $this->db->esc($this->guid) . "' OR `member` = '" . $this->db->esc($this->guid) . "'"; - $this->db->query($query); - - /* msg_read garbage collection */ - $query = "DELETE FROM `msg_read` WHERE `guid` = '" . $this->db->esc($this->guid) . "' OR `user` = '" . $this->db->esc($this->guid) . "'"; - $this->db->query($query); - } - - /* - * Get current timestamp for object database purposes - */ - function getCurrentTimestamp() - { - $query = "SELECT now() AS stamp"; - $result = $this->db->query($query); - return $result[0]['stamp']; - } - - /* - * Check whether given GUID exists - */ - function isGUID($guid) - { - $query = "SELECT `guid` FROM `object` WHERE `guid` = '" . $this->db->esc($guid) . "'"; - $result = $this->db->query($query); - - if (count($result) > 0) - return true; - - return false; - } - - /* - * Get a new, unique GUID for a new system object - */ - function getNewGUID() - { - do - { - $guid = substr($this->getBlob(), 0, 8); - } - while ($this->isGUID($guid)); - - return $guid; - } - - /* - * Get a random sha256 blob - */ - function getBlob() - { - return hash("sha256", openssl_random_pseudo_bytes(64)); - } - - /* - * Get a user object for this object's owner - */ - function getOwner() - { - if (isset($this->owner)) - return new User($this->owner); - - return null; - } - - /* - * Get an array of all members of this object - */ - function getMembers() - { - $query = "SELECT member FROM obj_member WHERE guid = '" . $this->db->esc($this->guid) . "'"; - $result = $this->db->query($query); - - $members = array(); - - foreach ($result as $m) - $members[] = new User($m['member']); - - return $members; - } - - /* - * Check if given user (or group) is the owner of this object - */ - function isOwner($ug) - { - return $this->getOwner()->guid == $ug->guid; - } - - /* - * Check if given user (or group) is a member of this object - */ - function isMember($ug) - { - foreach ($this->getMembers() as $member) - { - if ($member->guid == $ug->guid) - return true; - } - - return false; - } - - /* - * Check if given user has permissions for this object - */ - function canAccess($user) - { - if ($user->admin) - return true; - - if ($this->isOwner($user)) - return true; - - if ($this->isMember($user)) - return true; - - if ($this->perms & 0x004) // accessible by public - return true; - - if ($this->parent != "") - { - $parent = new DBObject($this->parent); - - if ($parent->canAccessSub($user)) - return true; - } - else if ($this->owner != $this->guid) - { - $owner = new DBObject($this->owner); - - if ($owner->canAccessSub($user)) - return true; - } - - return false; - } - - /* - * Check if given user has permissions for this object - */ - function canModify($user) - { - if ($user->admin) - return true; - - if ($this->isOwner($user)) - return true; - - if ($this->isMember($user) && $this->perms & 0x100) - return true; - - if ($this->parent != "") - { - $parent = new DBObject($this->parent); - - if ($parent->canModifySub($user)) - return true; - } - else if ($this->owner != $this->guid) - { - $owner = new DBObject($this->owner); - - if ($owner->canModifySub($user)) - return true; - } - - return false; - } - - /* - * Check if given user has permissions for this object - */ - function canModifyMembers($user) - { - if ($user->admin) - return true; - - if ($this->isOwner($user)) - return true; - - if ($this->isMember($user) && $this->perms & 0x080) - return true; - - if ($this->parent != "") - { - $parent = new DBObject($this->parent); - - if ($parent->canModifySubMembers($user)) - return true; - } - else if ($this->owner != $this->guid) - { - $owner = new DBObject($this->owner); - - if ($owner->canModifySubMembers($user)) - return true; - } - - return false; - } - - /* - * Check if given user has permissions for this object - */ - function canModifyPermissions($user) - { - if ($user->admin) - return true; - - if ($this->isOwner($user)) - return true; - - if ($this->parent != "") - { - $parent = new DBObject($this->parent); - - if ($parent->canModifySubPermissions($user)) - return true; - } - else if ($this->owner != $this->guid) - { - $owner = new DBObject($this->owner); - - if ($owner->canModifySubPermissions($user)) - return true; - } - - return false; - } - - /* - * Check if given user has permissions for this object - */ - function canAccessSub($user) - { - if ($user->admin) - return true; - - if ($this->isOwner($user)) - return true; - - if ($this->isMember($user) && $this->perms & 0x040) - return true; - - if ($this->perms & 0x002) // accessible by public - return true; - - if ($this->parent != "") - { - $parent = new DBObject($this->parent); - - if ($parent->canAccessSub($user)) - return true; - } - else if ($this->owner != $this->guid) - { - $owner = new DBObject($this->owner); - - if ($owner->canAccessSub($user)) - return true; - } - - return false; - } - - /* - * Check if given user has permissions for this object - */ - function canCreateSub($user) - { - if ($user->admin) - return true; - - if ($this->isOwner($user)) - return true; - - if ($this->isMember($user) && $this->perms & 0x020) - return true; - - if ($this->perms & 0x001) // accessible by public - return true; - - if ($this->parent != "") - { - $parent = new DBObject($this->parent); - - if ($parent->canCreateSub($user)) - return true; - } - else if ($this->owner != $this->guid) - { - $owner = new DBObject($this->owner); - - if ($owner->canCreateSub($user)) - return true; - } - - return false; - } - - /* - * Check if given user has permissions for this object - */ - function canModifySub($user) - { - if ($user->admin) - return true; - - if ($this->isOwner($user)) - return true; - - if ($this->isMember($user) && $this->perms & 0x010) - return true; - - if ($this->parent != "") - { - $parent = new DBObject($this->parent); - - if ($parent->canModifySub($user)) - return true; - } - else if ($this->owner != $this->guid) - { - $owner = new DBObject($this->owner); - - if ($owner->canModifySub($user)) - return true; - } - - return false; - } - - /* - * Check if given user has permissions for this object - */ - function canModifySubMembers($user) - { - if ($user->admin) - return true; - - if ($this->isOwner($user)) - return true; - - if ($this->isMember($user) && $this->perms & 0x008) - return true; - - if ($this->parent != "") - { - $parent = new DBObject($this->parent); - - if ($parent->canModifySubMembers($user)) - return true; - } - else if ($this->owner != $this->guid) - { - $owner = new DBObject($this->owner); - - if ($owner->canModifySubMembers($user)) - return true; - } - - return false; - } - - /* - * Check if given user has permissions for this object - */ - function canModifySubPermissions($user) - { - if ($user->admin) - return true; - - if ($this->isOwner($user)) - return true; - - if ($this->parent != "") - { - $parent = new DBObject($this->parent); - - if ($parent->canModifySubPermissions($user)) - return true; - } - else if ($this->owner != $this->guid) - { - $owner = new DBObject($this->owner); - - if ($owner->canModifySubPermissions($user)) - return true; - } - - return false; - } - - /* - * Get URL to this object - */ - function getURL() - { - return $this->ar() . "/" . $this->guid; - } - - /* - * Get object's head image - */ - function getHeadImage() - { - return $this->ar() . "/file.php?d=img/heads&f=" . $this->guid; - } - - /* - * Remove this object's head image - */ - function rmHeadImage() - { - if (!is_file("assets/img/heads/" . $this->guid)) - return true; - - return unlink("assets/img/heads/" . $this->guid); - } -} - -/* - * Concrete Database Object which can be used in a polymorphic way - */ -class DBObject extends Object -{ - /* - * Constructor - */ - function __construct($guid = null) - { - parent::__construct(); - $this->loadObj($guid); - } -} - -?> |