/** * Mapowanie parametrów w nawigacji * Jeśli dla parametru sposób mapowania nie jest określony, * to przyjmuje się, że mapowanie z obiektu ma pierwszeństwo * przed parametrem z linku, mapowany jest parametr id oraz * parametr jest hashowany * * @param Base_Db_Table_Row $row * @param Base_Paginator $paginator * @return Zend_Navigation */ public function NavMap($row, $paginator) { $actions = null; if ($paginator->moreActions !== null && is_array($paginator->moreActions) && count($paginator->moreActions) > 0) { $actions = $paginator->moreActions; } $container = array(); if ($row instanceof Base_Db_Table_Row or is_subclass_of($row, 'Base_Paginator_Adapter_Array_Row')) { $container = $row->getActions($actions, $paginator->getIgnoreActionsFlag()); } else { $container = $paginator->getActions(); } $request = Zend_Controller_Front::getInstance()->getRequest(); foreach ($container as $key => $page) { if (isset($page['params']) && is_array($page['params'])) { foreach ($page['params'] as $k => $param) { $source = isset($param['source']) ? $param['source'] : self::SOURCE_OBJECT; $val = $param['param'] ? $param['param'] : null; $tmp_req = $request->getParam(!is_null($val) ? $val : 'id'); $rowParam = isset($param['param']) ? $param['param'] : $k; $tmp_obj = isset($row[$rowParam]) ? $row[$rowParam] : null; switch ($source) { case self::SOURCE_REQUEST: $tmp = $tmp_req ? $tmp_req : $tmp_obj; break; case self::SOURCE_OBJECT: $tmp = $tmp_obj ? $tmp_obj : $tmp_req; break; case self::SOURCE_STATIC: $tmp = $val; break; default: throw new Exception('Unknown data processing method'); } $idConvert = Zend_Controller_Action_HelperBroker::getStaticHelper('IdConvert'); $container[$key]['params'][$k] = isset($param['hash']) ? $param['hash'] ? $idConvert->StrToHex($tmp) : $tmp : $idConvert->StrToHex($tmp); } } } return new Zend_Navigation($container); }