From fbac94a67b418bab26f175c027a7ae636128959e Mon Sep 17 00:00:00 2001 From: doctrine Date: Tue, 30 May 2006 09:01:36 +0000 Subject: [PATCH] Added a folder remotely --- Doctrine/Sensei/Sensei.class.php | 264 +++++++++++++++++++++++++++++++ 1 file changed, 264 insertions(+) create mode 100644 Doctrine/Sensei/Sensei.class.php diff --git a/Doctrine/Sensei/Sensei.class.php b/Doctrine/Sensei/Sensei.class.php new file mode 100644 index 000000000..2f4b6c9ab --- /dev/null +++ b/Doctrine/Sensei/Sensei.class.php @@ -0,0 +1,264 @@ +hasColumn("loginname","string",32,"unique"); + $this->hasColumn("password","string",32); + } +} +class Sensei_Variable extends Doctrine_Record { + /** + * setUp + * initializes relations and options + * + * @return void + */ + public function setUp() { + //$this->setAttribute(Doctrine::ATTR_COLL_KEY, "name"); + } + /** + * setTableDefinition + * initializes column definitions + * + * @return void + */ + public function setTableDefinition() { + $this->hasColumn("name","string",50,"unique"); + $this->hasColumn("value","string",10000); + $this->hasColumn("session_id","integer"); + } +} +class Sensei_Session extends Doctrine_Record { + /** + * setUp + * initializes relations and options + * + * @return void + */ + public function setUp() { + $this->ownsMany("Sensei_Variable","Sensei_Variable.session_id"); + $this->hasOne("Sensei_Entity","Sensei_Session.entity_id"); + } + /** + * setTableDefinition + * initializes column definitions + * + * @return void + */ + public function setTableDefinition() { + $this->hasColumn("session_id","string",32); + $this->hasColumn("logged_in","integer",1); + $this->hasColumn("entity_id","integer"); + $this->hasColumn("user_agent","string",200); + $this->hasColumn("updated","integer"); + $this->hasColumn("created","integer"); + } +} +class Sensei_Exception extends Exception { } +class Sensei extends Doctrine_Access { + const ATTR_LIFESPAN = 0; + /** + * @var Sensei_Session $record + */ + private $record; + /** + * @var Doctrine_Session $session + */ + private $session; + /** + * @var Doctrine_Table $table + */ + private $table; + /** + * @var array $attributes + */ + private $attributes = array(); + /** + * @var Doctrine_Collection $vars + */ + private $vars; + + + public function __construct() { + if(headers_sent()) + throw new Sensei_Exception("Headers already sent. Couldn't initialize session."); + + $this->session = Doctrine_Manager::getInstance()->getCurrentSession(); + $this->table = $this->session->getTable("Sensei_session"); + $this->init(); + + + $this->gc(1); + + if( ! isset($_SESSION)) + session_start(); + + } + /** + * getRecord + */ + public function getRecord() { + return $this->record; + } + /** + * init + */ + private function init() { + session_set_save_handler( + array($this,"open"), + array($this,"close"), + array($this,"read"), + array($this,"write"), + array($this,"destroy"), + array($this,"gc") + ); + } + /** + * @param string $username + * @param string $password + * @return boolean + */ + public function login($username,$password) { + $coll = $this->session->query("FROM Sensei_Entity WHERE Sensei_Entity.loginname = ? && Sensei_Entity.password = ?",array($username,$password)); + if(count($coll) > 0) { + $this->record->logged_in = 1; + $this->record->entity_id = $coll[0]->getID(); + $this->record->save(); + return true; + } + return false; + } + /** + * logout + * @return boolean + */ + public function logout() { + if( $this->record->logged_in == true) { + $this->record->logged_in = 0; + $this->record->entity_id = 0; + return true; + } else { + return false; + } + } + /** + * returns a session variable + * + * @param mixed $name + * @return mixed + */ + public function get($name) { + foreach($this->vars as $var) { + if($var->name == $name) { + return $var->value; + } + } + } + /** + * sets a session variable + * returns true on success, false on failure + * + * @param mixed $name + * @param mixed $value + * @return boolean + */ + public function set($name,$value) { + foreach($this->vars as $var) { + if($var->name == $name) { + $var->value = $value; + return true; + } + } + return false; + } + /** + * @param integer $attr + * @param mixed $value + */ + public function setAttribute($attr, $value) { + switch($attr): + case Sensei::ATTR_LIFESPAN: + + break; + default: + throw new Sensei_Exception("Unknown attribute"); + endswitch; + + $this->attributes[$attr] = $value; + } + /** + * @return boolean + */ + private function open($save_path,$session_name) { + return true; + } + /** + * @return boolean + */ + public function close() { + return true; + } + /** + * always returns an empty string + * + * @param string $id php session identifier + * @return string + */ + private function read($id) { + $coll = $this->session->query("FROM Sensei_Session, Sensei_Session.Sensei_Variable WHERE Sensei_Session.session_id = ?",array($id)); + $this->record = $coll[0]; + $this->record->user_agent = $_SERVER['HTTP_USER_AGENT']; + $this->record->updated = time(); + $this->record->session_id = $id; + $this->vars = $this->record->Sensei_Variable; + + if($this->record->getState() == Doctrine_Record::STATE_TDIRTY) { + $this->record->created = time(); + $this->record->save(); + } + return ""; + } + /** + * @return boolean + */ + public function write($id,$sess_data) { + return true; + } + /** + * @param string $id php session identifier + * @return Doctrine_Record + */ + private function destroy($id) { + $this->record->delete(); + return $this->record; + } + /** + * @param integer $maxlifetime + */ + private function gc($maxlifetime) { + return true; + } + /** + * flush + * makes all changes persistent + */ + public function flush() { + $this->record->save(); + } + /** + * destructor + */ + public function __destruct() { + $this->flush(); + } +} +?>