00001 <?php
00002 define ('HISTORY_NUMBER_OF_ITEMS', 2);
00003
00004
00005
00006
00007
00008
00009
00010 class History {
00011 public static function clear() {
00012 Session::push('history', false);
00013 }
00014
00015
00016
00017
00018 public static function push($url) {
00019 if (Session::is_started()) {
00020 $arr = Session::peek('history');
00021 if (!is_array($arr)) {
00022 $arr = array();
00023 }
00024 array_unshift($arr, $url);
00025 if (count($arr) > HISTORY_NUMBER_OF_ITEMS) {
00026 array_pop($arr);
00027 }
00028 Session::push('history', $arr);
00029 }
00030 }
00031
00032
00033
00034
00035
00036
00037 public static function remove($url) {
00038 if (empty($url)) {
00039 return;
00040 }
00041 if (Session::is_started()) {
00042 $arr = Session::peek('history');
00043 $new = array();
00044 if (is_array($arr) && count($arr) > 0) {
00045 if (!$url instanceof Url) {
00046 $url = Url::create($url);
00047 }
00048 $compare = $url->build();
00049 while($cur = array_shift($arr)) {
00050 if (!$cur instanceof Url) {
00051 $cur = Url::create($cur);
00052 }
00053 if ($cur->build() !== $compare) {
00054 $new[] = $cur;
00055 }
00056 }
00057 }
00058 Session::push('history', $new);
00059 }
00060 }
00061
00062
00063
00064
00065
00066
00067
00068
00069 public static function get($index, $defaultpage = false) {
00070 $val = ($defaultpage === false) ? Config::get_url(Config::URL_DEFAULT_PAGE) : $defaultpage;;
00071 if (Session::is_started()) {
00072 $index = Cast::int($index);
00073 $arr = Session::peek('history');
00074
00075 if ( is_array($arr) && ($index >= 0) && (count($arr) > $index) ) {
00076 $val = $arr[$index];
00077 }
00078 }
00079 return self::make_url($val);
00080 }
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091 public static function go_to($index, $message = '', $defaultpage = false) {
00092 $url = self::get($index, $defaultpage);
00093 if ($message instanceof Status) {
00094 $message->persist();
00095 }
00096 else if (!empty($message)) {
00097 $msg = new Message($message);
00098 $msg->persist();
00099 }
00100 $url->redirect();
00101 exit;
00102 }
00103
00104
00105
00106
00107
00108
00109 private static function make_url($val) {
00110 if ($val instanceof Url) {
00111 return $val;
00112 }
00113 else if (is_string($val) && !empty($val)) {
00114 return Url::create($val);
00115 }
00116 else {
00117 return Url::current();
00118 }
00119 }
00120 }
00121 ?>