/**
  * Used to register a new promotion scope with the EE Promotions addon.
  *
  * @since 1.0.0
  * @throws EE_Error
  *
  * @param string $promotion_id  	A unique ID for this promotion scope.
  * @param array  $config 		array {
  *                         A configuration array in the format:
  *                         @type string $scope_path	A full server path to the EE_Promotion_Scope
  *                               				child class being registered. Required.
  *                         @type array $model_extension_paths	@see EE_Register_Model_Extensions
  *                         @type array $class_extension_paths		@see EE_Register_Model_Extensions
  * }
  *
  * @return void
  */
 public static function register($promotion_id = NULL, $config = array())
 {
     //required fields must be present, so let's make sure they are.
     if (empty($promotion_id)) {
         throw new EE_Error(__('Any client code calling EE_Register_Promotion_Scope must set a unique string for the $promotion_id argument.  None was given.', 'event_espresso'));
     }
     if (!is_array($config) || empty($config['scope_path']) || empty($config['model_extension_paths']) || empty($config['class_extension_paths'])) {
         throw new EE_Error(__('In order to register a new promotion scope via EE_Register_Promotion_Scope, the caller must include an array for the configuration that contains the follow keys: "scope_path" (a string containing the full server path to the child class extending EE_Promotion_Scope), "model_extension_paths" (an array of full server paths to folders that contain model extensions), and "class_extension_paths" (an array of full server paths to folders that contain class extensions)', 'event_espresso'));
     }
     //check correct loading
     //check correct loading
     if (!did_action('AHEE__EE_System__load_espresso_addons') || did_action('AHEE__EE_Admin__loaded')) {
         EE_Error::doing_it_wrong(__METHOD__, sprintf(__('An attempt was made to register "%s" as a promotion scope has failed because it was not registered at the correct time.  Please use the "AHEE__EE_System__load_espresso_addons" hook at a priority level higher than 5, to register promotion scopes.', 'event_espresso'), $promotion_id), '1.0.0');
     }
     //set config to registry
     self::$_registry[$promotion_id] = $config;
     //add new scope path to scopes loader
     add_filter('FHEE__EE_Promotions_Config___get_scopes__scopes_to_register', array('EE_Register_Promotion_Scope', 'register_path'));
     //use EE_Register_Model_Extensions with the config.
     unset($config['scope_path']);
     EE_Register_Model_Extensions::register($promotion_id, $config);
 }
 /**
  * This deregisters an addon that was previously registered with a specific addon_name.
  *
  * @since    4.3.0
  *
  * @param string $addon_name the name for the addon that was previously registered
  * @throws EE_Error
  * @return void
  */
 public static function deregister($addon_name = NULL)
 {
     if (isset(self::$_settings[$addon_name])) {
         $class_name = self::$_settings[$addon_name]['class_name'];
         if (!empty(self::$_settings[$addon_name]['dms_paths'])) {
             // setup DMS
             EE_Register_Data_Migration_Scripts::deregister($addon_name);
         }
         if (!empty(self::$_settings[$addon_name]['admin_path'])) {
             // register admin page
             EE_Register_Admin_Page::deregister($addon_name);
         }
         if (!empty(self::$_settings[$addon_name]['module_paths'])) {
             // add to list of modules to be registered
             EE_Register_Module::deregister($addon_name);
         }
         if (!empty(self::$_settings[$addon_name]['shortcode_paths'])) {
             // add to list of shortcodes to be registered
             EE_Register_Shortcode::deregister($addon_name);
         }
         if (!empty(self::$_settings[$addon_name]['config_class'])) {
             // if config_class present let's register config.
             EE_Register_Config::deregister(self::$_settings[$addon_name]['config_class']);
         }
         if (!empty(self::$_settings[$addon_name]['widget_paths'])) {
             // add to list of widgets to be registered
             EE_Register_Widget::deregister($addon_name);
         }
         if (!empty(self::$_settings[$addon_name]['model_paths']) || !empty(self::$_settings[$addon_name]['class_paths'])) {
             // add to list of shortcodes to be registered
             EE_Register_Model::deregister($addon_name);
         }
         if (!empty(self::$_settings[$addon_name]['model_extension_paths']) || !empty(self::$_settings[$addon_name]['class_extension_paths'])) {
             // add to list of shortcodes to be registered
             EE_Register_Model_Extensions::deregister($addon_name);
         }
         if (!empty(self::$_settings[$addon_name]['message_types'])) {
             foreach (self::$_settings[$addon_name]['message_types'] as $message_type => $message_type_settings) {
                 EE_Register_Message_Type::deregister($message_type);
             }
         }
         //deregister capabilities for addon
         if (!empty(self::$_settings[$addon_name]['capabilities']) || !empty(self::$_settings[$addon_name]['capability_maps'])) {
             EE_Register_Capabilities::deregister($addon_name);
         }
         //deregister custom_post_types for addon
         if (!empty(self::$_settings[$addon_name]['custom_post_types'])) {
             EE_Register_CPT::deregister($addon_name);
         }
         remove_action('deactivate_' . EE_Registry::instance()->addons->{$class_name}->get_main_plugin_file_basename(), array(EE_Registry::instance()->addons->{$class_name}, 'deactivation'));
         remove_action('AHEE__EE_System__perform_activations_upgrades_and_migrations', array(EE_Registry::instance()->addons->{$class_name}, 'initialize_db_if_no_migrations_required'));
         unset(EE_Registry::instance()->addons->{$class_name});
         unset(self::$_settings[$addon_name]);
     }
 }
    public function setUp()
    {
        parent::setUp();
        EE_Registry::instance()->load_helper('Activation');
        //whitelist the table we're about to add
        add_filter('FHEE__EEH_Activation__create_table__short_circuit', array($this, 'dont_short_circuit_mock_table'), 25, 3);
        //add table from related DMS
        EEH_Activation::create_table('esp_mock_attendee_meta', '
			MATTM_ID int(10) unsigned NOT NULL AUTO_INCREMENT,
			ATT_ID int(10) unsigned NOT NULL,
			ATT_foobar int(10) unsigned NOT NULL,
			PRIMARY KEY  (MATTM_ID)');
        $this->assertTableExists('esp_mock_attendee_meta');
        EE_Register_Model_Extensions::deregister($this->_model_group);
    }