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; } $object = $event->getObject(); /* @var $object kDBList */ $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 ) { $object = $event->getObject(); /* @var $object kDBItem */ $parent_info = $object->getLinkedInfo($event->Special); $poll_id = $parent_info['ParentId']; if ( $poll_id ) { $spam_helper = $this->Application->recallObject('SpamHelper'); /* @var $spam_helper SpamHelper */ $spam_helper->InitHelper($poll_id, 'PollComment', 0); // ResourceId used for SpamControl only if ( $spam_helper->InSpamControl() ) { $event->status = kEvent::erFAIL; $object->SetError('CommentText', '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'); $event->redirect = $this->Application->GetVar('success_template'); } } /** * Protects against spam * * @param kEvent $event * @return void * @access protected */ protected function OnAfterItemCreate(kEvent $event) { parent::OnAfterItemCreate($event); if ( !$this->Application->isAdminUser ) { $spam_helper = $this->Application->recallObject('SpamHelper'); /* @var $spam_helper SpamHelper */ $object = $event->getObject(); /* @var $object kDBItem */ $comment_settings = 'poll_CommentDelay_Value:poll_CommentDelay_Interval'; $spam_helper->InitHelper($object->GetDBField('PollId'), 'PollComment', $comment_settings); $spam_helper->AddToSpamControl(); } } }