/**
  * Detects the request type for this addon (whether it was just activated, upgrades, a normal request, etc.)
  * Should only be called once per request
  * @return void
  */
 function detect_activation_or_upgrade()
 {
     $activation_history_for_addon = $this->get_activation_history();
     //		d($activation_history_for_addon);
     $request_type = EE_System::detect_req_type_given_activation_history($activation_history_for_addon, $this->get_activation_indicator_option_name(), $this->version());
     $this->set_req_type($request_type);
     $classname = get_class($this);
     switch ($request_type) {
         case EE_System::req_type_new_activation:
             do_action("AHEE__{$classname}__detect_activations_or_upgrades__new_activation");
             do_action("AHEE__EE_Addon__detect_activations_or_upgrades__new_activation", $this);
             $this->new_install();
             $this->update_list_of_installed_versions($activation_history_for_addon);
             break;
         case EE_System::req_type_reactivation:
             do_action("AHEE__{$classname}__detect_activations_or_upgrades__reactivation");
             do_action("AHEE__EE_Addon__detect_activations_or_upgrades__reactivation", $this);
             $this->reactivation();
             $this->update_list_of_installed_versions($activation_history_for_addon);
             break;
         case EE_System::req_type_upgrade:
             do_action("AHEE__{$classname}__detect_activations_or_upgrades__upgrade");
             do_action("AHEE__EE_Addon__detect_activations_or_upgrades__upgrade", $this);
             $this->upgrade();
             $this->update_list_of_installed_versions($activation_history_for_addon);
             break;
         case EE_System::req_type_downgrade:
             do_action("AHEE__{$classname}__detect_activations_or_upgrades__downgrade");
             do_action("AHEE__EE_Addon__detect_activations_or_upgrades__downgrade", $this);
             $this->downgrade();
             $this->update_list_of_installed_versions($activation_history_for_addon);
             break;
         case EE_System::req_type_normal:
         default:
             //				$this->_maybe_redirect_to_ee_about();
             break;
     }
     do_action("AHEE__{$classname}__detect_if_activation_or_upgrade__complete");
 }
 /**
  *
  */
 function test_detect_req_type_given_activation_history__on_activation()
 {
     $activation_history = array();
     update_option('test_activation_indicator_option', TRUE);
     //detect brand new activation
     $this->assertEquals(EE_System::req_type_new_activation, EE_System::detect_req_type_given_activation_history($activation_history, 'test_activation_indicator_option', '1.0.0.dev.000'));
     $activation_history['1.0.0.dev.000'] = array(date('Y-m-d H:i:s'));
     update_option('test_activation_indicator_option', TRUE);
     //detect upgrade to NEW version
     $this->assertEquals(EE_System::req_type_upgrade, EE_System::detect_req_type_given_activation_history($activation_history, 'test_activation_indicator_option', '1.2.0.dev.000'));
     $activation_history['1.2.0.dev.000'] = array(date('Y-m-d H:i:s', time() + 1));
     update_option('test_activation_indicator_option', TRUE);
     //detect reactivation request; WOULD be a normal request if the activation indicator weren't set
     $this->assertEquals(EE_System::req_type_reactivation, EE_System::detect_req_type_given_activation_history($activation_history, 'test_activation_indicator_option', '1.2.0.dev.000'));
     //detect downgrade to NEW version
     $this->assertEquals(EE_System::req_type_downgrade, EE_System::detect_req_type_given_activation_history($activation_history, 'test_activation_indicator_option', '1.1.0.dev.000'));
     $activation_history['1.1.0.dev.000'] = array(date('Y-m-d H:i:s', time() + 2));
     update_option('test_activation_indicator_option', TRUE);
     //detect downgrade to KNOWN version
     $this->assertEquals(EE_System::req_type_downgrade, EE_System::detect_req_type_given_activation_history($activation_history, 'test_activation_indicator_option', '1.0.0.dev.000'));
     $activation_history['1.0.0.dev.000'][] = date('Y-m-d H:i:s', time() + 3);
     update_option('test_activation_indicator_option', TRUE);
     //detect upgrade to KNOWN version
     $this->assertEquals(EE_System::req_type_upgrade, EE_System::detect_req_type_given_activation_history($activation_history, 'test_activation_indicator_option', '1.1.0.dev.000'));
     $activation_history['1.1.0.dev.000'][] = date('Y-m-d H:i:s', time() + 4);
     update_option('test_activation_indicator_option', TRUE);
 }