Jump to content


Photo

Page Cannot be found? *MODIFIED*


  • Please log in to reply
No replies to this topic

#1 scottybwoy

scottybwoy
  • Members
  • PipPipPip
  • Advanced Member
  • 532 posts
  • LocationUK

Posted 30 August 2006 - 01:40 PM

I'm using OOP with php 5.1.4 and keep running into page cannot be found error.
The trouble is I'm not sure which page either.  I had a login page which is bypassed as a session is created so I'll skip that.  Then the user should be passed back to home.php as follows :
<?php
   class IntranetUserHomeApp extends PHPApplication {

   function run()
      {
          
          if (! $this->authorize($this->getSessionField('SESSION_USERNAME')))
          {
             $this->alert('UNAUTHORIZED_ACCESS');
          }

          $this->uid = $this->getUID();

          // At this point user is authorized
          $this->displayHome();
     }

      function authorize()
      {
          return TRUE;
      }

      function displayHome()
      {
          global $HOME_MNGR;
          global $HOME_TEMPLATE;
          global $INTRANET_DIR;
          global $REL_TEMPLATE_DIR;

          $Template = Template($HOME_TEMPLATE_DIR);
          
          $photoFile = sprintf("%s/photo%003d.jpg",$PHOTO_DIR, $this->getUID());
          $photo = file_exists($photoFile) ? sprintf("%s/photo%003d.jpg",$REL_PHOTO_DIR,$this->getUID()) : sprintf("%s/%s",$REL_PHOTO_DIR,$DEFAULT_PHOTO);

          $themeTemplate->set_var('TEMPLATE_DIR', $REL_TEMPLATE_DIR);

          $themeTemplate->set_var('LEFT_NAVIGATION', $this->themeObj->getLeftNavigation($THEME_TEMPLATE_DIR . '/' . dirname($THEME_TEMPLATE[$this->theme])));

          $template = new Template($this->getTemplateDir());
          $template->set_file('fh1', $HOME_TEMPLATE);
          $template->set_block('fh1', 'mainBlock', 'mblock');
	  $template->set_block('mainBlock', 'navigation', 'mblock');

          $now = time();

          $template->set_var(array(
                                   'NAME'         => $this->getName(),
                                   'CURRENT_DATE' => date('l M d Y', $now),
                                   'HOME_MNGR'    => $HOME_MNGR
                                   )
                            );
          
          global $LD_CATEGORY_NAV_DIR, $LD_CATEGORY_NAV_OUTFILE;
          
          $fp = fopen($LD_CATEGORY_NAV_DIR.'/'.$LD_CATEGORY_NAV_OUTFILE, "rb");
          $contents = fread ($fp, filesize ($LD_CATEGORY_NAV_DIR.'/'.$LD_CATEGORY_NAV_OUTFILE));
          
          $template->set_var('LD_NAV', $contents);

          global $USER_DB_URL;
          $user_dbi = new DBI($USER_DB_URL);

          $thisUser = new IntranetUser($this->dbi, $this->uid);

          $pref = $thisUser->getPreferences($this->uid);

          session_register('SESSION_AUTO_TIP_SHOWN');

          if (!empty($pref['autotip']) && !($this->getSessionField('SESSION_AUTO_TIP_SHOWN')))
          {
          	 $this->debug("Show tip window");
          	 $_SESSION["SESSION_AUTO_TIP_SHOWN"] = 1;
          	 $template->set_var('JS_TIP_SCRIPT', $this->popAutoTip());
          } else {
          	 $template->set_var('JS_TIP_SCRIPT', null);
          }

          $themeTemplate->set_var('SERVER_NAME', $this->get_server());
          $themeTemplate->set_var('BASE_HREF', $REL_TEMPLATE_DIR);
          $template->set_var('USER_NAME', ucfirst($thisUser->getName()));

          $themeTemplate->set_var('CONTENT_BLOCK', $template->parse('mblock', 'mainBlock'));
          $themeTemplate->parse('cnblock', 'contentBlock');
          $themeTemplate->parse('mmblock', 'mmainBlock');
          $themeTemplate->pparse('output', 'fh');

      }
      
      function unhtmlentities($string)
      {
	$trans_tbl = get_html_translation_table (HTML_ENTITIES);
	$trans_tbl = array_flip ($trans_tbl);
	return strtr ($string, $trans_tbl);
      }
}
?>
The functions used in DisplayHome() are set in this file called templates.inc :
<?php

