/** * Login using a 2-key (username, password) * * @param string $username The authentication username * @param string $password The authentication password * * @return boolean The authentication result (true or false) */ public function login($username, $password) { $tableName = $this->config['table']; $userField = $this->config['user']; $passField = $this->config['pass']; $table = $this->app->call('db')->getTable($tableName); $filter = new Filter($table); $filter->columns('*')->where("{$userField} = ? and {$passField} = ?", array($username, $password))->limit(0, 1); $table->filter($filter); $result = $table->toArray(); if (count($result)) { $this->app->call('session')->set($this->sessionKey, $username); return true; } return false; }
/** * Loads table values with limit * * @param \Duality\Structure\Database\Filter $filter The filter object * * @return \Duality\Structure\Database\Table This table * * @since 0.18.0 */ public function filter(Filter $filter) { $sql = $this->database->getSelect($filter->getSelect(), $this->getName(), $filter->getWhere(), $filter->getGroupBy(), $filter->getOffset(), $filter->getLimit()); $stm = $this->database->getPDO()->prepare($sql); $stm->execute($filter->getWhereValues()); $this->rows->reset(); $columns = $filter->getSelect() == '*' ? $this->getColumns() : explode(',', $filter->getSelect()); while ($trow = $stm->fetch(\PDO::FETCH_ASSOC)) { $row = $this->makeTableRow(); foreach ($columns as $column) { $row->addData(new Property((string) $column), $trow[(string) $column]); } $this->rows->set($trow[$this->primaryKey], $row); } return $this; }
/** * Test database table * * @requires extension pdo */ public function testTable() { $config = array('db' => array('dsn' => DB_DSN, 'user' => DB_USER, 'pass' => DB_PASS)); $app = new \Duality\App(dirname(__FILE__), $config); $db = $app->call('db'); $db->setName('duality'); $table = new Table($db); $table->setName('dummy'); $schema = array('id' => 'auto', 'email' => 'varchar(80)'); $sql = $db->getDropTable($table); $db->getPDO()->exec($sql); $sql = $db->getCreateTable($table, $schema); $db->getPDO()->exec($sql); $expected = array(); $table->setColumns($schema); $result = $table->toArray(); $this->assertEquals($expected, $result); $table->setPrimaryKey('id'); $expected = array(1 => array('id' => 1, 'email' => 'dummy1')); $table->add(1, array('email' => 'dummy1')); $result = $table->find()->toArray(); $this->assertEquals($expected, $result); $expected = array(1 => array('id' => 1, 'email' => 'dummy2')); $table->set(1, array('id' => 1, 'email' => 'dummy2')); $result = $table->find()->toArray(); $this->assertEquals($expected, $result); $expected = array(1 => array('id' => 1, 'email' => 'dummy2')); $table->find(0, 10, 'id = ?', array(1)); $result = $table->toArray(); $this->assertEquals($expected, $result); $expected = array(1 => array('id' => 1, 'email' => 'dummy2')); $filter = new Filter($table); $filter->columns('id,email')->where('id = ?', array(1))->group('id')->limit(0, 10); $table->filter($filter); $result = $table->toArray(); $this->assertEquals($expected, $result); $expected = array('id' => 1, 'email' => 'dummy2'); $result = $table->get(1); $this->assertEquals($expected, $result); $result = $table->has(1); $this->assertTrue($result); $expected = array(1 => array('id' => 1, 'email' => 'dummy2')); $result = $table->find()->toArray(); $this->assertEquals($expected, $result); $expected = array(1 => array('id' => 1, 'email' => 'dummy3'), 2 => array('id' => 2, 'email' => 'dummy4')); $data = array(1 => array('email' => 'dummy3'), 2 => array('email' => 'dummy4')); $table->importArray($data); $result = $table->find()->toArray(); $this->assertEquals($expected, $result); $expected = $expected = array(2 => array('id' => 2, 'email' => 'dummy4')); $table->remove(1); $result = $table->find()->toArray(); $this->assertEquals($expected, $result); $expected = array(); $table->reset(); $result = $table->find()->toArray(); $this->assertEquals($expected, $result); $result = $db->getTable('dummy'); $this->assertInstanceOf('\\Duality\\Structure\\Database\\Table', $result); $sql = $db->getDropTable($table); $db->getPDO()->exec($sql); $result = $db->getTable('dummy'); $this->assertFalse($result); // Clean up $this->cleanUp(); }