From 866a3e94e06d00934b4937e279a44684325666df Mon Sep 17 00:00:00 2001 From: Romain Neutron Date: Fri, 8 Nov 2013 18:24:17 +0100 Subject: [PATCH] Fix events manager eroneous notification availability detection --- lib/classes/eventsmanager/broker.php | 7 +++++-- lib/classes/eventsmanager/notify/autoregister.php | 15 ++++++++------- .../eventsmanager/notify/bridgeuploadfail.php | 3 ++- .../eventsmanager/notify/downloadmailfail.php | 3 ++- lib/classes/eventsmanager/notify/feed.php | 3 ++- lib/classes/eventsmanager/notify/order.php | 14 ++++++-------- lib/classes/eventsmanager/notify/orderdeliver.php | 3 ++- .../eventsmanager/notify/ordernotdelivered.php | 3 ++- lib/classes/eventsmanager/notify/push.php | 3 ++- lib/classes/eventsmanager/notify/register.php | 15 ++++++++------- .../eventsmanager/notify/uploadquarantine.php | 11 +++++++---- lib/classes/eventsmanager/notify/validate.php | 3 ++- .../eventsmanager/notify/validationdone.php | 15 ++++++--------- .../eventsmanager/notify/validationreminder.php | 3 ++- lib/classes/eventsmanager/notifyAbstract.php | 2 +- 15 files changed, 57 insertions(+), 46 deletions(-) diff --git a/lib/classes/eventsmanager/broker.php b/lib/classes/eventsmanager/broker.php index 0cec21b9af..0d99174bb8 100644 --- a/lib/classes/eventsmanager/broker.php +++ b/lib/classes/eventsmanager/broker.php @@ -57,7 +57,7 @@ class eventsmanager_broker foreach ($this->pool_classes[$classname]->get_events() as $event) $this->bind($event, $classname); - if ($type === 'notify' && $this->pool_classes[$classname]->is_available()) + if ($type === 'notify' && $this->pool_classes[$classname]) $this->notifications[] = $classname; } } @@ -286,7 +286,7 @@ class eventsmanager_broker WHERE usr_id = :usr_id AND id = :notif_id'; $stmt = $this->app['phraseanet.appbox']->get_connection()->prepare($sql); - $stmt->execute(array(':usr_id' => $usr_id, ':notif_id' => $notifications)); + $stmt->execute(array(':usr_id' => $usr_id, ':notif_id' => $notification)); $stmt->closeCursor(); return; @@ -298,6 +298,9 @@ class eventsmanager_broker $personnal_notifications = array(); foreach ($this->notifications as $notification) { + if (!$this->pool_classes[$notification]->is_available($usr_id)) { + continue; + } $group = $this->pool_classes[$notification]->get_group(); $group = $group === null ? _('Notifications globales') : $group; diff --git a/lib/classes/eventsmanager/notify/autoregister.php b/lib/classes/eventsmanager/notify/autoregister.php index e9b2c62977..20120a5302 100644 --- a/lib/classes/eventsmanager/notify/autoregister.php +++ b/lib/classes/eventsmanager/notify/autoregister.php @@ -214,21 +214,22 @@ class eventsmanager_notify_autoregister extends eventsmanager_notifyAbstract } /** + * @param integer $usr_id The id of the user to check * * @return boolean */ - public function is_available() + public function is_available($usr_id) { - $bool = false; - - if ( ! $this->app['authentication']->isAuthenticated() || ! $this->app['registration.enabled']) { + if (!$this->app['registration.enabled']) { return false; } - if ($this->app['authentication']->getUser()->ACL()->has_right('manageusers') === true) { - $bool = true; + try { + $user = \User_Adapter::getInstance($usr_id, $this->app); + } catch (\Exception $e) { + return false; } - return $bool; + return $user->ACL()->has_right('manageusers'); } } diff --git a/lib/classes/eventsmanager/notify/bridgeuploadfail.php b/lib/classes/eventsmanager/notify/bridgeuploadfail.php index 4e062ee96c..692ab2ad54 100644 --- a/lib/classes/eventsmanager/notify/bridgeuploadfail.php +++ b/lib/classes/eventsmanager/notify/bridgeuploadfail.php @@ -159,10 +159,11 @@ class eventsmanager_notify_bridgeuploadfail extends eventsmanager_notifyAbstract } /** + * @param integer $usr_id The id of the user to check * * @return boolean */ - public function is_available() + public function is_available($usr_id) { return true; } diff --git a/lib/classes/eventsmanager/notify/downloadmailfail.php b/lib/classes/eventsmanager/notify/downloadmailfail.php index b10124bf84..96abfd0272 100644 --- a/lib/classes/eventsmanager/notify/downloadmailfail.php +++ b/lib/classes/eventsmanager/notify/downloadmailfail.php @@ -157,10 +157,11 @@ class eventsmanager_notify_downloadmailfail extends eventsmanager_notifyAbstract } /** + * @param integer $usr_id The id of the user to check * * @return boolean */ - public function is_available() + public function is_available($usr_id) { return true; } diff --git a/lib/classes/eventsmanager/notify/feed.php b/lib/classes/eventsmanager/notify/feed.php index 43f8845ed4..ec1a7caeee 100644 --- a/lib/classes/eventsmanager/notify/feed.php +++ b/lib/classes/eventsmanager/notify/feed.php @@ -176,10 +176,11 @@ class eventsmanager_notify_feed extends eventsmanager_notifyAbstract } /** + * @param integer $usr_id The id of the user to check * * @return boolean */ - public function is_available() + public function is_available($usr_id) { return true; } diff --git a/lib/classes/eventsmanager/notify/order.php b/lib/classes/eventsmanager/notify/order.php index 2b0715cd28..9f4b8f907a 100644 --- a/lib/classes/eventsmanager/notify/order.php +++ b/lib/classes/eventsmanager/notify/order.php @@ -185,20 +185,18 @@ class eventsmanager_notify_order extends eventsmanager_notifyAbstract } /** + * @param integer $usr_id The id of the user to check * * @return boolean */ - public function is_available() + public function is_available($usr_id) { - $bool = false; - if ( !$this->app['authentication']->isAuthenticated()) { + try { + $user = \User_Adapter::getInstance($usr_id, $this->app); + } catch (\Exception $e) { return false; } - if ($this->app['authentication']->getUser()->ACL()->has_right('order_master')) { - $bool = true; - } - - return $bool; + return $user->ACL()->has_right('order_master'); } } diff --git a/lib/classes/eventsmanager/notify/orderdeliver.php b/lib/classes/eventsmanager/notify/orderdeliver.php index 5ef08084ee..d74e801bdc 100644 --- a/lib/classes/eventsmanager/notify/orderdeliver.php +++ b/lib/classes/eventsmanager/notify/orderdeliver.php @@ -196,10 +196,11 @@ class eventsmanager_notify_orderdeliver extends eventsmanager_notifyAbstract } /** + * @param integer $usr_id The id of the user to check * * @return boolean */ - public function is_available() + public function is_available($usr_id) { return true; } diff --git a/lib/classes/eventsmanager/notify/ordernotdelivered.php b/lib/classes/eventsmanager/notify/ordernotdelivered.php index e8adf56217..c69a8de038 100644 --- a/lib/classes/eventsmanager/notify/ordernotdelivered.php +++ b/lib/classes/eventsmanager/notify/ordernotdelivered.php @@ -141,10 +141,11 @@ class eventsmanager_notify_ordernotdelivered extends eventsmanager_notifyAbstrac } /** + * @param integer $usr_id The id of the user to check * * @return boolean */ - public function is_available() + public function is_available($usr_id) { return true; } diff --git a/lib/classes/eventsmanager/notify/push.php b/lib/classes/eventsmanager/notify/push.php index ecb994ad29..236b48ae1a 100644 --- a/lib/classes/eventsmanager/notify/push.php +++ b/lib/classes/eventsmanager/notify/push.php @@ -162,10 +162,11 @@ class eventsmanager_notify_push extends eventsmanager_notifyAbstract } /** + * @param integer $usr_id The id of the user to check * * @return boolean */ - public function is_available() + public function is_available($usr_id) { return true; } diff --git a/lib/classes/eventsmanager/notify/register.php b/lib/classes/eventsmanager/notify/register.php index 32522e58c7..53a8bb4081 100644 --- a/lib/classes/eventsmanager/notify/register.php +++ b/lib/classes/eventsmanager/notify/register.php @@ -193,21 +193,22 @@ class eventsmanager_notify_register extends eventsmanager_notifyAbstract } /** + * @param integer $usr_id The id of the user to check * * @return boolean */ - public function is_available() + public function is_available($usr_id) { - $bool = false; - - if ( !$this->app['authentication']->isAuthenticated() || ! $this->app['registration.enabled']) { + if (!$this->app['registration.enabled']) { return false; } - if ($this->app['authentication']->getUser()->ACL()->has_right('manageusers')) { - $bool = true; + try { + $user = \User_Adapter::getInstance($usr_id, $this->app); + } catch (\Exception $e) { + return false; } - return $bool; + return $user->ACL()->has_right('manageusers'); } } diff --git a/lib/classes/eventsmanager/notify/uploadquarantine.php b/lib/classes/eventsmanager/notify/uploadquarantine.php index ef0d8ba346..1bacde3c76 100644 --- a/lib/classes/eventsmanager/notify/uploadquarantine.php +++ b/lib/classes/eventsmanager/notify/uploadquarantine.php @@ -180,15 +180,18 @@ class eventsmanager_notify_uploadquarantine extends eventsmanager_notifyAbstract } /** + * @param integer $usr_id The id of the user to check * * @return boolean */ - public function is_available() + public function is_available($usr_id) { - if (null !== $this->app['authentication']->getUser()) { - return $this->app['authentication']->getUser()->ACL()->has_right('addrecord'); + try { + $user = \User_Adapter::getInstance($usr_id, $this->app); + } catch (\Exception $e) { + return false; } - return false; + return $user->ACL()->has_right('addrecord'); } } diff --git a/lib/classes/eventsmanager/notify/validate.php b/lib/classes/eventsmanager/notify/validate.php index a19a226a29..0777eed98f 100644 --- a/lib/classes/eventsmanager/notify/validate.php +++ b/lib/classes/eventsmanager/notify/validate.php @@ -190,10 +190,11 @@ class eventsmanager_notify_validate extends eventsmanager_notifyAbstract } /** + * @param integer $usr_id The id of the user to check * * @return boolean */ - public function is_available() + public function is_available($usr_id) { return true; } diff --git a/lib/classes/eventsmanager/notify/validationdone.php b/lib/classes/eventsmanager/notify/validationdone.php index f4096351f4..cd4c2af921 100644 --- a/lib/classes/eventsmanager/notify/validationdone.php +++ b/lib/classes/eventsmanager/notify/validationdone.php @@ -178,21 +178,18 @@ class eventsmanager_notify_validationdone extends eventsmanager_notifyAbstract } /** + * @param integer $usr_id The id of the user to check * * @return boolean */ - public function is_available() + public function is_available($usr_id) { - $bool = false; - - if ( ! $this->app['authentication']->isAuthenticated()) { + try { + $user = \User_Adapter::getInstance($usr_id, $this->app); + } catch (\Exception $e) { return false; } - if ($this->app['authentication']->getUser()->ACL()->has_right('push')) { - $bool = true; - } - - return $bool; + return $user->ACL()->has_right('push'); } } diff --git a/lib/classes/eventsmanager/notify/validationreminder.php b/lib/classes/eventsmanager/notify/validationreminder.php index bc08597d2b..531f4cc586 100644 --- a/lib/classes/eventsmanager/notify/validationreminder.php +++ b/lib/classes/eventsmanager/notify/validationreminder.php @@ -187,10 +187,11 @@ class eventsmanager_notify_validationreminder extends eventsmanager_notifyAbstra } /** + * @param integer $usr_id The id of the user to check * * @return string */ - public function is_available() + public function is_available($usr_id) { return true; } diff --git a/lib/classes/eventsmanager/notifyAbstract.php b/lib/classes/eventsmanager/notifyAbstract.php index 272a7f82a3..2a7bb3372d 100644 --- a/lib/classes/eventsmanager/notifyAbstract.php +++ b/lib/classes/eventsmanager/notifyAbstract.php @@ -11,7 +11,7 @@ abstract class eventsmanager_notifyAbstract extends eventsmanager_eventAbstract abstract public function datas($datas, $unread); - public function is_available() + public function is_available($usr_id) { return true; }