class Template {
  var $classname = "Template";

  /* if set, echo assignments */
  var $debug     = false;

  /* $file[handle] = "filename"; */
  var $file  = array();

  /* relative filenames are relative to this pathname */
  var $root   = "/templates";

  /* $varkeys[key] = "key"; $varvals[key] = "value"; */
  var $varkeys = array();
  var $varvals = array();

  /* "remove"  => remove undefined variables
   * "comment" => replace undefined variables with comments
   * "keep"    => keep undefined variables
   */
  var $unknowns = "comment";
  
  /* "yes" => halt, "report" => report error, continue, "no" => ignore error quietly */
  var $halt_on_error  = "yes";
  
  /* last error message is retained here */
  var $last_error     = "";


  /***************************************************************************/
  /* public: Constructor.
   * root:     template directory.
   * unknowns: how to handle unknown variables.
   */
  function Template($root = "/templates", $unknowns = "comment") {
    $this->set_root($root);
    $this->set_unknowns($unknowns);
  }

  /* public: setroot(pathname $root)
   * root:   new template directory.
   */  
  function set_root($root) {
    if (!is_dir($root)) {
      $this->halt("set_root: $root is not a directory.");
      return false;
    }
    
    $this->root = $root;
    return true;
  }

  /* public: set_unknowns(enum $unknowns)
   * unknowns: "remove", "comment", "keep"
   *
   */
  function set_unknowns($unknowns = "keep") {
    $this->unknowns = $unknowns;
  }

  /* public: set_file(array $filelist)
   * filelist: array of handle, filename pairs.
   *
   * public: set_file(string $handle, string $filename)
   * handle: handle for a filename,
   * filename: name of template file
   */
  function set_file($handle, $filename = "") {
    if (!is_array($handle)) {
      if ($filename == "") {
        $this->halt("set_file: For handle $handle filename is empty.");
        return false;
      }
      $this->file[$handle] = $this->filename($filename);
    } else {
      reset($handle);
      while(list($h, $f) = each($handle)) {
        $this->file[$h] = $this->filename($f);
      }
    }
  }

  /* public: set_block(string $parent, string $handle, string $name = "")
   * extract the template $handle from $parent, 
   * place variable {$name} instead.
   */
  function set_block($parent, $handle, $name = "") {
    if (!$this->loadfile($parent)) {
      $this->halt("subst: unable to load $parent.");
      return false;
    }
    if ($name == "")
      $name = $handle;

    $str = $this->get_var($parent);
    $reg = "/<!--\s+BEGIN $handle\s+-->(.*)\n\s*<!--\s+END $handle\s+-->/sm";
    preg_match_all($reg, $str, $m);
    $str = preg_replace($reg, "{" . "$name}", $str);
    $this->set_var($handle, $m[1][0]);
    $this->set_var($parent, $str);
  }
  
  /* public: set_var(array $values)
   * values: array of variable name, value pairs.
   *
   * public: set_var(string $varname, string $value)
   * varname: name of a variable that is to be defined
   * value:   value of that variable
   */
  function set_var($varname, $value = "") {
    if (!is_array($varname)) {
      if (!empty($varname))
        if ($this->debug) print "scalar: set *$varname* to *$value*<br>\n";
        $this->varkeys[$varname] = "/".$this->varname($varname)."/";
        $this->varvals[$varname] = $value;
    } else {
      reset($varname);
      while(list($k, $v) = each($varname)) {
        if (!empty($k))
          if ($this->debug) print "array: set *$k* to *$v*<br>\n";
          $this->varkeys[$k] = "/".$this->varname($k)."/";
          $this->varvals[$k] = $v;
      }
    }
  }

