From fa3a2e469db519571fa7dc13bc832e7de1f8057f Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Wed, 20 Mar 2013 10:46:37 +0100 Subject: throw exceptions when attributes dont exist --- db/entity.php | 33 ++++++++++++++++++++++++++------- db/item.php | 38 ++++++++++++++++++++++++++++---------- db/itemmapper.php | 6 +++--- db/statusflag.php | 25 +++++++++++++++++++------ 4 files changed, 76 insertions(+), 26 deletions(-) (limited to 'db') diff --git a/db/entity.php b/db/entity.php index 5654e1b80..31a0296cd 100644 --- a/db/entity.php +++ b/db/entity.php @@ -42,17 +42,36 @@ abstract class Entity { * getter method */ public function __call($methodName, $args){ + + // setters if(strpos($methodName, 'set') === 0){ - $setterPart = substr($methodName, 3); - $attr = lcfirst($setterPart); + $attr = lcfirst( substr($methodName, 3) ); - $this->markFieldUpdated($attr); - $this->$attr = $args[0]; + // setters should only work for existing attributes + if(property_exists($this, $attr)){ + $this->markFieldUpdated($attr); + $this->$attr = $args[0]; + } else { + throw new \BadFunctionCallException($attr . + ' is not a valid attribute'); + } + + // getters } elseif(strpos($methodName, 'get') === 0) { - $getterPart = substr($methodName, 3); - $attr = lcfirst($getterPart); - return $this->$attr; + $attr = lcfirst( substr($methodName, 3) ); + + // getters should only work for existing attributes + if(property_exists($this, $attr)){ + return $this->$attr; + } else { + throw new \BadFunctionCallException($attr . + ' is not a valid attribute'); + } + } else { + throw new \BadFunctionCallException($methodName . + ' does not exist'); } + } diff --git a/db/item.php b/db/item.php index ad245d486..66ee0ef7e 100644 --- a/db/item.php +++ b/db/item.php @@ -1,12 +1,25 @@ +* @author Bernhard Posselt +* @copyright 2012 Alessandro Cosentino cosenal@gmail.com +* @copyright 2012 Bernhard Posselt nukeawhale@gmail.com +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. * -* This file is licensed under the Affero General Public License version 3 or later. -* See the COPYING-README file +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . * */ @@ -25,6 +38,15 @@ class Item extends Entity { public $feedTitle; public $enclosure; + public function setRead() { + $this->markFieldUpdated('status'); + $this->status &= ~StatusFlag::UNREAD; + } + + public function isRead() { + return !($this->status & StatusFlag::UNREAD); + } + } @@ -60,17 +82,13 @@ class Item extends Entity { - public function setRead() { - $this->status &= ~StatusFlag::UNREAD; - } + public function setUnread() { $this->status |= StatusFlag::UNREAD; } - public function isRead() { - return !($this->status & StatusFlag::UNREAD); - } + public function setImportant() { $this->status |= StatusFlag::IMPORTANT; diff --git a/db/itemmapper.php b/db/itemmapper.php index 7dca01dcc..e79cabb7c 100644 --- a/db/itemmapper.php +++ b/db/itemmapper.php @@ -23,9 +23,9 @@ class ItemMapper extends Mapper { public function findAllFromFeed($feedId, $userId){ - $sql = 'SELECT * FROM `*PREFIX*news_items` - WHERE user_id = ? - AND feed_id = ?'; + $sql = 'SELECT * FROM `*PREFIX*news_items` ' . + 'WHERE user_id = ? ' . + 'AND feed_id = ?'; $result = $this->execute($sql, array($feedId, $userId)); $items = array(); diff --git a/db/statusflag.php b/db/statusflag.php index c4920a192..1b01ab42b 100644 --- a/db/statusflag.php +++ b/db/statusflag.php @@ -1,18 +1,31 @@ +* @author Bernhard Posselt +* @copyright 2012 Alessandro Cosentino cosenal@gmail.com +* @copyright 2012 Bernhard Posselt nukeawhale@gmail.com +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. * -* This file is licensed under the Affero General Public License version 3 or later. -* See the COPYING-README file +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see . * */ -namespace OCA\News; +namespace OCA\News\Db; -class StatusFlag{ +class StatusFlag { const UNREAD = 0x02; const IMPORTANT = 0x04; const DELETED = 0x08; -- cgit v1.2.3