00001 <?php
00002
00003
00004
00005
00006
00007
00008 class TracedArray {
00009 private $arr = array();
00010 private $trace = array();
00011
00012
00013
00014
00015
00016
00017 public function __construct($arr) {
00018 $this->arr = (array)$arr;
00019 }
00020
00021
00022
00023
00024
00025
00026
00027
00028 public function get_item($key, $default_value = '') {
00029 $this->trace[$key] = true;
00030 return Arr::get_item($this->arr, $key, $default_value);
00031 }
00032
00033
00034
00035
00036
00037
00038 public function count() {
00039 return count($this->arr);
00040 }
00041
00042
00043
00044
00045
00046
00047 public function get_array() {
00048 return $this->arr;
00049 }
00050
00051
00052
00053
00054
00055
00056
00057 public function contains($key) {
00058 return array_key_exists($key, $this->arr);
00059 }
00060
00061
00062
00063
00064
00065
00066 public function has_unused() {
00067 foreach($this->arr as $key => $value) {
00068 if (!array_key_exists($key, $this->trace)) {
00069 return true;
00070 }
00071 }
00072 return false;
00073 }
00074
00075
00076
00077
00078 public function mark_all_as_used() {
00079 foreach($this->arr as $key => $value) {
00080 $this->get_item($key);
00081 }
00082
00083 }
00084
00085
00086
00087
00088
00089
00090 public function redirect_unused($permanent = false) {
00091 $url = Url::current()->clear_query();
00092 foreach($this->arr as $key => $value) {
00093 if (!array_key_exists($key, $this->trace)) {
00094 $url->replace_query_parameter($key, $value);
00095 }
00096 }
00097 $url->redirect($permanent ? Url::PERMANENT : Url::TEMPORARY);
00098 exit();
00099 }
00100
00101
00102
00103
00104
00105
00106 public function redirect_used($permanent = false) {
00107 $url = Url::current()->clear_query();
00108 foreach($this->arr as $key => $value) {
00109 if (array_key_exists($key, $this->trace)) {
00110 $url->replace_query_parameter($key, $value);
00111 }
00112 }
00113 $url->redirect($permanent ? Url::PERMANENT : Url::TEMPORARY);
00114 exit();
00115 }
00116 }