  /* public: subst(string $handle)
   * handle: handle of template where variables are to be substituted.
   */
  function subst($handle) {
    if (!$this->loadfile($handle)) {
      $this->halt("subst: unable to load $handle.");
      return false;
    }

    $str = $this->get_var($handle);
    $str = @preg_replace($this->varkeys, $this->varvals, $str);
    return $str;
  }
  
  /* public: psubst(string $handle)
   * handle: handle of template where variables are to be substituted.
   */
  function psubst($handle) {
    print $this->subst($handle);
    
    return false;
  }

  /* public: parse(string $target, string $handle, boolean append)
   * public: parse(string $target, array  $handle, boolean append)
   * target: handle of variable to generate
   * handle: handle of template to substitute
   * append: append to target handle
   */
  function parse($target, $handle, $append = false) {
    if (!is_array($handle)) {
      $str = $this->subst($handle);
      if ($append) {
        $this->set_var($target, $this->get_var($target) . $str);
      } else {
        $this->set_var($target, $str);
      }
    } else {
      reset($handle);
      while(list($i, $h) = each($handle)) {
        $str = $this->subst($h);
        $this->set_var($target, $str);
      }
    }
    
    return $str;
  }
  
  function pparse($target, $handle, $append = false) {
    print $this->parse($target, $handle, $append);
    return false;
  }
  
  /* public: get_vars()
   */
  function get_vars() {
    reset($this->varkeys);
    while(list($k, $v) = each($this->varkeys)) {
      $result[$k] = $this->varvals[$k];
    }
    
    return $result;
  }
  
  /* public: get_var(string varname)
   * varname: name of variable.
   *
   * public: get_var(array varname)
   * varname: array of variable names
   */
  function get_var($varname) {
    if (!is_array($varname)) {
      return $this->varvals[$varname];
    } else {
      reset($varname);
      while(list($k, $v) = each($varname)) {
        $result[$k] = $this->varvals[$k];
      }
      
      return $result;
    }
  }
  
  /* public: get_undefined($handle)
   * handle: handle of a template.
   */
  function get_undefined($handle) {
    if (!$this->loadfile($handle)) {
      $this->halt("get_undefined: unable to load $handle.");
      return false;
    }
    
    preg_match_all("/\{([^}]+)\}/", $this->get_var($handle), $m);
    $m = $m[1];
    if (!is_array($m))
      return false;

    reset($m);
    while(list($k, $v) = each($m)) {
      if (!isset($this->varkeys[$v]))
        $result[$v] = $v;
    }
    
    if (count($result))
      return $result;
    else
      return false;
  }

  /* public: finish(string $str)
   * str: string to finish.
   */
  function finish($str) {
    switch ($this->unknowns) {
      case "keep":
      break;
      
      case "remove":
        $str = preg_replace('/{[^ \t\r\n}]+}/', "", $str);
      break;

      case "comment":
        $str = preg_replace('/{([^ \t\r\n}]+)}/', "<!-- Template $handle: Variable \\1 undefined -->", $str);
      break;
    }
    
    return $str;
  }

  /* public: p(string $varname)
   * varname: name of variable to print.
   */
  function p($varname) {
    print $this->finish($this->get_var($varname));
  }

  function get($varname) {
    return $this->finish($this->get_var($varname));
  }
    
  /***************************************************************************/
  /* private: filename($filename)
   * filename: name to be completed.
   */
  function filename($filename) {
    if (substr($filename, 0, 1) != "/") {
      $filename = $this->root."/".$filename;
    }
    
    if (!file_exists($filename))
      $this->halt("filename: file $filename does not exist.");

    return $filename;
  }
  
