Array('self' => 'edit'), 'OnSaveSelected' => Array('self' => 'view'), ); $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 * @access protected * @see OnListBuild */ function SetCustomQuery(&$event) { if ($event->Special == 'module') { $object =& $event->getObject(); $module = $this->Application->GetVar('module'); $object->addFilter('module_filter', '%1$s.Module = '.$this->Conn->qstr($module)); } } /** * Sets status Front-End Only to selected email events * * @param kEvent $event */ function OnFrontOnly(&$event) { $ids = implode(',', $this->StoreSelectedIDs($event)); $table_name = $this->Application->getUnitOption($event->Prefix, 'TableName'); $sql = 'UPDATE '.$table_name.' SET Enabled = 2 WHERE EventId IN ('.$ids.')'; $this->Conn->Query($sql); } /** * Sets selected user to email events selected * * @param kEvent $event */ function OnSelectUser(&$event) { $items_info = $this->Application->GetVar('u'); if ($items_info) { $user_id = array_shift( array_keys($items_info) ); $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 */ function OnEmailEvent(&$event){ $email_event = $event->getEventParam('EmailEventName'); if( strpos($email_event, '_') !== false ) { trigger_error('Invalid email event name '.$email_event.'. Use only UPPERCASE characters and dots as email event names', E_USER_ERROR); } $to_user_id = $event->getEventParam('EmailEventToUserId'); $email_event_type = $event->getEventParam('EmailEventType'); $message_object = &$this->Application->recallObject('emailmessages', null, Array('skip_autoload' => true)); $event_table = $this->Application->getUnitOption('emailevents', 'TableName'); $event_object =& $event->getObject( Array('skip_autoload' => true) ); $event_object->Load(array('Event'=>$email_event, 'Type'=>$email_event_type)); $event_id = $event_object->GetDBField('EventId'); $from_user_id = $event_object->GetDBField('FromUserId'); $type = $event_object->GetDBField('Type'); $enabled = $event_object->GetDBField('Enabled'); $direct_send_params = $event->getEventParam('DirectSendParams'); if ($enabled == 0) return; // disabled event if ($enabled == 2 && $this->Application->IsAdmin() ) return; // event only for front-end if ($type == 1){ // For type "Admin" recipient is a user from field FromUserId which means From/To user in Email events list $to_user_id = $from_user_id; $from_user_id = -1; } /* if (!($to_user_id > 0) && !$direct_send_params){ // if we can not determine recepient we will not send email return; } */ //Parse Message Template $message_object->Load(array('EventId' => $event_id, 'LanguageId' => $this->Application->GetVar('m_lang'))); $message_type = $message_object->GetDBField('MessageType'); $email_object = &$this->Application->recallObject('kEmailMessage'); $email_object->Clear(); // add footer: begin $sql = 'SELECT em.Template FROM '.$message_object->TableName.' em LEFT JOIN '.TABLE_PREFIX.'Events e ON e.EventId = em.EventId WHERE em.LanguageId = '.$message_object->GetDBField('LanguageId').' AND e.Event = "COMMON.FOOTER"'; $footer = explode("\n\n", $this->Conn->GetOne($sql)); $footer = $message_object->GetDBField('MessageType') == 'text' ? $email_object->convertHTMLtoPlain($footer[1]) : $footer[1]; $message_template = $message_object->GetDBField('Template')."\r\n".$footer; // add footer: end $from_user_object = &$this->Application->recallObject('u.email-from', null, Array('skip_autoload' => true)); $from_user_object->Load($from_user_id); // here if we don't have from_user loaded, it takes a default user from config values if ( $from_user_object->IsLoaded() ) { $from_user_email = $from_user_object->GetDBField('Email'); $from_user_name = trim($from_user_object->GetDBField('FirstName').' '.$from_user_object->GetDBField('LastName')); } else { $from_user_email = $this->Application->ConfigValue('Smtp_AdminMailFrom'); } $to_user_object = &$this->Application->recallObject('u.email-to', null, Array('skip_autoload' => true)); $to_user_object->Load($to_user_id); $to_user_email = $to_user_object->GetDBField('Email'); $to_user_name = trim($to_user_object->GetDBField('FirstName').' '.$to_user_object->GetDBField('LastName')); if($direct_send_params){ $to_user_email = ( $direct_send_params['to_email'] ? $direct_send_params['to_email'] : $to_user_email ); $to_user_name = ( $direct_send_params['to_name'] ? $direct_send_params['to_name'] : $to_user_name ); $from_user_email = ( $direct_send_params['from_email'] ? $direct_send_params['from_email'] : $from_user_email); $from_user_name = ( $direct_send_params['from_name'] ? $direct_send_params['from_name'] : $from_user_name ); $message_body_additional = $direct_send_params['message']; } $to_user_email = $to_user_email ? $to_user_email : $this->Application->ConfigValue('Smtp_AdminMailFrom'); $this->Application->makeClass('Template'); $this->Application->InitParser(); $parser_params = $this->Application->Parser->Params; $direct_send_params['message_text'] = $message_body_additional; $this->Application->Parser->Params = array_merge_recursive2($this->Application->Parser->Params, $direct_send_params); $message_template = str_replace('Application->Parser->Parse($message_template, 'email_template', 0); $this->Application->Parser->Params = $parser_params; $message_template = str_replace("\r", "", $message_template); list($message_headers, $message_body) = explode("\n\n", $message_template, 2); $email_object->setFrom($from_user_email, $from_user_name); $email_object->setTo($to_user_email, $to_user_name); $email_object->setSubject('Mail message'); $email_object->setHeaders($message_headers); if ($message_type == 'html'){ $email_object->setHTMLBody($message_body); } else { $email_object->setTextBody($message_body); } $smtp_object = &$this->Application->recallObject('kSmtpClient'); $smtp_object->debug = $this->Application->isDebugMode() && constOn('DBG_SMTP'); $smtp_server = $this->Application->ConfigValue('Smtp_Server'); $smtp_port = $this->Application->ConfigValue('Smtp_Port'); $smtp_authenticate = $this->Application->ConfigValue('Smtp_Authenticate'); if ($smtp_authenticate){ $smtp_user = $this->Application->ConfigValue('Smtp_User'); $smtp_pass = $this->Application->ConfigValue('Smtp_Pass'); }else{ $smtp_user = ''; $smtp_pass = ''; } if ($smtp_server){ if ($email_object->sendSMTP($smtp_object, $smtp_server, $smtp_user, $smtp_pass, $smtp_authenticate)){ $event->status=erSUCCESS; } else { $event->status=erFAIL; } }else{ if($email_object->send()){ $event->status=erSUCCESS; } else { $event->status=erFAIL; } } if ($event->status == erSUCCESS){ if (!$from_user_name) { $from_user_name = strip_tags( $this->Application->ConfigValue('Site_Name') ); } $sql = 'INSERT INTO '.TABLE_PREFIX.'EmailLog SET fromuser = '.$this->Conn->qstr($from_user_name.' ('.$from_user_email.')').', addressto = '.$this->Conn->qstr($to_user_name.' ('.$to_user_email.')').', subject = '.$this->Conn->qstr($email_object->Subject).', timestamp = UNIX_TIMESTAMP(), event = '.$this->Conn->qstr($email_event); $this->Conn->Query($sql); } $this->Application->removeObject('u.email-from'); $this->Application->removeObject('u.email-to'); return $event; } } ?>