/**
  * 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;
 }