name = acym_translation('ACYM_SUBSCRIBER'); $onePlugin->plugin = __CLASS__; $onePlugin->help = 'plugin-subscriber'; return $onePlugin; } function textPopup() { ?> getAllFieldsForUser(); $descriptions = []; $isAutomationAdmin = acym_getVar('string', 'automation'); foreach ($customFields as $one) { $descriptions[$one->namekey] = acym_translation('ACYM_CUSTOM_FIELD'); $fields[] = $one->namekey; } $descriptions['id'] = acym_translation('ACYM_USER_ID'); $descriptions['email'] = acym_translation('ACYM_USER_EMAIL'); $descriptions['name'] = acym_translation('ACYM_USER_NAME'); $descriptions['cms_id'] = acym_translation('ACYM_USER_CMSID'); $descriptions['source'] = acym_translation('ACYM_USER_SOURCE'); $descriptions['confirmed'] = acym_translation('ACYM_USER_CONFIRMED'); $descriptions['active'] = acym_translation('ACYM_USER_ACTIVE'); $descriptions['creation_date'] = acym_translation('ACYM_USER_CREATION_DATE'); $descriptions['open_date'] = acym_translation('ACYM_USER_OPEN_DATE'); $descriptions['date_click'] = acym_translation('ACYM_USER_CLICK_DATE'); $descriptions['send_date'] = acym_translation('ACYM_USER_SEND_DATE'); $text = '
'; if (!empty($isAutomationAdmin)) { $typeinfo = []; $typeinfo[] = acym_selectOption("receiver", acym_translation('ACYM_RECEIVER_INFORMATION')); $typeinfo[] = acym_selectOption("current", acym_translation('ACYM_USER_TRIGGERING_AUTOMATION')); $text .= acym_radio($typeinfo, 'typeinfo', 'receiver', null, ['onclick' => 'changeUserTag(selectedTag)']); } $text .= '

'.acym_translation('ACYM_RECEIVER_INFORMATION').'

'; $others = []; $others['name|part:first|ucfirst'] = ['name' => acym_translation('ACYM_USER_FIRSTPART'), 'desc' => acym_translation('ACYM_USER_FIRSTPART_DESC')]; $others['name|part:last|ucfirst'] = ['name' => acym_translation('ACYM_USER_LASTPART'), 'desc' => acym_translation('ACYM_USER_LASTPART_DESC')]; foreach ($others as $tagname => $tag) { $text .= '
'.$tag['name'].'
'.$tag['desc'].'
'; } foreach ($fields as $fieldname) { if (empty($descriptions[$fieldname])) { continue; } $type = ''; if (in_array($fieldname, ['creation_date', 'open_date', 'date_click', 'send_date'])) { $type = '|type:time'; } $text .= '
'.$fieldname.'
'.$descriptions[$fieldname].'
'; } $text .= '
'; echo $text; } function replaceUserInformation(&$email, &$user, $send = true) { $extractedTags = $this->acympluginHelper->extractTags($email, 'subtag'); if (empty($extractedTags)) return; $userClass = acym_get('class.user'); $user = $userClass->getAllUserFields($user); $tags = []; foreach ($extractedTags as $i => $oneTag) { if (isset($tags[$i])) continue; if (!empty($oneTag->info) && $oneTag->info == 'current') continue; $tags[$i] = empty($user->id) ? $oneTag->default : $this->replaceSubTag($oneTag, $user); } $this->acympluginHelper->replaceTags($email, $tags); } private function replaceSubTag(&$mytag, $user) { $fieldClass = acym_get('class.field'); $field = $mytag->id; if (strpos($mytag->id, 'custom') === false) { $replaceme = (isset($user->$field) && strlen($user->$field) > 0) ? $user->$field : $mytag->default; } else { $value = empty($user->id) ? "" : $fieldClass->getAllfieldBackEndListingByUserIds($user->id, explode(',', $field)[1]); $replaceme = empty($value) ? $mytag->default : $value[explode(',', $field)[1].$user->id]; } $replaceme = nl2br($replaceme); $this->acympluginHelper->formatString($replaceme, $mytag); return $replaceme; } function onAcymDeclareTriggers(&$triggers) { $triggers['user']['user_creation'] = new stdClass(); $triggers['user']['user_creation']->name = acym_translation('ACYM_ON_USER_CREATION'); $triggers['user']['user_creation']->option = ''; $triggers['user']['user_modification'] = new stdClass(); $triggers['user']['user_modification']->name = acym_translation('ACYM_ON_USER_MODIFICATION'); $triggers['user']['user_modification']->option = ''; $triggers['user']['user_click'] = new stdClass(); $triggers['user']['user_click']->name = acym_translation('ACYM_WHEN_USER_CLICKS_MAIL'); $triggers['user']['user_click']->option = ''; $triggers['user']['user_open'] = new stdClass(); $triggers['user']['user_open']->name = acym_translation('ACYM_WHEN_USER_OPEN_MAIL'); $triggers['user']['user_open']->option = ''; $triggers['user']['user_subscribe'] = new stdClass(); $triggers['user']['user_subscribe']->name = acym_translation('ACYM_WHEN_USER_SUBSCRIBES'); $triggers['user']['user_subscribe']->option = ''; } function onAcymDeclareConditions(&$conditions) { $userClass = acym_get('class.user'); $fieldClass = acym_get('class.field'); $fields = $userClass->getAllColumnsUserAndCustomField(); unset($fields['automation']); $customFields = $fieldClass->getAllFieldsForUser(); $customFieldValues = []; foreach ($customFields as $field) { if (in_array($field->type, ['single_dropdown', 'radio', 'checkbox', 'multiple_dropdown']) && !empty($field->value)) { $values = []; $field->value = json_decode($field->value, true); foreach ($field->value as $value) { $valueTmp = new stdClass(); $valueTmp->text = $value['title']; $valueTmp->value = $value['value']; if ($value['disabled'] == 'y') $valueTmp->disable = true; $values[$value['value']] = $valueTmp; } $customFieldValues[$field->id] = ''; } elseif ('date' == $field->type) { $field->option = json_decode($field->option, true); $customFieldValues[$field->id] = acym_tooltip('', acym_translation_sprintf('ACYM_DATE_AUTOMATION_INPUT', $field->option['format']), 'intext_select_automation cell'); } } $operator = acym_get('type.operator'); $conditions['user']['acy_field'] = new stdClass(); $conditions['user']['acy_field']->name = acym_translation('ACYM_ACYMAILING_FIELD'); $conditions['user']['acy_field']->option = '
'; $conditions['user']['acy_field']->option .= acym_select($fields, 'acym_condition[conditions][__numor__][__numand__][acy_field][field]', null, 'class="acym__select acym__automation__conditions__fields__dropdown"'); $conditions['user']['acy_field']->option .= '
'; $conditions['user']['acy_field']->option .= '
'; $conditions['user']['acy_field']->option .= $operator->display('acym_condition[conditions][__numor__][__numand__][acy_field][operator]', '', 'acym__automation__conditions__operator__dropdown'); $conditions['user']['acy_field']->option .= '
'; $conditions['user']['acy_field']->option .= ''; $conditions['user']['acy_field']->option .= implode(' ', $customFieldValues); } function onAcymDeclareFilters(&$filters) { $userClass = acym_get('class.user'); $fieldClass = acym_get('class.field'); $fields = $userClass->getAllColumnsUserAndCustomField(); unset($fields['automation']); $customFields = $fieldClass->getAllFieldsForUser(); $customFieldValues = []; foreach ($customFields as $field) { if (in_array($field->type, ['single_dropdown', 'radio', 'checkbox', 'multiple_dropdown']) && !empty($field->value)) { $values = []; $field->value = json_decode($field->value, true); foreach ($field->value as $value) { $valueTmp = new stdClass(); $valueTmp->text = $value['title']; $valueTmp->value = $value['value']; if ($value['disabled'] == 'y') $valueTmp->disable = true; $values[$value['value']] = $valueTmp; } $customFieldValues[$field->id] = ''; } elseif ('date' == $field->type) { $field->option = json_decode($field->option, true); $customFieldValues[$field->id] = acym_tooltip('', acym_translation_sprintf('ACYM_DATE_AUTOMATION_INPUT', $field->option['format']), 'intext_select_automation cell'); } } $operator = acym_get('type.operator'); $filters['acy_field'] = new stdClass(); $filters['acy_field']->name = acym_translation('ACYM_ACYMAILING_FIELD'); $filters['acy_field']->option = '
'; $filters['acy_field']->option .= acym_select($fields, 'acym_action[filters][__numor__][__numand__][acy_field][field]', null, 'class="acym__select acym__automation__filters__fields__dropdown"'); $filters['acy_field']->option .= '
'; $filters['acy_field']->option .= '
'; $filters['acy_field']->option .= $operator->display('acym_action[filters][__numor__][__numand__][acy_field][operator]', '', 'acym__automation__filters__operator__dropdown'); $filters['acy_field']->option .= '
'; $filters['acy_field']->option .= ''; $filters['acy_field']->option .= implode(' ', $customFieldValues); } function onAcymProcessCondition_acy_field(&$query, &$conditionOptions, $num, &$conditionNotValid) { $usersColumns = acym_getColumns('user'); if (!in_array($conditionOptions['field'], $usersColumns)) { $fieldClass = acym_get('class.field'); $field = $fieldClass->getOneFieldByID($conditionOptions['field']); if ('date' == $field->type) { $conditionOptions['value'] = explode('/', $conditionOptions['value']); $conditionOptions['value'] = json_encode($conditionOptions['value']); } $type = 'phone' == $field->type ? 'phone' : ''; $query->leftjoin['userfield'.$num] = ' #__acym_user_has_field as userfield'.$num.' ON userfield'.$num.'.user_id = user.id AND userfield'.$num.'.field_id = '.intval($conditionOptions['field']); $query->where[] = $query->convertQuery('userfield'.$num, 'value', $conditionOptions['operator'], $conditionOptions['value'], $type); } else { if ($conditionOptions['field'] == 'creation_date') $conditionOptions['value'] = acym_date($conditionOptions['value'], "Y-m-d H:i:s"); $query->where[] = $query->convertQuery('user', $conditionOptions['field'], $conditionOptions['operator'], $conditionOptions['value']); } $affectedRows = $query->count(); if (empty($affectedRows)) $conditionNotValid++; } public function onAcymProcessFilter_acy_field(&$query, &$filterOptions, $num) { $usersColumns = acym_getColumns('user'); if (!in_array($filterOptions['field'], $usersColumns)) { $fieldClass = acym_get('class.field'); $field = $fieldClass->getOneFieldByID($filterOptions['field']); if ('date' == $field->type) { $filterOptions['value'] = explode('/', $filterOptions['value']); $filterOptions['value'] = json_encode($filterOptions['value']); } $type = 'phone' == $field->type ? 'phone' : ''; $query->leftjoin['userfield'.$num] = ' #__acym_user_has_field as userfield'.$num.' ON userfield'.$num.'.user_id = user.id AND userfield'.$num.'.field_id = '.intval($filterOptions['field']); $query->where[] = $query->convertQuery('userfield'.$num, 'value', $filterOptions['operator'], $filterOptions['value'], $type); } else { if ($filterOptions['field'] == 'creation_date') $filterOptions['value'] = acym_date($filterOptions['value'], "Y-m-d H:i:s"); $query->where[] = $query->convertQuery('user', $filterOptions['field'], $filterOptions['operator'], $filterOptions['value']); } } public function onAcymProcessFilterCount_acy_field(&$query, $options, $num) { $this->onAcymProcessFilter_acy_field($query, $options, $num); return acym_translation_sprintf('ACYM_SELECTED_USERS', $query->count()); } public function onAcymDeclareActions(&$actions) { $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'); $actions['acy_user']->option = '
'.acym_select($userActions, 'acym_action[actions][__and__][acy_user][action]', null, 'class="acym__select"').'
'; $userClass = acym_get('class.user'); $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 = acym_get('class.field'); $customFields = $fieldClass->getAllFieldsForUser(); $customFieldValues = []; foreach ($customFields as $field) { if (in_array($field->type, ['single_dropdown', 'radio', 'checkbox', 'multiple_dropdown']) && !empty($field->value)) { $values = []; $field->value = json_decode($field->value, true); foreach ($field->value as $value) { $valueTmp = new stdClass(); $valueTmp->text = $value['title']; $valueTmp->value = $value['value']; if ($value['disabled'] == 'y') $valueTmp->disable = true; $values[$value['value']] = $valueTmp; } $customFieldValues[$field->id] = ''; } elseif ('date' == $field->type) { $field->option = json_decode($field->option, true); $customFieldValues[$field->id] = acym_tooltip('', acym_translation_sprintf('ACYM_DATE_AUTOMATION_INPUT', $field->option['format']), 'intext_select_automation cell'); } } $actions['acy_user_value'] = new stdClass(); $actions['acy_user_value']->name = acym_translation('ACYM_SET_USER_VALUE'); $actions['acy_user_value']->option = '
'.acym_select($userFields, 'acym_action[actions][__and__][acy_user_value][field]', null, 'class="acym__select acym__automation__actions__fields__dropdown"').'
'.acym_select($userOperator, 'acym_action[actions][__and__][acy_user_value][operator]', null, 'class="acym__select acym__automation__actions__operator__dropdown"').'
'; $actions['acy_user_value']->option .= implode(' ', $customFieldValues); $mailClass = acym_get('class.mail'); $mail = $mailClass->getAllTemplateForSelect(); $actions['acy_add_queue'] = new stdClass(); $actions['acy_add_queue']->name = acym_translation('ACYM_ADD_EMAIL_QUEUE'); $actions['acy_add_queue']->option = ''; $actions['acy_add_queue']->option .= ''; $actions['acy_add_queue']->option .= '
'; $actions['acy_add_queue']->option .= '
'.strtolower(acym_translation('ACYM_OR')).'
'; $actions['acy_add_queue']->option .= ''; $actions['acy_add_queue']->option .= '
'; $actions['acy_add_queue']->option .= acym_dateField('acym_action[actions][__and__][acy_add_queue][time]', '{time}'); $actions['acy_add_queue']->option .= '
'; $mailRemove = $mailClass->getAllTemplateForSelect(true); $actions['acy_remove_queue'] = new stdClass(); $actions['acy_remove_queue']->name = acym_translation('ACYM_REMOVE_EMAIL_QUEUE'); $actions['acy_remove_queue']->option = '
'.acym_select($mailRemove, 'acym_action[actions][__and__][acy_remove_queue][mail_id]', null, 'class="acym__select"').'
'; } public function onAcymProcessAction_acy_user(&$query, $action) { if ($action['action'] == 'delete') { $userClass = acym_get('class.user'); $usersToDelete = acym_loadResultArray($query->getQuery(['user.id'])); if (!empty($usersToDelete)) $userClass->delete($usersToDelete); } else { $fieldToUpdate = ''; if ($action['action'] == 'confirm') $fieldToUpdate = 'confirmed = 1'; if ($action['action'] == 'unconfirm') $fieldToUpdate = 'confirmed = 0'; if ($action['action'] == 'active') $fieldToUpdate = 'active = 1'; if ($action['action'] == 'block') $fieldToUpdate = 'active = 0'; $queryToProcess = 'UPDATE #__acym_user AS user SET '.$fieldToUpdate.' WHERE ('.implode(') AND (', $query->where).')'; $nbRows = acym_query($queryToProcess); return acym_translation_sprintf('ACYM_X_USERS_X', $nbRows, acym_translation('ACYM_ACTION_'.strtoupper($action['action']))); } } public function onAcymProcessAction_acy_user_value(&$query, $action) { $value = $action['value']; $replace = ['{year}', '{month}', '{weekday}', '{day}']; $replaceBy = [date('Y'), date('m'), date('N'), date('d')]; $value = str_replace($replace, $replaceBy, $value); if (preg_match_all('#{(year|month|weekday|day)\|(add|remove):([^}]*)}#Uis', $value, $results)) { foreach ($results[0] as $i => $oneMatch) { $format = str_replace(['year', 'month', 'weekday', 'day'], ['Y', 'm', 'N', 'd'], $results[1][$i]); $delay = str_replace(['add', 'remove'], ['+', '-'], $results[2][$i]).intval($results[3][$i]).' '.str_replace('weekday', 'day', $results[1][$i]); $value = str_replace($oneMatch, date($format, strtotime($delay)), $value); } } if (empty($action['operator'])) $action['operator'] = '='; if (in_array($action['operator'], ['+', '-'])) { $value = intval($value); } else { $value = acym_escapeDB($value); } $usersColumns = acym_getColumns('user'); if (in_array($action['field'], $usersColumns)) { $execute = 'UPDATE #__acym_user AS user'; $column = "user.`".acym_secureDBColumn($action['field'])."`"; } else { $fieldClass = acym_get('class.field'); $field = $fieldClass->getOneFieldById($action['field']); if (empty($field)) return 'Unknown field: '.$action['field']; if ('date' == $field->type) $value = acym_escapeDB(json_encode(explode('/', trim($value, '"\'')))); $allColumn = "`user_id`, `field_id`, `value`"; $column = "`value`"; } if ($action['operator'] == '=') { $newValue = $value; } elseif (in_array($action['operator'], ['+', '-'])) { $newValue = $column.' '.$action['operator']." ".$value; } elseif ($action['operator'] == 'add_end') { $newValue = "CONCAT(".$column.", ".$value.")"; } elseif ($action['operator'] == 'add_begin') { $newValue = "CONCAT(".$value.", ".$column.")"; } else { return 'Unknown operator: '.acym_escape($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_translation_sprintf('ACYM_UPDATED_USERS', $nbAffected); } 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 = acym_get('class.mail'); $mail = $mailClass->getOneById($action['mail_id']); if ('automation' != $mail->type) { unset($mail->id); $mail->type = 'automation'; $mail->template = 2; $mail->id = $mailClass->save($mail); } $userIds = acym_loadResultArray($query->getQuery(['user.id'])); $result = $mailClass->sendAutomation($mail->id, $userIds, $sendDate, $automationAdmin); if (is_numeric($result)) { return acym_translation_sprintf('ACYM_EMAILS_ADDED_QUEUE', $result); } else { return $result; } } public function onAcymProcessAction_acy_remove_queue(&$query, $action) { $queryToProcess = 'DELETE FROM #__acym_queue WHERE user_id IN ('.$query->getQuery(['user.id']).')'; $nbRows = acym_query($queryToProcess); return acym_translation_sprintf('ACYM_EMAILS_REMOVED_QUEUE', $nbRows); } public function onAcymAfterUserCreate(&$user) { $automationClass = acym_get('class.automation'); $automationClass->triggerUser('user_creation', $user->id); } public function onAcymAfterUserModify(&$user) { $automationClass = acym_get('class.automation'); $automationClass->triggerUser('user_modification', $user->id); } function onAcymDeclareSummary_conditions(&$automationCondition) { if (!empty($automationCondition['acy_field'])) { $usersColumns = acym_getColumns('user'); if (!in_array($automationCondition['acy_field']['field'], $usersColumns)) { $fieldClass = acym_get('class.field'); $field = $fieldClass->getOneFieldById($automationCondition['acy_field']['field']); $automationCondition['acy_field']['field'] = $field->name; } $automationCondition = acym_translation_sprintf('ACYM_CONDITION_ACY_FIELD_SUMMARY', $automationCondition['acy_field']['field'], $automationCondition['acy_field']['operator'], $automationCondition['acy_field']['value']); } } function onAcymDeclareSummary_filters(&$automationFilter) { if (!empty($automationFilter['acy_field'])) { $usersColumns = acym_getColumns('user'); if (!in_array($automationFilter['acy_field']['field'], $usersColumns)) { $fieldClass = acym_get('class.field'); $field = $fieldClass->getOneFieldById($automationFilter['acy_field']['field']); $automationFilter['acy_field']['field'] = $field->name; } $automationFilter = acym_translation_sprintf('ACYM_FILTER_ACY_FIELD_SUMMARY', $automationFilter['acy_field']['field'], $automationFilter['acy_field']['operator'], $automationFilter['acy_field']['value']); } } 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 = acym_get('class.field'); $field = $fieldClass->getOneFieldById($automationAction['acy_user_value']['field']); $automationAction['acy_user_value']['field'] = $field->name; } $automationAction = acym_translation_sprintf('ACYM_ACTION_USER_VALUE_SUMMARY', $automationAction['acy_user_value']['field'], $automationAction['acy_user_value']['operator'], $automationAction['acy_user_value']['value']); } } public function onAcymDeclareSummary_triggers(&$automation) { if (!empty($automation->triggers['user_open'])) $automation->triggers['user_open'] = acym_translation('ACYM_WHEN_USER_OPEN_MAIL'); if (!empty($automation->triggers['user_click'])) $automation->triggers['user_click'] = acym_translation('ACYM_WHEN_USER_CLICKS_MAIL'); if (!empty($automation->triggers['user_modification'])) $automation->triggers['user_modification'] = acym_translation('ACYM_ON_USER_MODIFICATION'); if (!empty($automation->triggers['user_creation'])) $automation->triggers['user_creation'] = acym_translation('ACYM_ON_USER_CREATION'); if (!empty($automation->triggers['user_subscribe'])) $automation->triggers['user_subscribe'] = acym_translation('ACYM_WHEN_USER_SUBSCRIBES'); } public function onAcymToggleUserConfirmed($userId, $newValue) { if ($newValue == 1) { $userClass = acym_get('class.user'); $userClass->confirm($userId); } } }