diff options
author | Kevin Chabowski <kevin@kch42.de> | 2012-01-05 14:43:33 +0100 |
---|---|---|
committer | Kevin Chabowski <kevin@kch42.de> | 2012-01-05 14:43:33 +0100 |
commit | c4cc87d9d1557ddd4cae4b06b79696712f61a2ad (patch) | |
tree | 081b31be890c484040a63f626063e846ef583680 /models.php | |
parent | e99281261767710f96b9967a0ab03a3ea24a05e0 (diff) | |
download | r7r-repo-c4cc87d9d1557ddd4cae4b06b79696712f61a2ad.tar.gz r7r-repo-c4cc87d9d1557ddd4cae4b06b79696712f61a2ad.tar.bz2 r7r-repo-c4cc87d9d1557ddd4cae4b06b79696712f61a2ad.zip |
New directory hierachy. index and setup implemented.
Diffstat (limited to 'models.php')
-rw-r--r-- | models.php | 388 |
1 files changed, 0 insertions, 388 deletions
diff --git a/models.php b/models.php deleted file mode 100644 index 62e541d..0000000 --- a/models.php +++ /dev/null @@ -1,388 +0,0 @@ -<?php - -require_once(dirname(__FILE__) . "/db.php"); -require_once(dirname(__FILE__) . "/utils.php"); -db_connect(); - -/* Exceptions copied from Ratatöskr */ -class DoesNotExistError extends Exception { } -class AlreadyExistsError extends Exception { } -class NotAllowedError extends Exception { } - -/* copied from Ratatöskr: */ -abstract class BySQLRowEnabled -{ - protected function __construct() { } - - abstract protected function populate_by_sqlrow($sqlrow); - - protected static function by_sqlrow($sqlrow) - { - $obj = new static(); - $obj->populate_by_sqlrow($sqlrow); - return $obj; - } -} - -/* SettingsIterator ans Settings copied from Ratatöskr */ - -class SettingsIterator implements Iterator -{ - private $index; - private $keys; - private $settings_obj; - - public function __construct($settings_obj, $keys) - { - $this->index = 0; - $this->settings_obj = $settings_obj; - $this->keys = $keys; - } - - /* Iterator implementation */ - public function current() { return $this->settings_obj[$this->keys[$this->index]]; } - public function key() { return $this->keys[$this->index]; } - public function next() { ++$this->index; } - public function rewind() { $this->index = 0; } - public function valid() { return $this->index < count($this->keys); } -} - -/* - * Class: Settings - * A class that holds the Settings of Ratatöskr. - * You can access settings like an array. - */ -class Settings implements ArrayAccess, IteratorAggregate, Countable -{ - /* Singleton implementation */ - private function __copy() {} - private static $instance = NULL; - /* - * Constructor: get_instance - * Get an instance of this class. - * All instances are equal (ie. this is a singleton), so you can also use - * the global <$ratatoeskr_settings> instance. - */ - public static function get_instance() - { - if(self::$instance === NULL) - self::$instance = new self; - return self::$instance; - } - - private $buffer; - private $to_be_deleted; - private $to_be_created; - private $to_be_updated; - - private function __construct() - { - $this->buffer = array(); - $result = qdb("SELECT `key`, `value` FROM `PREFIX_settings_kvstorage` WHERE 1"); - while($sqlrow = mysql_fetch_assoc($result)) - $this->buffer[$sqlrow["key"]] = unserialize(base64_decode($sqlrow["value"])); - - $this->to_be_created = array(); - $this->to_be_deleted = array(); - $this->to_be_updated = array(); - } - - public function save() - { - foreach($this->to_be_deleted as $k) - qdb("DELETE FROM `PREFIX_settings_kvstorage` WHERE `key` = '%s'", $k); - foreach($this->to_be_updated as $k) - qdb("UPDATE `PREFIX_settings_kvstorage` SET `value` = '%s' WHERE `key` = '%s'", base64_encode(serialize($this->buffer[$k])), $k); - foreach($this->to_be_created as $k) - qdb("INSERT INTO `PREFIX_settings_kvstorage` (`key`, `value`) VALUES ('%s', '%s')", $k, base64_encode(serialize($this->buffer[$k]))); - $this->to_be_created = array(); - $this->to_be_deleted = array(); - $this->to_be_updated = array(); - } - - /* ArrayAccess implementation */ - public function offsetExists($offset) - { - return isset($this->buffer[$offset]); - } - public function offsetGet($offset) - { - return $this->buffer[$offset]; - } - public function offsetSet ($offset, $value) - { - if(!$this->offsetExists($offset)) - { - if(in_array($offset, $this->to_be_deleted)) - { - $this->to_be_updated[] = $offset; - unset($this->to_be_deleted[array_search($offset, $this->to_be_deleted)]); - } - else - $this->to_be_created[] = $offset; - } - elseif((!in_array($offset, $this->to_be_created)) and (!in_array($offset, $this->to_be_updated))) - $this->to_be_updated[] = $offset; - $this->buffer[$offset] = $value; - } - public function offsetUnset($offset) - { - if(in_array($offset, $this->to_be_created)) - unset($this->to_be_created[array_search($offset, $this->to_be_created)]); - else - $this->to_be_deleted[] = $offset; - unset($this->buffer[$offset]); - } - - /* IteratorAggregate implementation */ - public function getIterator() { return new SettingsIterator($this, array_keys($this->buffer)); } - - /* Countable implementation */ - public function count() { return count($this->buffer); } -} - -$settings = Settings::get_instance(); - -/* users */ -class User extends BySQLRowEnabled -{ - private $name; - private $id; - - public $pwhash; - public $isadmin; - - protected function __construct() {} - - protected function populate_by_sqlrow($sqlrow) - { - $this->id = $sqlrow["id"]; - $this->name = $sqlrow["name"]; - $this->pwhash = $sqlrow["pwhash"]; - $this->isadmin = $sqlrow["isadmin"] == 1; - } - - function get_id() { return $this->id; } - function get_name() { return $this->name; } - - public static function create($name) - { - try - { - self::by_name($name); - throw new AlreadyExistsError(); - } - catch(DoesNotExistError $e) - { - $obj = new self; - $obj->name = $name; - $obj->pwhash = ""; - $obj->isadmin = False; - qdb("INSERT INTO `PREFIX_users` (`name`, `pwhash`, isadmin`) VALUES ('%s', '', 0)", $name); - $this->id = mysql_insert_id(); - return $obj; - } - } - - public static function by_id($id) - { - $result = qdb("SELECT `id`, `name`, `pwhash`, `isadmin` FROM `PREFIX_users` WHERE `id` = %d", $id); - $sqlrow = mysql_fetch_assoc($result); - if($sqlrow === False) - throw new DoesNotExistError(); - return self::by_sqlrow($sqlrow); - } - - public static function by_name($name) - { - $result = qdb("SELECT `id`, `name`, `pwhash`, `isadmin` FROM `PREFIX_users` WHERE `name` = '%s'", $name); - $sqlrow = mysql_fetch_assoc($result); - if($sqlrow === False) - throw new DoesNotExistError(); - return self::by_sqlrow($sqlrow); - } - - public static function all() - { - $rv = array(); - $result = qdb("SELECT `id`, `name`, `pwhash`, `isadmin` FROM `PREFIX_users` WHERE 1"); - while($sqlrow = mysql_fetch_assoc($result)) - $rv[] = self::by_sqlrow($sqlrow); - return $rv; - } - - public function get_packages() - { - $rv = array(); - $result = qdb("SELECT `id`, `name`, `user`, `lastversion`, `description`, `lastupdate`, `txtversion` FROM `PREFIX_packages` WHERE `user` = %d", $this->id); - while($sqlrow = mysql_fetch_assoc($result)) - $rv[] = Package::by_sqlrow($result); - return $rv; - } - - public function save() - { - qdb("UPDATE `PREFIX_users` SET `isadmin` = %d, `pwhash` = '%s' WHERE `id` = %d", ($this->isadmin ? 1 : 0), $this->pwhash, $this->id); - } - - public function delete() - { - qdb("DELETE FROM `PREFIX_users` WHERE `id` = %d", $this->id); - } -} - -class Package extends BySQLRowEnabled -{ - private $id; - private $name; - private $user; - - public $lastversion; - public $description; - public $lastupdate; - public $txtversion; - - public function get_id() { return $id; } - public function get_name() { return $name; } - public function get_user() { return $user; } - - protected function __construct() {} - - protected function populate_by_sqlrow($sqlrow) - { - $this->id = $sqlrow["id"]; - $this->name = $sqlrow["name"]; - $this->user = User::by_id($sqlrow["user"]); - $this->lastversion = $sqlrow["lastversion"]; - $this->description = $sqlrow["description"]; - $this->lastupdate = $sqlrow["lastupdate"]; - $this->txtversion = $sqlrow["txtversion"]; - } - - public static function create($name, $user) - { - if(preg_match("/^[0-9a-zA-Z_\\-]+$/", $name) != 1) - throw new InvalidArgumentException("Invalid package name (must be min 1 char, 0-9A-Za-z_-"); - try - { - self::by_name($name); - throw new AlreadyExistsError(); - } - catch(DoesNotExistError $e) - { - $obj = new self; - $obj->name = $name; - $obj->user = $user; - $obj->lastupdate = time(); - $obj->lastversion = 0; - $obj->txtversion = ""; - $obj->description = ""; - - qdb("INSERT INTO `PREFIX_packages` (`name`, `user`, `lastupdate`, `lastversion`, `txtversion`, description`, `description`) VALUES ('%s', %d, UNIX_TIMESTAMP(), 0, '', '')", $name, $user->get_id()); - $obj->id = mysql_insert_id(); - - mkdir(dirname(__FILE__) . "/packages/" . $this->name); - - return $obj; - } - } - - public static function by_id($id) - { - $result = qdb("SELECT `id`, `name`, `user`, `lastversion`, `description`, `lastupdate`, `txtversion` FROM `PREFIX_packages` WHERE `id` = %d", $id); - $sqlrow = mysql_fetch_assoc($result); - if($sqlrow === False) - throw new DoesNotExistError(); - return self::by_sqlrow($sqlrow); - } - - public static function by_name($name) - { - $result = qdb("SELECT `id`, `name`, `user`, `lastversion`, `description`, `lastupdate`, `txtversion` FROM `PREFIX_packages` WHERE `name` = '%s'", $name); - $sqlrow = mysql_fetch_assoc($result); - if($sqlrow === False) - throw new DoesNotExistError(); - return self::by_sqlrow($sqlrow); - } - - public static function update_lists() - { - $packagelist = array(); - $result = qdb("SELECT `id`, `name`, `user`, `lastversion`, `description`, `lastupdate`, `txtversion` FROM `PREFIX_packages` WHERE 1"); - while($sqlrow = mysql_fetch_assoc($result)) - $packagelist[] = array($sqlrow["name"], $sqlrow["lastversion"], $sqlrow["description"]); - file_put_contents(dirname(__FILE__) . "/packagelist", serialize($packagelist)); - } - - public static function all() - { - $rv = array(); - $result = qdb("SELECT `id`, `name`, `user`, `lastversion`, `description`, `lastupdate`, `txtversion` FROM `PREFIX_packages` WHERE 1"); - while($sqlrow = mysql_fetch_assoc($result)) - $rv[] = self::by_sqlrow($sqlrow); - return $rv; - } - - public static function latest() - { - $rv = array(); - $result = qdb("SELECT `id`, `name`, `user`, `lastversion`, `description`, `lastupdate`, `txtversion` FROM `PREFIX_packages` WHERE 1 ORDER BY `lastupdate` DESC LIMIT 0,15"); - while($sqlrow = mysql_fetch_assoc($result)) - $rv[] = self::by_sqlrow($sqlrow); - return $rv; - } - - public static function search($search) - { - $rv = array(); - $result = qdb("SELECT `id`, `name`, `user`, `lastversion`, `description`, `lastupdate`, `txtversion` FROM `PREFIX_packages` WHERE `name` LIKE '%%%s%%' OR `description` LIKE '%%%s%%'", $search, $search); - while($sqlrow = mysql_fetch_assoc($result)) - $rv[] = self::by_sqlrow($sqlrow); - return $rv; - } - - public function newversion($pgk) - { - global $settings; - if($pkg->name != $this->name) - throw new NotAllowedError("Package name not equal."); - if($pkg->versioncount <= $this->lastversion) - throw new NotAllowedError("Older or same version."); - $pkg->updatepath = $settings["root_url"] . "/packages/" . urlencode($this->name) . "/update"; - - $pkg_ser = $pkg->save(); - file_put_contents(dirname(__FILE__) . "/packages/" . urlencode($this>name) . "/versions/" . $pkg->versioncount, $pkg_ser); - file_put_contents(dirname(__FILE__) . "/packages/" . urlencode($this>name) . "/versions/current", $pkg_ser); - $meta = $pkg->extract_meta(); - file_put_contents(dirname(__FILE__) . "/packages/" . urlencode($this>name) . "/meta", serialize($meta)); - - $this->lastversion = $pkg->versioncount; - $this->txtversion = $pkg->versiontext; - $this->description = $pkg->short_description; - $this->lastupdate = time(); - $this->save(); - - $update_info = array( - "current-version" => $this->lastversion, - "dl-path" => $settings["root_url"] . "/packages/" . urlencode($this->name) . "/versions/" . $this->lastversion; - ); - - file_put_contents(dirname(__FILE__) . "/packages/" . urlencode($this>name) . "/update", serialize($update_info)); - - self::update_lists(); - } - - public function save() - { - qdb("UPDATE `PREFIX_packages` SET `lastversion` = %d, `lastupdate` = %d, `txtversion` = '%s', `description` = '%s' WHERE `id` = %d", $this->lastversion, $this->lastupdate, $this->txtversion, $this->description, $this->id); - } - - public function delete() - { - qdb("DELETE FROM `PREFIX_packages` WHERE `id` = %d", $this->id); - delete_directory(dirname(__FILE__) . "/packages/" . $this->name); - self::update_lists(); - } -} - -?> |