Unexpected Error : helpers array is empty!! *Notice* (8) <http://localhost/jqgrid/grids/jqgrid1>: Undefined variable: _SESSION [*ROOT\plugins\jq_plugins_bridge\Controller\Component\JqGridComponent.php*, line *66*]
*Notice* (8) <http://localhost/jqgrid/grids/jqgrid1>: Undefined variable: _SESSION [*ROOT\plugins\jq_plugins_bridge\Controller\Component\JqGridComponent.php*, line *67*] jqplugins_jqgrid_AddressJqGrid ERROR : Requested Model cannot be loaded. [Address] <?php require_once '/../../Bases/jq_grid_base.php'; require_once '/../../util.php'; App::uses('ClassRegistry','Utility'); App::uses('Address','Model'); class JqGridComponent extends JqGridBase { const EVENT_NEXT = "next"; const EVENT_PREVIOUS = "previous"; private $lastEvent; private $ajaxAction = "gridCallback"; private $controller; public function initialize(&$controller, $settings=array()){ Util::injectHelper($controller, $this->name); $controller->set("pluginCom." . $this->name,$this); //////It will be retrieved by injected Helper inside the view $this->controller =& $controller; //$this->clear(); } public function startup(&$controller){ if(!strpos("_".$controller->action,JQGRID_PREFIX)) /////if we should not intercept the action return; $modelName = substr($controller->action,strrpos($controller->action, "_")+1); $controller->action = $this->ajaxAction; $controller->autoRender = false; $controller->autoLayout = false; $controller->output = $this->handleRequest($controller,$modelName); } public function setAjaxAction($actionName){ $this->ajaxAction = $actionName; } public function getAjaxAction(){ return $this->ajaxAction; } public function grid($data , $filter = null , $labels = null){ if(gettype($data) == "string"){ $this->gridName = $data; unset($_SESSION[JQGRID_PREFIX.$this->gridName."_labels"]); unset($_SESSION[JQGRID_PREFIX.$this->gridName]); $headers = array(); App::uses($data , 'Model'); $model = ClassRegistry::getObject($data); // $model = $this->_View->element($data); echo print_r(ClassRegistry::init($data)); if($model == null) { $this->controller->loadModel($data); $model = $this->controller->{$data}; } if($model == null || $model->_schema == null){ die("JqGrid ERROR : Requested Model cannot be loaded. [".$data."]"); } $metadata = $model->_schema; foreach ($metadata as $key => $field) $headers[] = $key; if($filter != null && array_key_exists("fields",$filter)){ $headers = array(); foreach ($filter['fields'] as $field) //////////They are defined like Model.fieldname $headers[] = substr($field, strrpos($field, ".")+1); //////////// we extract fieldname from rest of the string } if($labels != null){ $labelMap = array(); $size = sizeof($labels); for($i=0;$i<sizeof($headers);$i++){ $labelMap[$headers[$i]] = ($i >= $size) ? $headers[$i] : $labels[$i]; } $_SESSION[JQGRID_PREFIX.$this->gridName."_labels"] = $labelMap; } parent::grid($labels==null ? $headers : $labels,$headers); } else{ //////////////$data is an array of prefetched Model objects.... } if($this->gridName == null) die("Error: Passed data seems to be invalid to make a grid. [".$data."]"); $pagination = $this->controller->paginate; $pagination = array_key_exists($data,$pagination) ? $pagination[$data] : $pagination; //////////////storing filters if($filter != null) $_SESSION[JQGRID_PREFIX.$this->gridName] = $filter; if($filter != null) $pagination = array_merge($pagination,$filter); //////////////////////////////// synchronizing shared options if(isset($pagination['limit'])) $this->generalOptions(array(GridBuilder::ATTR_ROWS_PER_PAGE => $pagination['limit'])); if(isset($pagination['page'])) $this->generalOptions(array(GridBuilder::ATTR_PAGE => $pagination['page'])); /////////////////some internal options for handling ajax calls $this->generalOptions(array(GridBuilder::ATTR_URL=> JQGRID_PREFIX . $this->gridName, GridBuilder::ATTR_DATA_TYPE => "json")); ///////it just supports json at the moment $this->generalOptions(array(GridBuilder::ATTR_ENHANCED_INSERTION=>true)); $this->parserOptions(array(GridBuilder::ATTR_PARSER_REPEAT => false, GridBuilder::ATTR_PARSER_ID => "0")); $this->searchOptions(array(GridBuilder::ATTR_SEARCH_SOPT => array ("eq" , "ne" , "lt" , "le" , "gt" , "ge" , "bw" , "ew" , "cn"))); return $this; } /* * Ajax requests are handled here */ protected function handleRequest(&$controller,$gridModel){ $temp = $controller->paginate; if(array_key_exists(JQGRID_PREFIX.$gridModel, $_SESSION)){ $filter = $_SESSION[JQGRID_PREFIX.$gridModel]; $paginate = array_key_exists($gridModel, $controller->paginate) ? $controller->paginate[$gridModel] : $controller->paginate; foreach ($filter as $key => $options){ if(is_array($options)){ $paginate[$key] = (array_key_exists($key,$paginate)) ? array_merge($options,$paginate[$key]) : $options; } else $paginate[$key] = $options; } $controller->paginate = $paginate; } $map = null; if(array_key_exists(JQGRID_PREFIX.$gridModel."_labels", $_SESSION)) $map = $_SESSION[JQGRID_PREFIX.$gridModel."_labels"]; if(ClassRegistry::getObject($gridModel) == null) $this->controller->loadModel($gridModel); $result = null; if(array_key_exists("_search", $_REQUEST) && $this->strip($_REQUEST['_search']) == 'true'){ $this->prepareForSearch($controller->paginate, $gridModel, $map); } if(array_key_exists("sidx", $_REQUEST) && strlen($_REQUEST['sidx']) > 1){ $this->prepareForSort($controller->paginate, $gridModel); } $result = $controller->paginate($gridModel); $paging = $controller->params['paging'][$gridModel]; $responce->page = $paging['page']; $responce->total = $paging['pageCount']; $responce->records = $paging['count']; $i = 0; ///////////////building the json object if($map != null){ foreach($result as $item){ $responce->rows[$i]=$item[$gridModel]; foreach ($responce->rows[$i] as $key => $element){ if(array_key_exists($key,$map)){ $responce->rows[$i][$map[$key]] = $responce->rows[$i][$key]; unset($responce->rows[$i][$key]); } } $i++; } } else { foreach($result as $item){ $responce->rows[$i++]=$item[$gridModel]; } } $controller->paginate = $temp; ////////////go back to what it was return json_encode($responce); } private function prepareForSearch(&$paginate , $model , $labels){ $conditions = array(); $fld = $this->strip($_REQUEST['searchField']); if($labels != null){ foreach ($labels as $key=>$value){ if($value == $fld){ $fld = $key; break; } } } $fldata = $this->strip($_REQUEST['searchString']); $foper = $this->strip($_REQUEST['searchOper']); switch ($foper) { case "eq": $conditions["$model.$fld"] = is_numeric($fldata) ? $fldata : "'$fldata'"; break; case "ne": $conditions["$model.$fld <>"] = is_numeric($fldata) ? $fldata : "'$fldata'"; break; case "lt": $conditions["$model.$fld <"] = is_numeric($fldata) ? $fldata : "'$fldata'"; break; case "le": $conditions["$model.$fld <="] = is_numeric($fldata) ? $fldata : "'$fldata'"; break; case "gt": $conditions["$model.$fld >"] = is_numeric($fldata) ? $fldata : "'$fldata'"; break; case "ge": $conditions["$model.$fld >="] = is_numeric($fldata) ? $fldata : "'$fldata'"; break; case "bw": $conditions["$model.$fld LIKE"] = $fldata."%"; break; case "ew": $conditions["$model.$fld LIKE"] = "%$fldata"; break; case "cn": $conditions["$model.$fld LIKE"] = "%$fldata%"; break; default : $conditions = array(); } if(array_key_exists('conditions', $paginate)) $conditions = array_merge($paginate['conditions'],$conditions); $paginate['conditions'] = $conditions; } private function prepareForSort(&$paginate , $model){ $sidx = $_REQUEST['sidx']; $sord = $_REQUEST['sord']; $order = array("$model.$sidx ".strtoupper($sord)); if(array_key_exists('order', $paginate)) $order = array_merge($order,$paginate['order']); $paginate['order'] = $order; } private function strip($value){ if(get_magic_quotes_gpc() != 0) { if(is_array($value)) if(array_is_associative($value)){ foreach( $value as $k=>$v) $tmp_val[$k] = stripslashes($v); $value = $tmp_val; } else for($j=0;$j<sizeof($value);$j++) $value[$j] = stripslashes($value[$j]); else $value = stripslashes($value); } return $value; } private function array_is_associative ($array){ if ( is_array($array) && ! empty($array) ) { for ($iterator=count($array)-1;$iterator; $iterator-- ) if (!array_key_exists($iterator, $array)) { return true; } return !array_key_exists(0, $array); } return false; } } ?> -- Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/cake-php