  /* private: varname($varname)
   * varname: name of a replacement variable to be protected.
   */
  function varname($varname) {
    return preg_quote("{".$varname."}");
  }

  /* private: loadfile(string $handle)
   * handle:  load file defined by handle, if it is not loaded yet.
   */
  function loadfile($handle) {
    if (isset($this->varkeys[$handle]) and !empty($this->varvals[$handle]))
      return true;

    if (!isset($this->file[$handle])) {
      $this->halt("loadfile: $handle is not a valid handle.");
      return false;
    }
    $filename = $this->file[$handle];

    $str = implode("", @file($filename));
    if (empty($str)) {
      $this->halt("loadfile: While loading $handle, $filename does not exist or is empty.");
      return false;
    }

    $this->set_var($handle, $str);
    
    return true;
  }

  /***************************************************************************/
  /* public: halt(string $msg)
   * msg:    error message to show.
   */
  function halt($msg) {
    $this->last_error = $msg;
    
    if ($this->halt_on_error != "no")
      $this->haltmsg($msg);
    
    if ($this->halt_on_error == "yes")
      die("<b>Halted.</b>");
    
    return false;
  }
  
  /* public, override: haltmsg($msg)
   * msg: error message to show.
   */
  function haltmsg($msg) {
    printf("<b>Template Error:</b> %s<br>\n", $msg);
  }
}
?>
All my templates are in one folder called templates ;) and the constants are defined in this file here called constants.php :
<?php

   $APPLICATION_CLASS 		= 'class.PHPApplication.php';
   $ERROR_HANDLER_CLASS 	= 'class.ErrorHandler.php';
   $AUTHENTICATION_CLASS 	= 'class.Authentication.php';
//   $DBI_CLASS			= 'class.DBI.php';
   $DEBUGGER_CLASS		= 'class.Debugger.php';
   $USER_CLASS		        = 'class.User.php';
   $THEME_CLASS                 = 'class.Theme.php';
   $THEME_TEMPLATE_CLASS        = 'class.ThemeTemplate.php';
   $ACL_CLASS                   = 'class.ACL.php';

   $TEMPLATE_CLASS		= 'template.inc';
   $TRUE 	                = 1;
   $FALSE	                = 0;
   $ON		                = 1;
   $OFF		                = 0;
   $SUCCESS	                = 1;
   $WWW_NEWLINE                 = '<BR>';
   $NEWLINE = "\r\n";

   $TABLE_DOES_NOT_EXIST  = 1;
   $TABLE_UNKNOWN_ERROR  = 666;

   define('LOGIN', 1);
   define('LOGOUT', 2);

?>
and my include path is as follows from config.inc.php :
<?php

   $ROOT_PATH     = $_SERVER['DOCUMENT_ROOT'];
   $INTRANET_DIR = $ROOT_PATH . '/database';
   $SCRIPTS = $INTRANET_DIR . '/scripts';
   $CLASSES = $INTRANET_DIR . '/classes';
   $FORGOTTEN_PASSWORD_APP = $SCRIPTS . '/user_mngr/forgotten_pwd.php';
   $PHPLIB_DIR   = $INTRANET_DIR . '/library/php';

   $PATH         = $PEAR_DIR . ';' . $PHPLIB_DIR . ';' . $CLASSES;
   ini_set( 'include_path', ';' . $PATH . ';' . ini_get('include_path'));

   $TEMPLATE_DIR	= $INTRANET_DIR . '/templates';
   $THEME_TEMPLATE_DIR = $INTRANET_DIR . '/templates/themes';
?>
Before it was showing the login.html under url of /database/scripts/home/home.php Which is what it should be doing, however now it should just display home.html and bypass the login and redirect to home after creating the session.  I know that it has created the session as I can check in the database so I don't know now where it is failing.  Can anyboby see where this is happening?

Sorry it's a bit of a long one.




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users