From 816a3a784fbe8fff4b83967d7d30a322d071a52c Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Tue, 6 Jan 2015 13:49:50 +0000 Subject: [PATCH] Add ConfigMapper, similar to chat app. Also implement setCountry call, need to use and handle it on the interface now --- appinfo/ocsmsapp.php | 41 +++++++++++++++----------- controller/smscontroller.php | 13 +++++++- db/configmapper.php | 57 ++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 18 deletions(-) create mode 100644 db/configmapper.php diff --git a/appinfo/ocsmsapp.php b/appinfo/ocsmsapp.php index 10e3aaa..6e3686b 100644 --- a/appinfo/ocsmsapp.php +++ b/appinfo/ocsmsapp.php @@ -20,6 +20,8 @@ use \OCA\OcSms\Controller\SmsController; use \OCA\OcSms\Db\Sms; use \OCA\OcSms\Db\SmsMapper; +use \OCA\OcSms\Db\ConfigMapper; + use \OCA\OcSms\Lib\PhoneNumberFormatter; class OcSmsApp extends App { @@ -27,9 +29,6 @@ class OcSmsApp extends App { /** * @var array used to cache the parsed contacts for every request */ - /* - caching dosn“t work because on every call all will be reinstantiated - */ private static $contacts; private static $contactPhotos; @@ -44,23 +43,17 @@ class OcSmsApp extends App { $this->c = $container; $app = $this; - /** - * Controllers - */ - - $container->registerService('SmsController', function($c) use($app) { - return new SmsController( - $c->query('AppName'), - $c->query('Request'), - $c->query('UserId'), - $c->query('SmsMapper'), - $app - ); - }); - /** * Database Layer */ + $container->registerService('ConfigMapper', function ($c) use ($app) { + return new ConfigMapper( + $c->query('ServerContainer')->getDb(), + $app->getUserId(), + $c->query('ServerContainer')->getCrypto() + ); + }); + $container->registerService('Sms', function($c) { return new Sms($c->query('ServerContainer')->getDb()); }); @@ -76,6 +69,20 @@ class OcSmsApp extends App { return \OCP\User::getUser(); }); + /** + * Controllers + */ + $container->registerService('SmsController', function($c) use($app) { + return new SmsController( + $c->query('AppName'), + $c->query('Request'), + $c->query('UserId'), + $c->query('SmsMapper'), + $c->query('ConfigMapper'), + $app + ); + }); + /** * Managers */ diff --git a/controller/smscontroller.php b/controller/smscontroller.php index 50916ed..085aa46 100644 --- a/controller/smscontroller.php +++ b/controller/smscontroller.php @@ -16,22 +16,29 @@ use \OCP\IRequest; use \OCP\AppFramework\Http\TemplateResponse; use \OCP\AppFramework\Controller; use \OCP\AppFramework\Http\JSONResponse; + use \OCA\OcSms\AppInfo\OcSmsApp; + +use \OCA\OcSms\Db\ConfigMapper; use \OCA\OcSms\Db\SmsMapper; + +use \OCA\OcSms\Lib\CountryCodes; use \OCA\OcSms\Lib\PhoneNumberFormatter; class SmsController extends Controller { private $app; private $userId; + private $configMapper; private $smsMapper; private $errorMsg; - public function __construct ($appName, IRequest $request, $userId, SmsMapper $mapper, OcSmsApp $app){ + public function __construct ($appName, IRequest $request, $userId, SmsMapper $mapper, ConfigMapper $cfgMapper, OcSmsApp $app){ parent::__construct($appName, $request); $this->app = $app; $this->userId = $userId; $this->smsMapper = $mapper; + $this->configMapper = $cfgMapper; } /** @@ -287,6 +294,10 @@ class SmsController extends Controller { * @NoAdminRequired */ function setCountry($country) { + if (!array_key_exists($country, CountryCodes::$codes)) { + return new JSONResponse(array("status" => false, "msg" => "Invalid country")); + } + $this->configMapper->set("country", $country); return new JSONResponse(array("status" => true, "msg" => "OK")); } } diff --git a/db/configmapper.php b/db/configmapper.php new file mode 100644 index 0000000..e6ea71d --- /dev/null +++ b/db/configmapper.php @@ -0,0 +1,57 @@ + + * @copyright Loic Blot 2014-2015 + */ + +namespace OCA\OcSms\Db; + +use OCP\AppFramework\Db\DoesNotExistException; +use \OCP\AppFramework\Db\Mapper; +use \OCP\IDb; + +class ConfigMapper extends Mapper { + + /** + * @var string ownCloud user id + */ + private $user; + + /** + * @var \OCP\Security\ICrypto + */ + private $crypto; + + public function __construct(IDb $api, $user, $crypto){ + parent::__construct($api, 'ocsms_config'); + $this->user = $user; + $this->crypto = $crypto; + } + + public function set($backend, $key, $value){ + $value = $this->crypto->encrypt($value); + if($this->hasKey($key, $value)){ + $sql = "UPDATE `*PREFIX*chat_config` SET `value` = ? WHERE `user` = ? AND `keyi` = ?"; + $this->execute($sql, array($value, $this->user, $backend, $key)); + } else { + $sql = "INSERT INTO `*PREFIX*chat_config` (`user`,`key`,`value`) VALUES (?,?,?);"; + $this->execute($sql, array($this->user, $key, $value)); + } + } + + public function hasKey($key, $value){ + try { + $sql = "SELECT key FROM `*PREFIX*ocsms_config` WHERE `key` = ? AND `user` = ?"; + $this->findEntity($sql, array($key, $this->user)); + return true; + } catch (DoesNotExistException $e){ + return false; + } + } +?>