Index: core/units/logs/email_logs/email_logs_config.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/units/logs/email_logs/email_logs_config.php (revision 15908) +++ core/units/logs/email_logs/email_logs_config.php (revision ) @@ -65,9 +65,16 @@ 'ListSQLs' => Array ( '' => ' SELECT %1$s.* %2$s - FROM %1$s', + FROM %1$s + LEFT JOIN ' . TABLE_PREFIX . 'Users to_user ON %1$s.ToUserId = to_user.PortalUserId', ), + 'CalculatedFields' => Array ( + '' => Array ( + 'ToUser' => 'IF (ISNULL(to_user.Username), IF (%1$s.ToUserId = ' . USER_ROOT . ', "root", IF (%1$s.ToUserId = ' . USER_GUEST . ', "Guest", "n/a")), IF(to_user.Username = "", to_user.Email, to_user.Username))', + ), + ), + 'ListSortings' => Array ( '' => Array ( 'Sorting' => Array ('SentOn' => 'desc'), @@ -91,19 +98,36 @@ ), 'EventParams' => Array ('type' => 'string', 'default' => NULL), 'AccessKey' => Array ('type' => 'string', 'max_len' => 20, 'not_null' => 1, 'default' => ''), + 'ToUserId' => Array('type' => 'int', 'default' => NULL), + 'ItemPrefix' => Array( + 'type' => 'string', 'max_len' => 50, + 'formatter' => 'kOptionsFormatter', + 'options_sql' => 'SELECT DISTINCT %s FROM ' . TABLE_PREFIX . 'EmailLog ORDER BY Phrase', + 'option_key_field' => 'ItemPrefix', 'option_title_field' => 'CONCAT("la_prefix_", ItemPrefix) AS Phrase', + 'use_phrases' => 1, + 'not_null' => 1, 'default' => '' - ), + ), + 'ItemId' => Array('type' => 'int', 'default' => NULL), + ), + 'VirtualFields' => array( + 'ToUser' => array('type' => 'string', 'default' => ''), + ), + 'Grids' => Array ( 'Default' => Array ( 'Fields' => Array ( 'EmailLogId' => Array ('title' => 'column:la_fld_Id', 'data_block' => 'grid_checkbox_td', 'filter_block' => 'grid_range_filter', 'width' => 80), 'From' => Array ('title' => 'column:la_fld_Sender', 'filter_block' => 'grid_like_filter', 'width' => 200), 'To' => Array ('title' => 'column:la_fld_Recipient', 'filter_block' => 'grid_like_filter', 'width' => 200), + 'ToUser' => Array ('title' => 'column:la_fld_RecipientUser', 'filter_block' => 'grid_like_filter', 'width' => 120), 'Subject' => Array ('filter_block' => 'grid_like_filter', 'width' => 200), 'TemplateName' => Array ('filter_block' => 'grid_like_filter', 'width' => 170), 'EventType' => Array ('title' => 'column:la_fld_Type', 'filter_block' => 'grid_options_filter', 'width' => 60), 'SentOn' => Array ('title' => 'la_prompt_SentOn', 'filter_block' => 'grid_date_range_filter', 'width' => 145), // 'EventParams' => Array ('title' => 'la_col_EventParams', 'filter_block' => 'grid_like_filter'), + 'ItemPrefix' => Array('filter_block' => 'grid_options_filter'), + 'ItemId' => Array('filter_block' => 'grid_range_filter', 'width' => 80), ), ), ), \ No newline at end of file Index: core/kernel/db/dbitem.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/kernel/db/dbitem.php (revision 15928) +++ core/kernel/db/dbitem.php (revision ) @@ -1554,4 +1554,19 @@ { $this->Loaded = $is_loaded; } + + /** + * Returns parser parameters, used to identify this object in the e-mail template. + * + * @param array $merge_with Original send params to merge with. + * + * @return array + */ + public function getEmailParams(array $merge_with = array()) + { + $merge_with['item_id'] = $this->GetID(); + $merge_with['PrefixSpecial'] = $this->getPrefixSpecial(); + + return $merge_with; + } } \ No newline at end of file Index: core/units/users/users_event_handler.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/units/users/users_event_handler.php (revision 15928) +++ core/units/users/users_event_handler.php (revision ) @@ -658,8 +658,8 @@ ); $user_id = $this->Application->RecallVar('user_id'); - $email_sent = $this->Application->emailUser('USER.SUGGEST', $user_id, $send_params); - $this->Application->emailAdmin('USER.SUGGEST'); + $email_sent = $this->Application->emailUser('USER.SUGGEST', $user_id, $object->getEmailParams($send_params)); + $this->Application->emailAdmin('USER.SUGGEST', null, $object->getEmailParams()); if ( $email_sent ) { $event->SetRedirectParam('pass', 'all'); @@ -816,8 +816,9 @@ $this->Conn->doInsert($fields_hash, TABLE_PREFIX . 'UserGroupRelations'); } - $this->Application->emailAdmin('USER.SUBSCRIBE'); - $this->Application->emailUser('USER.SUBSCRIBE', $object->GetID()); + $send_params = $object->getEmailParams(); + $this->Application->emailUser('USER.SUBSCRIBE', $object->GetID(), $send_params); + $this->Application->emailAdmin('USER.SUBSCRIBE', null, $send_params); } /** @@ -833,8 +834,13 @@ WHERE PortalUserId = ' . $user_id . ' AND GroupId = ' . $group_id; $this->Conn->Query($sql); - $this->Application->emailAdmin('USER.UNSUBSCRIBE'); - $this->Application->emailUser('USER.UNSUBSCRIBE', $user_id); + $send_params = Array ( + 'PrefixSpecial' => 'u', + 'item_id' => $user_id + ); + + $this->Application->emailUser('USER.UNSUBSCRIBE', $user_id, $send_params); + $this->Application->emailAdmin('USER.UNSUBSCRIBE', null, $send_params); } /** @@ -877,7 +883,7 @@ } if ($found && $allow_reset) { - $this->Application->emailUser('USER.PSWDC', $user->GetID()); + $this->Application->emailUser('USER.PSWDC', $user->GetID(), $user->getEmailParams()); $event->redirect = $this->Application->GetVar('template_success'); return ; @@ -1038,11 +1044,15 @@ $records = $this->Conn->Query($sql); if ($records) { $conditions = Array(); + $send_params = Array ('PrefixSpecial' => 'u'); + foreach ($records as $record) { - $this->Application->emailUser('USER.MEMBERSHIP.EXPIRATION.NOTICE', $record['PortalUserId']); - $this->Application->emailAdmin('USER.MEMBERSHIP.EXPIRATION.NOTICE'); + $send_params['item_id'] = $record['PortalUserId']; + $this->Application->emailUser('USER.MEMBERSHIP.EXPIRATION.NOTICE', $record['PortalUserId'], $send_params); + $this->Application->emailAdmin('USER.MEMBERSHIP.EXPIRATION.NOTICE', null, $send_params); $conditions[] = '(PortalUserId = '.$record['PortalUserId'].' AND GroupId = '.$record['GroupId'].')'; } + $sql = 'UPDATE '.TABLE_PREFIX.'UserGroupRelations SET ExpirationReminderSent = 1 WHERE '.implode(' OR ', $conditions); @@ -1056,9 +1066,12 @@ WHERE (MembershipExpires IS NOT NULL) AND (MembershipExpires < '.time().')'; $user_ids = $this->Conn->GetCol($sql); if ($user_ids) { + $send_params = Array ('PrefixSpecial' => 'u'); + foreach ($user_ids as $id) { - $this->Application->emailUser('USER.MEMBERSHIP.EXPIRED', $id); - $this->Application->emailAdmin('USER.MEMBERSHIP.EXPIRED'); + $send_params['item_id'] = $id; + $this->Application->emailUser('USER.MEMBERSHIP.EXPIRED', $id, $send_params); + $this->Application->emailAdmin('USER.MEMBERSHIP.EXPIRED', null, $send_params); } } $sql = 'DELETE FROM '.TABLE_PREFIX.'UserGroupRelations @@ -1384,7 +1397,7 @@ $object->SetField('Password', $email_passwords[$temp_id]); $object->SetField('VerifyPassword', $email_passwords[$temp_id]); - $this->Application->emailUser($temp_id > 0 ? 'USER.NEW.PASSWORD': 'USER.ADD.BYADMIN', $object->GetID()); + $this->Application->emailUser($temp_id > 0 ? 'USER.NEW.PASSWORD': 'USER.ADD.BYADMIN', $object->GetID(), $object->getEmailParams()); unset($email_passwords[$temp_id]); $this->Application->StoreVar('email_passwords', serialize($email_passwords)); @@ -1433,8 +1446,14 @@ $email_event = isset($status_events[$new_status]) ? $status_events[$new_status] : false; if (($prev_status != $new_status) && $email_event) { - $this->Application->emailUser($email_event, $user_id); - $this->Application->emailAdmin($email_event); + + $send_params = Array ( + 'PrefixSpecial' => 'u', + 'item_id' => $user_id, + ); + + $this->Application->emailUser($email_event, $user_id, $send_params); + $this->Application->emailAdmin($email_event, null, $send_params); } // deletes sessions from users, that are no longer active @@ -1488,11 +1507,11 @@ 'to_name' => trim($object->GetDBField('FirstName') . ' ' . $object->GetDBField('LastName')), ); - $this->Application->emailUser('USER.EMAIL.CHANGE.UNDO', null, $send_params); + $this->Application->emailUser('USER.EMAIL.CHANGE.UNDO', null, $object->getEmailParams($send_params)); } if ( $new_email ) { - $this->Application->emailUser('USER.EMAIL.CHANGE.VERIFY', $user_id); + $this->Application->emailUser('USER.EMAIL.CHANGE.VERIFY', $user_id, $object->getEmailParams()); } // direct DB update, since USER.EMAIL.CHANGE.VERIFY puts verification code in user record, that we don't want to loose Index: core/install/install_schema.sql IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/install/install_schema.sql (revision 15908) +++ core/install/install_schema.sql (revision ) @@ -432,6 +432,9 @@ EventType tinyint(4) DEFAULT NULL, EventParams text, AccessKey varchar(32) NOT NULL DEFAULT '', + ToUserId int(11) DEFAULT NULL, + ItemPrefix varchar(50) NOT NULL DEFAULT '', + ItemId int(11) DEFAULT NULL, PRIMARY KEY (EmailLogId), KEY `timestamp` (SentOn) ); \ No newline at end of file Index: core/units/forms/forms/forms_eh.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/units/forms/forms/forms_eh.php (revision 15928) +++ core/units/forms/forms/forms_eh.php (revision ) @@ -231,13 +231,13 @@ if ( $object->Validate() ) { $event->redirect = $this->Application->GetVar('success_template'); - $this->Application->emailAdmin($this->Application->GetVar('email_event')); - $send_params = Array ( + $this->Application->emailAdmin($this->Application->GetVar('email_event'), null, $object->getEmailParams()); + + $send_params = $object->getEmailParams(Array ( 'to_email' => $field_values[$this->Application->GetVar('email_field')], 'to_name' => $field_values[$this->Application->GetVar('name_field')] - ); - + )); $this->Application->emailUser($this->Application->GetVar('email_event'), null, $send_params); if ( $field_values['MailingList'] ) { \ No newline at end of file Index: core/units/forms/form_submissions/form_submissions_eh.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/units/forms/form_submissions/form_submissions_eh.php (revision 15908) +++ core/units/forms/form_submissions/form_submissions_eh.php (revision ) @@ -244,15 +244,15 @@ $notify_email = $form->GetDBField('SubmitNotifyEmail'); if ( $notify_email ) { - $send_params = Array ( + $send_params = $object->getEmailParams(Array ( 'to_name' => $notify_email, 'to_email' => $notify_email, - ); + )); $this->Application->emailAdmin('FORM.SUBMITTED', null, $send_params); } else { - $this->Application->emailAdmin('FORM.SUBMITTED'); + $this->Application->emailAdmin('FORM.SUBMITTED', null, $object->getEmailParams()); } // $this->Application->emailUser('FORM.SUBMITTED', null, Array ('to_email' => '')); \ No newline at end of file Index: core/units/users/users_item.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/units/users/users_item.php (revision 15928) +++ core/units/users/users_item.php (revision ) @@ -55,16 +55,18 @@ function sendEmails() { + $send_params = $this->getEmailParams(); + switch ( $this->GetDBField('Status') ) { case STATUS_ACTIVE: $event_name = $this->Application->ConfigValue('User_Password_Auto') ? 'USER.VALIDATE' : 'USER.ADD'; - $this->Application->emailAdmin($event_name); - $this->Application->emailUser($event_name, $this->GetID()); + $this->Application->emailUser($event_name, $this->GetID(), $send_params); + $this->Application->emailAdmin($event_name, null, $send_params); break; case STATUS_PENDING: - $this->Application->emailAdmin('USER.ADD.PENDING'); - $this->Application->emailUser('USER.ADD.PENDING', $this->GetID()); + $this->Application->emailUser('USER.ADD.PENDING', $this->GetID(), $send_params); + $this->Application->emailAdmin('USER.ADD.PENDING', null, $send_params); break; } } \ No newline at end of file Index: core/units/categories/categories_event_handler.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/units/categories/categories_event_handler.php (revision 15928) +++ core/units/categories/categories_event_handler.php (revision ) @@ -902,7 +902,7 @@ if ( $new_status != $old_statuses[$category_id] && in_array($new_status, $process_statuses) ) { $object->Load($category_id); $email_event = $new_status == STATUS_ACTIVE ? 'CATEGORY.APPROVE' : 'CATEGORY.DENY'; - $this->Application->emailUser($email_event, $object->GetDBField('CreatedById')); + $this->Application->emailUser($email_event, $object->GetDBField('CreatedById'), $object->getEmailParams()); } } } @@ -1509,11 +1509,12 @@ $event->SetRedirectParam('opener', 's'); // send email events + $send_params = $object->getEmailParams(); + $event_suffix = $is_active ? 'ADD' : 'ADD.PENDING'; $perm_prefix = $event->getUnitConfig()->getPermItemPrefix(); - $event_suffix = $is_active ? 'ADD' : 'ADD.PENDING'; - $this->Application->emailAdmin($perm_prefix . '.' . $event_suffix); - $this->Application->emailUser($perm_prefix . '.' . $event_suffix, $object->GetDBField('CreatedById')); + $this->Application->emailUser($perm_prefix . '.' . $event_suffix, $object->GetDBField('CreatedById'), $send_params); + $this->Application->emailAdmin($perm_prefix . '.' . $event_suffix, null, $send_params); } /** @@ -1607,7 +1608,7 @@ $event->status = kEvent::erSUCCESS; $email_event = $event->Name == 'OnMassApprove' ? 'CATEGORY.APPROVE' : 'CATEGORY.DENY'; - $this->Application->emailUser($email_event, $object->GetDBField('CreatedById')); + $this->Application->emailUser($email_event, $object->GetDBField('CreatedById'), $object->getEmailParams()); } else { $event->status = kEvent::erFAIL; \ No newline at end of file Index: core/install/upgrades.sql IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/install/upgrades.sql (revision 15917) +++ core/install/upgrades.sql (revision ) @@ -2948,3 +2948,10 @@ INSERT INTO SystemSettings VALUES(DEFAULT, 'EmailDelivery', '2', 'In-Portal', 'in-portal:configure_advanced', 'la_section_SettingsMailling', 'la_config_EmailDelivery', 'radio', NULL, '1=la_opt_EmailDeliveryQueue||2=la_opt_EmailDeliveryImmediate', 50.11, 0, 1, NULL); DELETE FROM UserPersistentSessionData WHERE VariableName = 'email-queue[Default]columns_.'; + +ALTER TABLE EmailLog + ADD ToUserId INT(11) DEFAULT NULL, + ADD ItemPrefix VARCHAR(50) NOT NULL DEFAULT '', + ADD ItemId INT(11) DEFAULT NULL; + +DELETE FROM UserPersistentSessionData WHERE VariableName = 'email-log[Default]columns_.'; Index: core/admin_templates/logs/email_logs/email_log_edit.tpl IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- core/admin_templates/logs/email_logs/email_log_edit.tpl (revision 15908) +++ core/admin_templates/logs/email_logs/email_log_edit.tpl (revision ) @@ -90,6 +90,12 @@ + + + + + +