Index: trunk/kernel/units/reviews/reviews_event_handler.php =================================================================== diff -u -N -r4627 -r4637 --- trunk/kernel/units/reviews/reviews_event_handler.php (.../reviews_event_handler.php) (revision 4627) +++ trunk/kernel/units/reviews/reviews_event_handler.php (.../reviews_event_handler.php) (revision 4637) @@ -3,6 +3,38 @@ class ReviewsEventHandler extends InpDBEventHandler { /** + * Checks permissions of user + * + * @param kEvent $event + */ + function CheckPermission(&$event) + { + if ($event->Name == 'OnAddReview') { + $item_prefix = $this->getPermPrefix($event); + return $this->Application->CheckPermission($item_prefix.'.REVIEW.PENDING', 0) || $this->Application->CheckPermission($item_prefix.'.REVIEW', 0); + } + + return parent::CheckPermission($event); + } + + /** + * Returns prefix for permissions + * + * @param kEvent $event + */ + function getPermPrefix(&$event) + { + $main_prefix = $this->Application->GetTopmostPrefix($event->Prefix); + // this will return LINK for l, ARTICLE for n, TOPIC for bb, PRODUCT for p + $item_prefix = $this->Application->getUnitOption($main_prefix, 'PermItemPrefix'); + + if (!$item_prefix) $item_prefix = 'PRODUCT'; + + return $item_prefix; + } + + + /** * Apply any custom changes to list's sql query * * @param kEvent $event @@ -131,6 +163,7 @@ } else { + $this->Application->removeObject($event->getPrefixSpecial()); $event->status == erFAIL; $event->redirect=false; $object->FieldErrors['ReviewText']['pseudo'] = 'too_frequent';