/** * This tests the generate_default_message_templates method with using the * FHEE__EE_messenger__get_default_message_types__default_types filter to add a * bogus message_type string. No errors should be triggered, and the invalid default mt * should NOT be added to the active array for the messenger. * * @since 4.6 * @group 7595 */ public function test_filtered_default_message_types_on_activation() { EE_Registry::instance()->load_helper('MSG_Template'); EE_Registry::instance()->load_helper('Activation'); //let's clear out all active messengers to get an accurate test of initial generation of message templates. global $wpdb; $mtpg_table = $wpdb->prefix . 'esp_message_template_group'; $mtp_table = $wpdb->prefix . 'esp_message_template'; $evt_mtp_table = $wpdb->prefix . 'esp_event_message_template'; $query = "DELETE FROM {$mtpg_table} WHERE 'GRP_ID' > 0"; $wpdb->query($query); $query = "DELETE FROM {$mtp_table} WHERE 'MTP_ID' > 0"; $wpdb->query($query); $query = "DELETE FROM {$evt_mtp_table} WHERE 'EMT_ID' > 0"; $wpdb->query($query); EEH_MSG_Template::update_active_messengers_in_db(array()); //set a filter for the invalid message type add_filter('FHEE__EE_messenger__get_default_message_types__default_types', function ($default_types, $messenger) { $default_types[] = 'bogus_message_type'; return $default_types; }, 10, 2); //activate messages... if there's any problems then errors will trigger a fail. EEH_Activation::generate_default_message_templates(); //all went well so let's make sure the activated system does NOT have our invalid message type string. $active_messengers = EEH_MSG_Template::get_active_messengers_in_db(); foreach ($active_messengers as $messenger => $settings) { $this->assertFalse(isset($settings['settings'][$messenger . '-message_types']['bogus_message_type']), sprintf('The %s messenger should not have "bogus_message_type" active on it but it does.', $messenger)); } }
/** * tests to make sure forcing a messenger to be active works. * * @since 4.5.0 */ public function test_ensure_messenger_is_active() { EE_Registry::instance()->load_lib('messages'); EE_Registry::instance()->load_helper('Activation'); $msg = new EE_messages(); $this->assertInstanceOf('EE_messages', $msg); //make sure html messenger is setup (should be by default) $active_messengers = EEH_MSG_Template::get_active_messengers_in_db(); $this->assertTrue(isset($active_messengers['html']), sprintf('The messenger %s should be active on fresh install, but it is not.', 'html')); //let's UNSET the html messenger from active messengers and update the db unset($active_messengers['html']); EEH_MSG_Template::update_active_messengers_in_db($active_messengers); //now let's FORCE reactivation. $response = $msg->ensure_messenger_is_active('html'); $this->assertFalse($response); //that means it was previously inactive which it should be. //verify html messenger IS actually active now. $active_messengers = EEH_MSG_Template::get_active_messengers_in_db(); $this->assertTrue(isset($active_messengers['html']), 'The html messenger should have been forced to be active again but it is not.'); //now verify that trying to ensure is active verifies it's already active $response = $msg->ensure_messenger_is_active('html'); $this->assertTrue($response); }
/** * This simply validates active messengers and message types to ensure they actually match installed messengers and message types. If there's a mismatch then we deactivate the messenger/message type and ensure all related db rows are set inactive. * * @since 4.3.1 * * @return void */ public static function validate_messages_system() { //include our helper EE_Registry::instance()->load_helper('MSG_Template'); //get active and installed messengers/message types. $active_messengers = EEH_MSG_Template::get_active_messengers_in_db(); $installed = EEH_MSG_Template::get_installed_message_objects(); $installed_messengers = $installed_mts = array(); //set up the arrays so they can be handled easier. foreach ($installed['messengers'] as $im) { if ($im instanceof EE_messenger) { $installed_messengers[$im->name] = $im; } } foreach ($installed['message_types'] as $imt) { if ($imt instanceof EE_message_type) { $installed_mts[$imt->name] = $imt; } } //now let's loop through the active array and validate foreach ($active_messengers as $messenger => $active_details) { //first let's see if this messenger is installed. if (!isset($installed_messengers[$messenger])) { //not set so let's just remove from actives and make sure templates are inactive. unset($active_messengers[$messenger]); EEH_MSG_Template::update_to_inactive($messenger); continue; } //messenger is active, so let's just make sure that any active message types not installed are deactivated. $mts = !empty($active_details['settings'][$messenger . '-message_types']) ? $active_details['settings'][$messenger . '-message_types'] : array(); foreach ($mts as $mt_name => $mt) { if (!isset($installed_mts[$mt_name])) { unset($active_messengers[$messenger]['settings'][$messenger . '-message_types'][$mt_name]); EEH_MSG_Template::update_to_inactive($messenger, $mt_name); } } } //all done! let's update the active_messengers. EEH_MSG_Template::update_active_messengers_in_db($active_messengers); do_action('AHEE__EEH_Activation__validate_messages_system'); return; }
/** * All this does is set the existing test settings (in the db) for the messenger * * @access public * @return bool success/fail */ public function set_existing_test_settings($settings) { $existing = EEH_MSG_Template::get_active_messengers_in_db(); $existing[$this->name]['test_settings'] = $settings; return EEH_MSG_Template::update_active_messengers_in_db($existing); }
/** * unsets the active if we can't find the file (failsafe) * * @access private * @param string $active_name name of messenger or message type * @param string $kind messenger or message_type? * @return void */ private function _unset_active($active_name, $kind) { //pluralize $active_messengers = EEH_MSG_Template::get_active_messengers_in_db(); EE_Registry::instance()->load_helper('MSG_Template'); if ($kind == 'messenger') { unset($active_messengers[$active_name]); EEH_MSG_Template::update_to_inactive($active_name); if (isset($this->_active_messengers[$active_name])) { unset($this->_active_messengers[$active_name]); } } else { foreach ($active_messengers as $messenger => $settings) { if (!empty($settings['settings'][$messenger . '-message_types'][$active_name])) { unset($active_messengers[$messenger]['settings'][$messenger . '-message_types'][$active_name]); } } EEH_MSG_Template::update_to_inactive('', $active_name); if (isset($this->_active_message_types[$active_name])) { unset($this->_active_message_types[$active_name]); } } EEH_MSG_Template::update_active_messengers_in_db($active_messengers); }
/** * this handles saving the settings for a messenger or message type * @return json success or fail message */ public function save_settings() { if (!isset($this->_req_data['type'])) { EE_Error::add_error(__('Cannot save settings because type is unknown (messenger settings or messsage type settings?)', 'event_espresso'), __FILE__, __FUNCTION__, __LINE__); $this->_template_args['error'] = TRUE; $this->_return_json(); } if ($this->_req_data['type'] == 'messenger') { $settings = $this->_req_data['messenger_settings']; //this should be an array. $messenger = $settings['messenger']; //let's setup the settings data foreach ($settings as $key => $value) { switch ($key) { case 'messenger': unset($settings['messenger']); break; case 'message_types': if (isset($this->_active_messengers[$messenger]['settings'][$messenger . '-message_types'])) { foreach ($this->_active_messengers[$messenger]['settings'][$messenger . '-message_types'] as $mt => $v) { if (isset($settings['message_types'][$mt])) { $settings[$messenger . '-message_types'][$mt]['settings'] = isset($this->_active_messengers[$messenger]['settings'][$messenger . '-message_types'][$mt]) ? $this->_active_messengers[$messenger]['settings'][$messenger . '-message_types'][$mt] : array(); } } } else { foreach ($value as $mt => $v) { //let's see if this message type is already present and has settings. $settings[$messenger . '-message_types'][$mt]['settings'] = array(); } } //k settings are set let's get rid of the message types index unset($settings['message_types']); break; default: $settings[$key] = $value; break; } } $this->_active_messengers[$messenger]['settings'] = $settings; } else { if ($this->_req_data['type'] == 'message_type') { $settings = $this->_req_data['message_type_settings']; $messenger = $settings['messenger']; $message_type = $settings['message_type']; foreach ($settings as $key => $value) { switch ($key) { case 'messenger': unset($settings['messenger']); break; case 'message_type': unset($settings['message_type']); break; default: $settings['settings'][$key] = $value; unset($settings[$key]); break; } } $this->_active_messengers[$messenger]['settings'][$messenger . '-message_types'][$message_type] = $settings; } } //okay we should have the data all setup. Now we just update! $success = EEH_MSG_Template::update_active_messengers_in_db($this->_active_messengers); if ($success) { EE_Error::add_success(__('Settings updated', 'event_espresso')); } else { EE_Error::add_error(__('Settings did not get updated', 'event_espresso'), __FILE__, __FUNCTION__, __LINE__); } $this->_template_args['success'] = $success; $this->_return_json(); }
/** * This deregisters a message type that was previously registered with a specific mtname. * * @since 4.3.0 * * @param string $mt_name the name for the message type that was previously registered * @return void */ public static function deregister($mt_name = NULL) { if (!empty(self::$_ee_message_type_registry[$mt_name])) { //let's make sure that we remove any place this message type was made active EE_Registry::instance()->load_helper('MSG_Template'); $active_messengers = EEH_MSG_Template::get_active_messengers_in_db(); foreach ($active_messengers as $messenger => $settings) { if (!empty($settings['settings'][$messenger . '-message_types'][$mt_name])) { unset($active_messengers[$messenger]['settings'][$messenger . '-message_types'][$mt_name]); } } EEH_MSG_Template::update_to_inactive('', $mt_name); EEH_MSG_Template::update_active_messengers_in_db($active_messengers); unset(self::$_ee_message_type_registry[$mt_name]); } }