Array ('self' => true, 'subitem' => true,), 'OnItemBuild' => Array ('self' => true, 'subitem' => true,), ); $this->permMapping = array_merge($this->permMapping, $permissions); } /** * Occurs, when config was parsed, allows to change config data dynamically * * @param kEvent $event * @return void * @access protected */ protected function OnAfterConfigRead(kEvent $event) { parent::OnAfterConfigRead($event); if ( $this->Application->RecallVar('user_id') == USER_GUEST ) { // make Guest Name and Email required for guests $config = $event->getUnitConfig(); $fields = $config->getFields(); $fields['GuestName']['required'] = 1; $fields['GuestEmail']['required'] = 1; $config->setFields($fields); } } /** * Applies special filter, that allows to select all commented from current poll * * @param kEvent $event * @return void * @access protected * @see kDBEventHandler::OnListBuild() */ protected function SetCustomQuery(kEvent $event) { parent::SetCustomQuery($event); if ( $this->Application->isAdminUser ) { return; } /** @var kDBList $object */ $object = $event->getObject(); $object->addFilter('comment_status', '%1$s.Status = ' . STATUS_ACTIVE); } /** * Occurs before creating item * * @param kEvent $event * @return void * @access protected */ protected function OnBeforeItemCreate(kEvent $event) { if ( !$this->Application->isAdmin ) { /** @var kDBItem $object */ $object = $event->getObject(); $parent_info = $object->getLinkedInfo($event->Special); $poll_id = $parent_info['ParentId']; if ( $poll_id ) { /** @var SpamHelper $spam_helper */ $spam_helper = $this->Application->recallObject('SpamHelper'); $spam_helper->InitHelper($poll_id, 'PollComment', 0); // ResourceId used for SpamControl only if ( $spam_helper->InSpamControl() ) { $event->status = kEvent::erFAIL; $object->SetError('CommentBody', 'too_frequent', 'lu_error_AlreadyCommented'); return ; } $object->SetDBField('PollId', $poll_id); // PollId } $object->SetDBField('CreatedById', $this->Application->RecallVar('user_id')); $object->SetDBField('UserIP', $this->Application->getClientIp()); $object->SetDBField('Status', STATUS_ACTIVE); } parent::OnBeforeItemCreate($event); } /** * Updates item review counter * * @param kEvent $event * @return void * @access protected */ protected function OnCreate(kEvent $event) { parent::OnCreate($event); if ( !$this->Application->isAdmin && $event->status == kEvent::erSUCCESS ) { $event->setRedirectParam('opener', 's'); $event->setRedirectParam('pass', 'm,poll'); } } /** * Wrapper for OnCreate event * * @param kEvent $event * * @return void * @access protected */ protected function OnCreateAjax(kEvent $event) { /** @var AjaxFormHelper $ajax_form_helper */ $ajax_form_helper = $this->Application->recallObject('AjaxFormHelper'); $ajax_form_helper->transitEvent($event, 'OnCreate'); } /** * Protects against spam * * @param kEvent $event * @return void * @access protected */ protected function OnAfterItemCreate(kEvent $event) { parent::OnAfterItemCreate($event); if ( !$this->Application->isAdminUser ) { /** @var SpamHelper $spam_helper */ $spam_helper = $this->Application->recallObject('SpamHelper'); /** @var kDBItem $object */ $object = $event->getObject(); $comment_settings = 'poll_CommentDelay_Value:poll_CommentDelay_Interval'; $spam_helper->InitHelper($object->GetDBField('PollId'), 'PollComment', $comment_settings); $spam_helper->AddToSpamControl(); } } }