$name]); exit; } $return = []; $return[] = [-1, acym_translation('ACYM_ALL_MAILS')]; $search = acym_utf8Encode(acym_getVar('string', 'search', '')); $elements = acym_loadObjectList( 'SELECT `id`, `subject`, `name` FROM #__acym_mail WHERE (`subject` LIKE '.acym_escapeDB('%'.$search.'%').' OR `name` LIKE '.acym_escapeDB('%'.$search.'%').') AND `type` != '.acym_escapeDB(MailClass::TYPE_NOTIFICATION).' ORDER BY `subject` ASC LIMIT 20' ); foreach ($elements as $oneElement) { $return[] = [$oneElement->id, $oneElement->name]; } echo json_encode($return); exit; } public function onAcymDeclareActions(array &$actions): void { $userActions = [ 'confirm' => acym_translation('ACYM_CONFIRM_USER'), 'unconfirm' => acym_translation('ACYM_UNCONFIRM_USER'), 'active' => acym_translation('ACYM_ACTIVE_USER'), 'block' => acym_translation('ACYM_BLOCK_USER'), 'delete' => acym_translation('ACYM_DELETE_USER'), ]; $actions['acy_user'] = new stdClass(); $actions['acy_user']->name = acym_translation('ACYM_ACTION_ON_USERS'); ob_start(); include acym_getPartial('actions', 'acy_user'); $actions['acy_user']->option = ob_get_clean(); $userClass = new UserClass(); $userFields = $userClass->getAllColumnsUserAndCustomField(true); unset($userFields['id']); unset($userFields['cms_id']); unset($userFields['key']); unset($userFields['active']); unset($userFields['source']); unset($userFields['confirmed']); unset($userFields['automation']); unset($userFields['creation_date']); $userOperator = [ '=' => '=', '-' => '-', '+' => '+', 'add_end' => acym_translation('ACYM_ADD_AT_END'), 'add_begin' => acym_translation('ACYM_ADD_AT_BEGINNING'), ]; $fieldClass = new FieldClass(); $customFields = $fieldClass->getAllFieldsForUser(); $customFieldValues = []; $actions['acy_user_value'] = new stdClass(); $actions['acy_user_value']->name = acym_translation('ACYM_SET_USER_VALUE'); ob_start(); include acym_getPartial('actions', 'acy_user_value'); $actions['acy_user_value']->option = ob_get_clean(); $actions['acy_add_queue'] = new stdClass(); $actions['acy_add_queue']->name = acym_translation('ACYM_ADD_EMAIL_QUEUE'); ob_start(); include acym_getPartial('actions', 'acy_add_queue'); $actions['acy_add_queue']->option = ob_get_clean(); $actions['acy_send_email'] = new stdClass(); $actions['acy_send_email']->name = acym_translation('ACYM_SEND_EMAIL'); ob_start(); include acym_getPartial('actions', 'acy_send_email'); $actions['acy_send_email']->option = ob_get_clean(); $actions['acy_remove_queue'] = new stdClass(); $actions['acy_remove_queue']->name = acym_translation('ACYM_REMOVE_EMAIL_QUEUE'); $ajaxParams = [ 'plugin' => __CLASS__, 'trigger' => 'searchEmails', ]; ob_start(); include acym_getPartial('actions', 'acy_remove_queue'); $actions['acy_remove_queue']->option = ob_get_clean(); if ($this->config->get('require_confirmation', '1') === '1') { $actions['resend_confirmation'] = new stdClass(); $actions['resend_confirmation']->name = acym_translation('ACYM_RESEND_CONFIRMATION'); // The action doesn't save if there are no options $actions['resend_confirmation']->option = ''; } } public function onAcymDeclareActionsScenario(array &$actions): void { $this->onAcymDeclareActions($actions); unset($actions['acy_add_queue']); } public function onAcymProcessAction_acy_user(&$query, $action) { if ($action['action'] == 'delete') { $userClass = new UserClass(); $usersToDelete = acym_loadResultArray($query->getQuery(['user.id'])); if (!empty($usersToDelete)) $userClass->delete($usersToDelete, true); } else { $fieldToUpdate = ''; if ($action['action'] === 'confirm') $fieldToUpdate = 'confirmed = 1'; if ($action['action'] === 'unconfirm') $fieldToUpdate = 'confirmed = 0'; if ($action['action'] === 'active') $fieldToUpdate = 'active = 1, deactivation_date = NULL'; if ($action['action'] === 'block') $fieldToUpdate = 'active = 0, deactivation_date = UTC_TIMESTAMP()'; $queryToProcess = 'UPDATE #__acym_user AS `user` SET '.$fieldToUpdate.' WHERE ('.implode(') AND (', $query->where).')'; $nbRows = acym_query($queryToProcess); return acym_translationSprintf('ACYM_X_USERS_X', $nbRows, acym_translation('ACYM_ACTION_'.strtoupper($action['action']))); } } public function onAcymProcessAction_acy_user_value(&$query, $action) { $value = $action['value']; $value = acym_replaceDateTags($value); if (empty($action['operator'])) $action['operator'] = '='; $usersColumns = acym_getColumns('user'); if (in_array($action['field'], $usersColumns)) { $execute = 'UPDATE #__acym_user AS user'; $column = 'user.`'.acym_secureDBColumn($action['field']).'`'; } else { $fieldClass = new FieldClass(); $field = $fieldClass->getOneById($action['field']); if (empty($field)) { return 'Unknown field: '.$action['field']; } $allColumn = '`user_id`, `field_id`, `value`'; $column = '`value`'; } if ($action['operator'] === '=') { $newValue = acym_escapeDB($value); } elseif (in_array($action['operator'], ['+', '-'])) { $newValue = $column.' '.$action['operator'].' '.intval($value); } elseif ($action['operator'] === 'add_end') { $newValue = 'CONCAT('.$column.', '.acym_escapeDB($value).')'; } elseif ($action['operator'] === 'add_begin') { $newValue = 'CONCAT('.acym_escapeDB($value).', '.$column.')'; } else { return 'Unknown operator: '.esc_attr($action['operator']); } if (in_array($action['field'], $usersColumns)) { $execute .= ' SET '.$column.' = '.$newValue; if (!empty($query->where)) $execute .= ' WHERE ('.implode(') AND (', $query->where).')'; } else { $customFieldAlreadyExists = acym_loadResult('SELECT COUNT(user_id) FROM #__acym_user_has_field WHERE field_id = '.intval($action['field'])); $execute = 'INSERT INTO #__acym_user_has_field ('.$allColumn.') SELECT id AS user_id, '.intval( $action['field'] ).' AS field_id, '.$newValue.' AS value FROM #__acym_user AS user WHERE ('.implode( ') AND (', $query->where ).') ON DUPLICATE KEY UPDATE '.$column.' = VALUES('.$column.')'; } $nbAffected = acym_query($execute); if (!empty($customFieldAlreadyExists)) { $nbAffected -= $customFieldAlreadyExists; } return acym_translationSprintf('ACYM_UPDATED_USERS', $nbAffected); } public function onAcymProcessAction_acy_send_email(&$query, &$action) { if (empty($action['mail_id'])) { return acym_translation('ACYM_NO_MAIL_SET'); } $mailerHelper = new MailerHelper(); $userIds = acym_loadResultArray($query->getQuery(['user.id'])); if (empty($userIds)) { return acym_translation('ACYM_NO_USER_FOUND'); } $errors = []; foreach ($userIds as $userId) { try { $mailSent = $mailerHelper->sendOne($action['mail_id'], $userId); if (!$mailSent) { $errors[] = acym_translationSprintf('ACYM_COULD_NOT_SEND_EMAIL_TO_USER_X', $userId); acym_logError('Error while sending email', 'action_acy_send_email'); } } catch (Exception $e) { $errors[] = acym_translationSprintf('ACYM_COULD_NOT_SEND_EMAIL_TO_USER_X_ERROR_X', $userId, $e->getMessage()); } } return empty($errors) ? acym_translation('ACYM_EMAILS_SENT') : implode('
', $errors); } public function onAcymProcessAction_acy_add_queue(&$query, &$action, $automationAdmin) { if (empty($action['time']) || empty($action['mail_id'])) return ''; $sendDate = acym_replaceDate($action['time']); $sendDate = acym_date($sendDate, 'Y-m-d H:i:s', false); $mailClass = new MailClass(); //We generate the new mail if it's a template $mail = $mailClass->getOneById($action['mail_id']); if (empty($mail)) return ''; if (MailClass::TYPE_AUTOMATION !== $mail->type) { unset($mail->id); $mail->type = MailClass::TYPE_AUTOMATION; $mail->id = $mailClass->save($mail); } $userIds = acym_loadResultArray($query->getQuery(['user.id'])); if (empty($userIds)) { $result = 0; } else { $result = $mailClass->sendAutomation($mail->id, $userIds, $sendDate, $automationAdmin); } if (is_numeric($result)) { return acym_translationSprintf('ACYM_EMAILS_ADDED_QUEUE', $result); } else { return $result; } } public function onAcymProcessAction_acy_remove_queue(&$query, $action) { if (empty($action['mail_id'])) return ''; $mailCondition = ''; if ($action['mail_id'] != -1) { $mailCondition = ' AND `mail_id` = '.intval($action['mail_id']); } $nbRows = acym_query('DELETE FROM #__acym_queue WHERE `user_id` IN ('.$query->getQuery(['user.id']).')'.$mailCondition); return acym_translationSprintf('ACYM_EMAILS_REMOVED_QUEUE', $nbRows); } public function onAcymProcessAction_resend_confirmation(&$query, &$action) { $mailClass = new MailClass(); $confirmationMail = $mailClass->getOneByName('acy_confirm'); $sendDate = acym_date('now', 'Y-m-d H:i:s', false); $queryInsert = 'INSERT IGNORE INTO #__acym_queue (`mail_id`, `user_id`, `sending_date`, `priority`, `try`) '; $queryInsert .= '('.$query->getQuery( [ intval($confirmationMail->id), 'user.id', acym_escapeDB($sendDate), '1', '0', ] ).')'; $nbInserted = acym_query($queryInsert); if (is_numeric($nbInserted)) { return acym_translationSprintf('ACYM_EMAILS_ADDED_QUEUE', $nbInserted); } else { return $nbInserted; } } public function onAcymDeclareSummary_actions(&$automationAction) { if (!empty($automationAction['acy_user'])) { $userActions = [ 'confirm' => acym_translation('ACYM_WILL_CONFIRM'), 'unconfirm' => acym_translation('ACYM_WILL_UNCONFIRM'), 'active' => acym_translation('ACYM_WILL_ACTIVE'), 'block' => acym_translation('ACYM_WILL_BLOCK'), 'delete' => acym_translation('ACYM_WILL_DELETE'), ]; $automationAction = $userActions[$automationAction['acy_user']['action']]; } if (!empty($automationAction['acy_user_value'])) { $usersColumns = acym_getColumns('user'); if (!in_array($automationAction['acy_user_value']['field'], $usersColumns)) { $fieldClass = new FieldClass(); $field = $fieldClass->getOneById($automationAction['acy_user_value']['field']); $automationAction['acy_user_value']['field'] = $field->name; } $automationAction = acym_translationSprintf( 'ACYM_ACTION_USER_VALUE_SUMMARY', $automationAction['acy_user_value']['field'], $automationAction['acy_user_value']['operator'], $automationAction['acy_user_value']['value'] ); } if (!empty($automationAction['acy_add_queue'])) { $mailClass = new MailClass(); $mail = $mailClass->getOneById($automationAction['acy_add_queue']['mail_id']); if (empty($mail)) { $automationAction = ''.acym_translation('ACYM_SELECT_AN_EMAIL').''; } else { $queueTime = empty($automationAction['acy_add_queue']['time']) ? '[time]' : $automationAction['acy_add_queue']['time']; $automationAction = acym_translationSprintf( 'ACYM_ACTION_ADD_QUEUE_SUMMARY', $mail->name, acym_date(acym_replaceDate($queueTime), 'd M Y H:i') ); } } if (!empty($automationAction['acy_remove_queue'])) { $mailClass = new MailClass(); $mail = $mailClass->getOneById($automationAction['acy_remove_queue']['mail_id']); if (empty($mail)) { if ($automationAction['acy_remove_queue']['mail_id'] == -1) { $automationAction = acym_translation('ACYM_EMPTY_QUEUE_USER'); } else { $automationAction = ''.acym_translation('ACYM_SELECT_AN_EMAIL').''; } } else { $automationAction = acym_translationSprintf('ACYM_ACTION_REMOVE_QUEUE_SUMMARY', $mail->name); } } if (!empty($automationAction['resend_confirmation'])) { $automationAction = acym_translation('ACYM_RESEND_CONFIRMATION_SUMMARY'); } } }