Index: trunk/core/units/email_events/email_events_event_handler.php =================================================================== diff -u -N -r4322 -r4674 --- trunk/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 4322) +++ trunk/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 4674) @@ -4,6 +4,41 @@ { /** + * Allows to override standart permission mapping + * + */ + function mapPermissions() + { + parent::mapPermissions(); + $permissions = Array( + 'OnFrontOnly' => Array('self' => 'edit'), + 'OnSaveSelected' => Array('self' => 'add|edit'), + ); + $this->permMapping = array_merge($this->permMapping, $permissions); + } + + /** + * Changes permission section to one from REQUEST, not from config + * + * @param kEvent $event + */ + function CheckPermission(&$event) + { + $module = $this->Application->GetVar('module'); + $module = explode(':', $module, 2); + if (count($module) == 1) { + $main_prefix = $this->Application->findModule('Name', $module[0], 'Var'); + } + else { + $exceptions = Array('Category' => 'c', 'Users' => 'u'); + $main_prefix = $exceptions[ $module[1] ]; + } + $section = $this->Application->getUnitOption($main_prefix.'.email', 'PermSection'); + $event->setEventParam('PermSection', $section); + return parent::CheckPermission($event); + } + + /** * Apply any custom changes to list's sql query * * @param kEvent $event @@ -26,12 +61,12 @@ */ function OnFrontOnly(&$event) { - $this->StoreSelectedIDs($event); - $ids = $this->getSelectedIDs($event); - $ids = implode(',', $ids); + $ids = implode(',', $this->StoreSelectedIDs($event)); - $table = $this->Application->getUnitOption($event->Prefix,'TableName'); - $sql = 'UPDATE '.$table.' SET Enabled = 2 WHERE EventId IN ('.$ids.')'; + $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName'); + $sql = 'UPDATE '.$table_name.' + SET Enabled = 2 + WHERE EventId IN ('.$ids.')'; $this->Conn->Query($sql); } @@ -42,23 +77,33 @@ */ function OnSelectUser(&$event) { - $user_name = $this->Application->GetVar( $event->getPrefixSpecial(true).'_PopupSelectedUser' ); - if( strlen($user_name) > 0 ) - { - $this->StoreSelectedIDs($event); - $ids = $this->getSelectedIDs($event); - $ids = implode(',', $ids); + $items_info = $this->Application->GetVar('u'); + if ($items_info) { + $user_id = array_shift( array_keys($items_info) ); - $user_id = $this->Conn->GetOne('SELECT PortalUserId FROM '.TABLE_PREFIX.'PortalUser WHERE Login = '.$this->Conn->qstr($user_name) ); - - $table = $this->Application->getUnitOption($event->Prefix,'TableName'); - $sql = 'UPDATE '.$table.' SET FromUserId = '.$user_id.' WHERE EventId IN ('.$ids.')'; - + $ids = $this->Application->RecallVar($event->getPrefixSpecial().'_selected_ids'); + $id_field = $this->Application->getUnitOption($event->Prefix, 'IDField'); + $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName'); + $sql = 'UPDATE '.$table_name.' + SET '.$this->Application->RecallVar('dst_field').' = '.$user_id.' + WHERE '.$id_field.' IN ('.$ids.')'; $this->Conn->Query($sql); } + + $this->finalizePopup($event); } /** + * Saves selected ids to session + * + * @param kEvent $event + */ + function OnSaveSelected(&$event) + { + $this->StoreSelectedIDs($event); + } + + /** * Raised when email message shoul be sent * * @param kEvent $event