/** * generate_default_message_templates * * @access public * @static * @return bool | array */ public static function generate_default_message_templates() { $success = FALSE; $installed_messengers = $default_messengers = array(); //include our helper EE_Registry::instance()->load_helper('MSG_Template'); //get all installed messenger objects $installed = EEH_MSG_Template::get_installed_message_objects(); //let's setup the $installed messengers in an array AND the messengers that are set to be activated on install. foreach ($installed['messengers'] as $msgr) { if ($msgr instanceof EE_messenger) { $installed_messengers[$msgr->name] = $msgr; if ($msgr->activate_on_install) { $default_messengers[] = $msgr->name; } } } //let's determine if we've already got an active messengers option $active_messengers = EEH_MSG_Template::get_active_messengers_in_db(); //things that have already been activated before $has_activated = get_option('ee_has_activated_messenger'); //do an initial loop to determine if we need to continue $def_ms = array(); foreach ($default_messengers as $msgr) { if (isset($active_messengers[$msgr]) || isset($has_activated[$msgr])) { continue; } $def_ms[] = $msgr; } //setup the $installed_mts in an array foreach ($installed['message_types'] as $imt) { if ($imt instanceof EE_message_type) { $installed_mts[$imt->name] = $imt; } } //loop through default array for default messengers (if present) if (!empty($def_ms)) { foreach ($def_ms as $messenger) { //all is good so let's setup the default stuff. We need to use the given messenger object (if exists) to get the default message type for the messenger. if (!isset($installed_messengers[$messenger])) { continue; } /** @var EE_messenger[] $installed_messengers */ $default_mts = $installed_messengers[$messenger]->get_default_message_types(); $active_messengers[$messenger]['obj'] = $installed_messengers[$messenger]; foreach ($default_mts as $index => $mt) { //is there an installed_mt matching the default string? If not then nothing to do here. if (!isset($installed_mts[$mt])) { unset($default_mts[$index]); continue; } //we need to setup any initial settings for message types /** @var EE_message_type[] $installed_mts */ $settings_fields = $installed_mts[$mt]->get_admin_settings_fields(); $settings = array(); if (is_array($settings_fields)) { foreach ($settings_fields as $field => $values) { if (isset($values['default'])) { $settings[$field] = $values['default']; } } } $active_messengers[$messenger]['settings'][$messenger . '-message_types'][$mt]['settings'] = $settings; $has_activated[$messenger][] = $mt; } //setup any initial settings for the messenger $msgr_settings = $installed_messengers[$messenger]->get_admin_settings_fields(); if (!empty($msgr_settings)) { foreach ($msgr_settings as $field => $value) { $active_messengers[$messenger]['settings'][$field] = $value; } } //now let's save the settings for this messenger! Must do now because the validator checks the db for active messengers to validate. EEH_MSG_Template::update_active_messengers_in_db($active_messengers); //let's generate all the templates but only if the messenger has default_mts (otherwise its just activated). if (!empty($default_mts)) { $success = EEH_MSG_Template::generate_new_templates($messenger, $default_mts, '', TRUE); } } } //end check for empty( $def_ms ) //still need to see if there are any message types to activate for active messengers foreach ($active_messengers as $messenger => $settings) { $msg_obj = $settings['obj']; if (!$msg_obj instanceof EE_messenger) { continue; } $all_default_mts = $msg_obj->get_default_message_types(); $new_default_mts = array(); //loop through each default mt reported by the messenger and make sure its set in its active db entry. foreach ($all_default_mts as $index => $mt) { //already active? already has generated templates? || has already been activated before (we dont' want to reactivate things users intentionally deactivated). if (isset($has_activated[$messenger]) && in_array($mt, $has_activated[$messenger]) || isset($active_messengers[$messenger]['settings'][$messenger . '-message_types'][$mt]) || EEH_MSG_Template::already_generated($messenger, $mt, 0, FALSE)) { continue; } //is there an installed_mt matching the default string? If not then nothing to do here. if (!isset($installed_mts[$mt])) { unset($all_default_mts[$mt]); continue; } $settings_fields = $installed_mts[$mt]->get_admin_settings_fields(); $settings = array(); if (is_array($settings_fields)) { foreach ($settings_fields as $field => $values) { if (isset($values['default'])) { $settings[$field] = $values['default']; } } } $active_messengers[$messenger]['settings'][$messenger . '-message_types'][$mt]['settings'] = $settings; $new_default_mts[] = $mt; $has_activated[$messenger][] = $mt; } if (!empty($new_default_mts)) { $success = EEH_MSG_Template::generate_new_templates($messenger, $new_default_mts, '', TRUE); } } //now let's save the settings for this messenger! EEH_MSG_Template::update_active_messengers_in_db($active_messengers); //update $has_activated record update_option('ee_has_activated_messenger', $has_activated); //that's it! return $success; }
/** * Activates the specified messenger * @param string $messenger_name * @param array $message_types (optional) An array of message types to activate with this messenger. If * included we do NOT setup the default message types (assuming * they are already setup.) * @return boolean an array of generated templates or false if nothing generated/activated. */ public function activate_messenger($messenger_name, $mts = array()) { $active_messengers = EEH_MSG_Template::get_active_messengers_in_db(); $message_types = $this->get_installed_message_types(); $installed_messengers = $this->get_installed_messengers(); $mts_to_activate = array(); $templates = false; //get has_active so we can be sure its kept up to date. $has_activated = get_option('ee_has_activated_messenger'); //grab the messenger to work with. $messenger = isset($installed_messengers[$messenger_name]) ? $installed_messengers[$messenger_name] : null; //it's inactive. Activate it. if ($messenger instanceof EE_messenger) { $active_messengers[$messenger->name]['obj'] = $messenger; /** @var EE_messenger[] $installed_messengers */ $mts_to_activate = !empty($mts) ? $mts : $messenger->get_default_message_types(); foreach ($mts_to_activate as $message_type) { //we need to setup any initial settings for message types /** @var EE_message_type[] $installed_mts */ $settings_fields = isset($message_types[$message_type]) ? $message_types[$message_type]->get_admin_settings_fields() : array(); if (!empty($settings_fields)) { foreach ($settings_fields as $field => $values) { $settings[$field] = $values['default']; } } else { $settings = array(); } $active_messengers[$messenger->name]['settings'][$messenger->name . '-message_types'][$message_type]['settings'] = $settings; if (!empty($has_activated[$messenger->name]) && !in_array($message_type, $has_activated[$messenger->name])) { $has_activated[$messenger->name][] = $message_type; } } //setup any initial settings for the messenger $msgr_settings = $messenger->get_admin_settings_fields(); if (!empty($msgr_settings)) { foreach ($msgr_settings as $field => $value) { $active_messengers[$messenger->name]['settings'][$field] = $value; } } EEH_MSG_Template::update_active_messengers_in_db($active_messengers); update_option('ee_has_activated_messenger', $has_activated); //make sure that the cached active_messengers is set on this object $this->_active_messengers[$messenger->name] = $messenger; $this->_active_message_types[$messenger->name] = $active_messengers[$messenger->name]; //might need to generate new templates if (!empty($mts_to_activate)) { $templates = EEH_MSG_Template::generate_new_templates($messenger->name, $mts_to_activate, 0, TRUE); } } return $templates; }
/** * This will activate and generate default messengers and default message types for those messengers. * * @param EE_message_Resource_Manager $message_resource_manager * @return array|bool True means there were default messengers and message type templates generated. * False means that there were no templates generated * (which could simply mean there are no default message types for a messenger). * @throws EE_Error */ protected static function _activate_and_generate_default_messengers_and_message_templates(EE_Message_Resource_Manager $message_resource_manager) { /** @type EE_messenger[] $messengers_to_generate */ $messengers_to_generate = self::_get_default_messengers_to_generate_on_activation($message_resource_manager); $installed_message_types = $message_resource_manager->installed_message_types(); $templates_generated = false; foreach ($messengers_to_generate as $messenger_to_generate) { $default_message_type_names_for_messenger = $messenger_to_generate->get_default_message_types(); //verify the default message types match an installed message type. foreach ($default_message_type_names_for_messenger as $key => $name) { if (!isset($installed_message_types[$name]) || $message_resource_manager->has_message_type_been_activated_for_messenger($name, $messenger_to_generate->name)) { unset($default_message_type_names_for_messenger[$key]); } } // in previous iterations, the active_messengers option in the db // needed updated before calling create templates. however with the changes this may not be necessary. // This comment is left here just in case we discover that we _do_ need to update before // passing off to create templates (after the refactor is done). // @todo remove this comment when determined not necessary. $message_resource_manager->activate_messenger($messenger_to_generate->name, $default_message_type_names_for_messenger, false); //create any templates needing created (or will reactivate templates already generated as necessary). if (!empty($default_message_type_names_for_messenger)) { $templates_generated = EEH_MSG_Template::generate_new_templates($messenger_to_generate->name, $default_message_type_names_for_messenger, '', true); } } return $templates_generated; }
/** * _generate_new_templates * This will handle the messenger, message_type selection when "adding a new custom template" for an event and will automatically create the defaults for the event. The user would then be redirected to edit the default context for the event. * * @access protected * @param string $messenger the messenger we are generating templates for * @param array $message_types array of message types that the templates are generated for. * @param int $GRP_ID If this is a custom template being generated then a GRP_ID needs to be included to indicate the message_template_group being used as the base. * @return array|error_object array of data required for the redirect to the correct edit page or error object if encountering problems. */ protected function _generate_new_templates($messenger, $message_types, $GRP_ID = 0, $global = FALSE) { //if no $message_types are given then that's okay... this may be a messenger that just adds shortcodes, so we just don't generate any templates. if (empty($message_types)) { return true; } EE_Registry::instance()->load_helper('MSG_Template'); return EEH_MSG_Template::generate_new_templates($messenger, $message_types, $GRP_ID, $global); }
/** * _generate_new_templates * This will handle the messenger, message_type selection when "adding a new custom template" for an event and will automatically create the defaults for the event. The user would then be redirected to edit the default context for the event. * * @access protected * @param string $messenger the messenger we are generating templates for * @param array $message_types array of message types that the templates are generated for. * @param int $GRP_ID If this is a custom template being generated then a GRP_ID needs to be included to indicate the message_template_group being used as the base. * @return array|error_object array of data required for the redirect to the correct edit page or error object if encountering problems. */ protected function _generate_new_templates($messenger, $message_types, $GRP_ID = 0, $global = FALSE) { EE_Registry::instance()->load_helper('MSG_Template'); return EEH_MSG_Template::generate_new_templates($messenger, $message_types, $GRP_ID, $global); }
/** * _generate_new_templates * This will handle the messenger, message_type selection when "adding a new custom template" for an event and will * automatically create the defaults for the event. The user would then be redirected to edit the default context * for the event. * * * @param string $messenger the messenger we are generating templates for * @param array $message_types array of message types that the templates are generated for. * @param int $GRP_ID If this is a custom template being generated then a GRP_ID needs to be included to indicate * the message_template_group being used as the base. * * @param bool $global * @return array|bool array of data required for the redirect to the correct edit page or bool if * encountering problems. * @throws \EE_Error */ protected function _generate_new_templates($messenger, $message_types, $GRP_ID = 0, $global = false) { //if no $message_types are given then that's okay... this may be a messenger that just adds shortcodes, so we just don't generate any templates. if (empty($message_types)) { return true; } return EEH_MSG_Template::generate_new_templates($messenger, $message_types, $GRP_ID, $global); }
/** * generate_default_message_templates * * @access public * @static * @return void */ public static function generate_default_message_templates() { $templates = FALSE; $settings = $installed_messengers = array(); //include our helper EE_Registry::instance()->load_helper('MSG_Template'); //let's first setup an array of what we consider to be the default messengers. $default_messengers = array('email'); //let's determine if we've already got an active messengers option $active_messengers = EEH_MSG_Template::get_active_messengers_in_db(); //do an initial loop to determine if we need to continue $def_ms = array(); foreach ($default_messengers as $msgr) { if (isset($active_messengers[$msgr])) { continue; } $def_ms[] = $msgr; } //continue? if (empty($def_ms)) { return false; } //get all installed messenger objects $installed = EEH_MSG_Template::get_installed_message_objects(); $inst_msgrs = $installed['messengers']; $inst_mts = $installed['message_types']; //let's setup the $installed messengers in an array foreach ($inst_msgrs as $msgr) { $installed_messengers[$msgr->name] = $msgr; } //setup the $installed_mts in an array foreach ($inst_mts as $imt) { $installed_mts[$imt->name] = $imt; } //loop through default array foreach ($def_ms as $messenger) { //all is good so let's setup the default stuff. We need to use the given messenger object (if exists) to get the default message type for the messenger. if (!isset($installed_messengers[$messenger])) { continue; } $default_mts = $installed_messengers[$messenger]->get_default_message_types(); $active_messengers[$messenger]['obj'] = $installed_messengers[$messenger]; foreach ($default_mts as $mt) { //we need to setup any initial settings for message types $settings_fields = $installed_mts[$mt]->get_admin_settings_fields(); if (!empty($settings_fields)) { foreach ($settings_fields as $field => $values) { $settings[$field] = $values['default']; } } else { $settings = array(); } $active_messengers[$messenger]['settings'][$messenger . '-message_types'][$mt]['settings'] = $settings; } //setup any initial settings for the messenger $msgr_settings = $installed_messengers[$messenger]->get_admin_settings_fields(); if (!empty($msgr_settings)) { foreach ($msgr_settings as $field => $value) { $active_messengers[$messenger]['settings'][$field] = $value; } } //now let's save the settings for this messenger! EEH_MSG_Template::update_active_messengers_in_db($active_messengers); //let's generate all the templates $templates = EEH_MSG_Template::generate_new_templates($messenger, $default_mts, '', TRUE); } //that's it! //maybe we'll return $templates for possible display of error or help message later? return $templates; }
/** * Activates the specified messenger. * * @param string $messenger_name * @param array $message_type_names An array of message type names to activate with this messenger. * If included we do NOT setup the default message types * (assuming they are already setup.) * @param bool $update_active_messengers_option * * @return array of generated templates * @throws \EE_Error */ public function activate_messenger($messenger_name, $message_type_names = array(), $update_active_messengers_option = true) { $templates = array(); // grab the messenger to work with. $messenger = $this->messenger_collection()->get_by_info($messenger_name); // it's inactive. Activate it. if ($messenger instanceof EE_messenger) { $this->_active_messengers[$messenger->name] = $messenger; //activate incoming message types set to be activated with messenger. $message_type_names = $this->_activate_message_types($messenger, $message_type_names); // setup any initial settings for the messenger if necessary. $this->add_settings_for_messenger($messenger->name); if ($update_active_messengers_option) { $this->update_active_messengers_option(); $this->update_has_activated_messengers_option(); } //generate new templates if necessary and ensure all related templates that are already in the database are //marked active. Note, this will also deactivate a message type for a messenger if the template //cannot be successfully created during its attempt (only happens for global template attempts). if (!empty($message_type_names)) { $templates = EEH_MSG_Template::generate_new_templates($messenger->name, $message_type_names, 0, true); EEH_MSG_Template::update_to_active(array($messenger->name), $message_type_names); } } return $templates; }