/** * We translate the names of two classes into a relation table. * Its always {CLASS1}_{CLASS2}_rel while the classes are sorted in alphabetic order. * * @param string $myObject Own class. * @param string $foreignObject Foreign class. * * @return string Relation name. */ protected static function _translateIntoRelationTableName(Phprojekt_ActiveRecord_Abstract $myObject, Phprojekt_ActiveRecord_Abstract $foreignObject) { $tableNames = array(); $myTable = $myObject->getTableName(); $foreignTable = $foreignObject->getTableName(); $tableNames[] = $myTable; $tableNames[] = $foreignTable; sort($tableNames); reset($tableNames); $tableName = sprintf('%s_relation', implode('_', $tableNames)); return $tableName; }
/** * Convert the rule and value into a real where clause. * * @param string $field Field for filter. * @param string $identifier Converted field for filter. * @param string $rule Rule for apply the filter. * @param string $keyword Value used for filter. * * @return string Where clause. */ private function _convertRule($field, $identifier, $rule, $keyword) { // Sanitize values if ($this->_info['metadata'][$identifier]['DATA_TYPE'] == 'time') { // Moving the value to UTC $identifier = $this->_record->getTableName() . '.' . $identifier; $identifier = Phprojekt::getInstance()->getDb()->quoteIdentifier($identifier); $value = Cleaner::sanitize('time', $keyword); $k = date("H:i:s", Phprojekt_Converter_Time::userToUtc($value)); //$identifier = 'TIME(' . $identifier . ')'; } else { if ($this->_info['metadata'][$identifier]['DATA_TYPE'] == 'datetime') { $identifier = $this->_record->getTableName() . '.' . $identifier; $identifier = Phprojekt::getInstance()->getDb()->quoteIdentifier($identifier); if (strstr($keyword, '-')) { // Use it as date $k = Cleaner::sanitize('date', $keyword); $identifier = 'DATE(' . $identifier . ')'; } else { if (strstr($keyword, ':')) { // Use it as time $value = Cleaner::sanitize('time', $keyword); $k = date("H:i:s", Phprojekt_Converter_Time::userToUtc($value)); $identifier = 'TIME(' . $identifier . ')'; } else { // Use it as datetime $value = Cleaner::sanitize('timestamp', $keyword); $k = date("Y-m-d H:i:s", Phprojekt_Converter_Time::userToUtc($value)); } } } else { $keyword = mb_strtolower($keyword, 'UTF-8'); $k = $keyword; $identifier = $this->_record->getTableName() . '.' . $identifier; $identifier = Phprojekt::getInstance()->getDb()->quoteIdentifier($identifier); } } switch ($rule) { case 'equal': $w = $identifier . ' = ? '; break; case 'notEqual': $w = $identifier . ' != ? '; break; case 'major': $w = $identifier . ' > ? '; break; case 'majorEqual': $w = $identifier . ' >= ? '; break; case 'minor': $w = $identifier . ' < ? '; break; case 'minorEqual': $w = $identifier . ' <= ? '; break; case 'begins': $w = $identifier . ' LIKE ? '; $k = $keyword . '%'; break; case 'ends': $w = $identifier . ' LIKE ? '; $k = '%' . $keyword; break; case 'notLike': $w = $identifier . ' NOT LIKE ? '; $k = '%' . $keyword . '%'; break; case 'like': default: $w = $identifier . ' LIKE ? '; $k = '%' . $keyword . '%'; } return Phprojekt::getInstance()->getDb()->quoteInto($w, $k); }