/** * * @return \ZendT_Db_Where */ public function getWhere($onlyValidParam = false) { $params = Zend_Controller_Front::getInstance()->getRequest()->getParams(); $columnsMapper = $this->_mapper->getColumns()->toArray(); $columns = $this->_mapper->getColumns()->getColumnsMapper(); $columns->add('*', get_class($this->_mapper)); $paramValid = array(); $binds = array(); /** * Verifica se no profile existe filtro padrão configurado */ $columnsFilters = $this->_options['cols-filter']['fields']; #var_dump($columnsMapper);die; foreach ($params as $key => $val) { if (!array_key_exists($key, $columnsFilters)) { if ($columnsMapper[$key]) { $value = $params[$key]; if (isset($columnsMapper[$key]['listOptions'][$value])) { $value = $columnsMapper[$key]['listOptions'][$value]; } $columnsFilters[$key] = array('label' => $columnsMapper[$key]['label'], 'value' => $value); } } } #var_dump($columnsFilters);die; if (isset($columnsFilters)) { foreach ($columnsFilters as $columnName => $column) { /* echo $columnName; print_r($this->_options); exit; */ if ($columnsMapper[$columnName]['expression']) { $field = 'expression-' . $columnName; } else { $field = str_replace('.', '-', $columnsMapper[$columnName]['column']); } $label = $columnsFilters[$columnName]['label']; if (!$label) { $label = $columnsMapper[$columnName]['label']; } if ($params[$columnName . '-multiple']) { $this->_params[$columnName] = $params[$columnName . '-multiple']; $labelWhere[str_replace('-', '.', $field)] = $label; $labelWhere[$columnName] = $label; $params[$field] = $params[$columnName . '-multiple']; $paramValid[$columnName] = true; unset($params[$columnName . '-multiple']); if (is_array($columnsMapper[$columnName]['bind'])) { $binds[$columnName] = $columnsMapper[$columnName]['bind']; } continue; } if ($params[$columnName]) { $this->_params[$columnName] = $params[$columnName]; $labelWhere[str_replace('-', '.', $field)] = $label; $labelWhere[$columnName] = $label; $params[$field] = $params[$columnName]; $paramValid[$columnName] = true; if (is_array($columnsMapper[$columnName]['bind'])) { $binds[$columnName] = $columnsMapper[$columnName]['bind']; } unset($params[$columnName]); continue; } if (isset($params[$columnName . '-multiple'])) { unset($params[$columnName . '-multiple']); } #if ($params[str_replace('.','-',$columnsMapper[$columnName]['column'])]){ # continue; #} $valueParse = $columnsFilters[$columnName]['value']; if (in_array($columnsMapper[$columnName]['type'], array('Date', 'DateTime'))) { $values = array(); if (strpos($valueParse, ';')) { $sep = ';'; $values = explode(';', $valueParse); } else { if (strpos($valueParse, ' ')) { $sep = ' '; $values = explode(' ', $valueParse); } else { if ($config['value'] != '') { $sep = ''; $values = array($valueParse); } else { if ($valueParse) { $sep = ''; $values = array($valueParse); } } } } $valueParse = ''; foreach ($values as $value) { $date = ZendT_Type_Date::parse($value, $columnsMapper[$columnName]['type']); if ($valueParse) { $valueParse .= $sep . str_replace(" ", "-", $date->get()); } else { $valueParse = str_replace(" ", "-", $date->get()); } } } else { if (strtolower(substr($valueParse, 0, 5)) == 'logon') { $levels = explode('.', $valueParse); $_sessionValue = $_SESSION; foreach ($levels as $level) { $_sessionValue = $_sessionValue[$level]; } $valueParse = $_sessionValue; } } if ($valueParse) { $labelWhere[str_replace('-', '.', $field)] = $label; $labelWhere[$columnName] = $label; $params[$field] = $valueParse; $paramValid[$columnName] = true; $this->_params[$columnName] = $valueParse; if (is_array($columnsMapper[$columnName]['bind'])) { $binds[$columnName] = $columnsMapper[$columnName]['bind']; } } } } # foreach ($columnsMapper as $columnName => $column) { if ($column['required'] && !$paramValid[$columnName]) { throw new ZendT_Exception_Alert($column['required']); } } #var_dump($params);die; $where = ZendT_Db_Where::fromAutoFilter($params, $columns, null, $binds); if (method_exists($this->_mapper, 'setWhere')) { $this->_mapper->setWhere($where); } if (method_exists($this->_mapper, 'paramIsValid')) { $this->_mapper->paramIsValid($where); } if ($onlyValidParam) { return $where; } /** * Trata parâmetros a serem impressos no PDF e XLS */ #print_r($labelWhere); if ($this->_options['printLabelFilters']) { $this->_labelFilters = $where->getFriendlyFilter($labelWhere); /** * Realiza a substituição dos ids pela descrição dos campos configurados na seeker */ foreach ($this->_configColumns as $array => $field) { if (is_array($field['seeker'])) { $newfield = $field['aliasTable'] . "." . $field['columnName']; /* * Monta uma lista dos ids a partir da label atual para aplicar filtro no banco */ $value = $this->_labelFilters[$newfield]['value']; $union = ''; if (strpos($value, ',') !== false) { $values = explode(',', $value); $union = ','; } else { $values = explode(' e ', $value); $union = ' e '; } $value = implode(';', $values); $_mapperView = new $field['seeker']['mapperView'](); $_whereLabel = $_mapperView->getColumns()->mountWhere('id', $value); $data = $_mapperView->recordset($_whereLabel); /** * Define os campos que serão exibidos, conforme a quantidade de labels informada */ $countLabels = 0; $maxLabels = !$field['seeker']['maxLabels'] ? 1 : $field['seeker']['maxLabels']; $fields = array(); foreach ($field['seeker']['fields'] as $_field => $_value) { array_push($fields, $_field); if (++$countLabels >= $maxLabels) { break; } } /** * Monta uma nova label para exibir os campos definidos acima */ $newLabel = ''; while ($row = $data->getRow()) { if ($newLabel) { $newLabel .= $union; } $labels = ''; for ($i = 0; $i < count($fields); $i++) { if ($labels) { $labels .= ' - '; } $labels .= $row[$fields[$i]]->get(); } $newLabel .= $labels; } if ($newLabel) { $this->_labelFilters[$newfield]['value'] = $newLabel; } #echo $newLabel;die; } } } return $where; }
private function _parseValue($value, $type) { $valueParse = $value; if (in_array($type, array('Date', 'DateTime'))) { $values = array(); if (strpos($valueParse, ';')) { $sep = ';'; $values = explode(';', $valueParse); } else { if (strpos($valueParse, ' ')) { $sep = ' '; $values = explode(' ', $valueParse); } else { if ($value != '') { $sep = ''; $values = array($valueParse); } else { if ($valueParse) { $sep = ''; $values = array($valueParse); } } } } $valueParse = ''; foreach ($values as $value) { $date = ZendT_Type_Date::parse($value, $type); if ($valueParse) { $valueParse .= $sep . str_replace(" ", "-", $date->get()); } else { $valueParse = str_replace(" ", "-", $date->get()); } } } return $valueParse; }
/** * Prepara o valor que será carregado no elemento, * esse valor pode conter macros de data e sessão do logon. * * @param string $value * @param ZendT_Form_Element_Date $element * @return string */ public function _parseValue($value, $element = null, $type = '') { if ($element instanceof ZendT_Form_Element_Date || $element instanceof ZendT_Form_Element_DateTime || $element instanceof ZendT_Form_Element_DateMulti || $element instanceof ZendT_Form_Element_DateDynamic) { $value = trim($value); $values = array(); if (strpos($value, ';')) { $sep = ';'; $values = explode(';', $value); } else { if (strpos($value, ' ')) { $sep = ' '; $values = explode(' ', $value); } else { if ($value != '') { $sep = ''; $values = array($value); } } } if ($element instanceof ZendT_Form_Element_DateTime) { $type = 'DateTime'; } else { $type = 'Date'; } $value = ''; foreach ($values as $newValue) { $date = ZendT_Type_Date::parse($newValue, $type); if ($value) { $value .= $sep . str_replace(" ", "-", $date->get()); } else { if ($type == 'DateTime') { $value = $date->get(); } else { $value = str_replace(" ", "-", $date->get()); } } } } else { if (strtolower(substr($value, 0, 5)) == 'logon') { $levels = explode('.', $value); $_sessionValue = $_SESSION; foreach ($levels as $level) { $_sessionValue = $_sessionValue[$level]; } $value = $_sessionValue; } } if ($element instanceof ZendT_Form_Element_Seeker) { $_mapperView = $element->getMapperView(); if ($_mapperView) { $_mapperView = new $_mapperView(); $where = $_mapperView->getColumns()->mountWhere('id', $value); $value = $_mapperView->recordset($where); } } return $value; }