I’m trying to figure out why when a userID AND/OR the registrationKey is not put into the URL it doesn’t show the 404 error page. What’s supposed to happen is when the activate controller is loaded its supposed to see if the userID and registrationKey are in the URL or not and if not go to the error page.
URL: siteurl.com/cms/activate/1/d87f0d8a7f0a8
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Activate extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('users/usersmodel');
}
public function index($userID = NULL, $registrationKey = NULL)
{
//Config Defaults Start
$msgBoxMsgs = array();//msgType = dl, info, warn, note, msg
$cssPageAddons = '';//If you have extra CSS for this view append it here
$jsPageAddons = '';//If you have extra JS for this view append it here
$metaAddons = '';//Sometimes there is a need for additional Meta Data such in the case of Facebook addon's
$siteTitle = '';//alter only if you need something other than the default for this view.
//Config Defaults Start
//examples of how to use the message box system (css not included).
//$msgBoxMsgs[] = array('msgType' => 'dl', 'theMsg' => 'This is a Blank Message Box...');
/**********************************************************Your Coding Logic Here, Start*/
if( !is_numeric($userID) || !preg_match('/^[A-Za-z0-9]+$/', $registrationKey) )
{
show_404();
}
else
{
$registrationDetails = $this->usersmodel->getRegistrationDetails($userID);
if (!is_null($registrationDetails))
{
$regKeyDate = $registrationDetails->registrationKeyDate;
if ($this->usersmodel->activateUser($userID, $registrationKey))
{
$message = 'User was activated successfully! You may now login!';
}
else
{
$message = 'User was not activated successfully! Please try again with the right credentials!';
}
}
else
{
$message = 'Two or more days have passed since you registered! You will need to register again!';
}
$bodyContent = $this->config->item('defaultTemplate') ."/usermanagement/forms/activate";//which view file
}
$this->data['message'] = $message;
$bodyType = "full";//type of template
/***********************************************************Your Coding Logic Here, End*/
//Double checks if any default variables have been changed, Start.
//If msgBoxMsgs array has anything in it, if so displays it in view, else does nothing.
if(count($msgBoxMsgs) !== 0)
{
$msgBoxes = $this->msgboxes->buildMsgBoxesOutput(array('display' => 'show', 'msgs' =>$msgBoxMsgs));
}
else
{
$msgBoxes = array('display' => 'none');
}
if($siteTitle == '')
{
$siteTitle = $this->metatags->SiteTitle(); //reads
}
//Double checks if any default variables have been changed, End.
$this->data['msgBoxes'] = $msgBoxes;
$this->data['cssPageAddons'] = $cssPageAddons;//if there is any additional CSS to add from above Variable this will send it to the view.
$this->data['jsPageAddons'] = $jsPageAddons;//if there is any addictional JS to add from the above variable this will send it to the view.
$this->data['siteTitle'] = $siteTitle;//defaults can be changed via models/metatags.php
$this->data['bodyType'] = $bodyType;
$this->data['bodyContent'] = $bodyContent;
$this->load->view($this->config->item('defaultTemplate') .'/usermanagement/index', $this->data);
}
}
/* End of file activate.php */
/* Location: ./application/controllers/activate.php */
Any ideas?
I think the code looks fine but you may have to do some trouble shooting on you’re own. If you don’t pass the parameters via your URI and the show_404() function is not being called then you need to see what those variables contain. Since either userID is not numeric OR registrationKey has more than just alphanumeric. If you
var_dumpthem before the statement, and don’t pass the parameters in you’re URI, what happens?