diff --git a/main/inc/lib/database.lib.php b/main/inc/lib/database.lib.php index 81a24bbee7..ad5695ace6 100755 --- a/main/inc/lib/database.lib.php +++ b/main/inc/lib/database.lib.php @@ -1328,8 +1328,8 @@ class Database { * @todo lot of stuff to do here */ - public static function find($table_name, $columns = '*' , $where_conditions = array(), $option = 'ASSOC') { - $where_return = self::parse_where_conditions($where_conditions); + public static function select($columns = '*' , $table_name, $conditions = array(), $option = 'ASSOC') { + $conditions = self::parse_conditions($conditions); $clean_columns = ''; if (is_array($columns)) { $clean_columns = implode(',', $columns); @@ -1339,54 +1339,71 @@ class Database { } else { $clean_columns = (string)$columns; } - } - $sql = "SELECT $clean_columns FROM $table_name $where_return "; - $result = self::query($sql); - - $array = array(); - if ($result !== false) { // For isolation from database engine's behaviour. + } + + $sql = "SELECT $clean_columns FROM $table_name $conditions"; + $result = self::query($sql); + $array = array(); + if (self::num_rows($result) > 1 ) { while ($row = self::fetch_array($result, $option)) { if (isset($row['id'])) { $array[$row['id']] = $row; } else { $array[] = $row; } - } + } + } else { + $array = self::fetch_array($result, $option); } return $array; } /** - * Parses where conditionsof this form: array('id = ?' =>'4') + * Parses WHERE/ORDER conditions i.e array('where'=>array('id = ?' =>'4'), 'order'=>'id DESC')) + * @param array * @todo lot of stuff to do here */ - private function parse_where_conditions($conditions) { + private function parse_conditions($conditions) { if (empty($conditions)) { return ''; } - $where_return = ''; - foreach ($conditions as $condition => $value_array) { - if (is_array($value_array)) { - $clean_values = array(); - foreach($value_array as $item) { - $item = Database::escape_string($item); - $clean_values[]= "'$item'"; - } - } else { - $value_array = Database::escape_string($value_array); - $clean_values = "'$value_array'"; - } - if (!empty($condition) && !empty($clean_values)) { - $condition = str_replace('?','%s', $condition); //we treat everything as string - $condition = vsprintf($condition, $clean_values); - $where_return .= $condition; - } - } - if (!empty($where_return)) { - $where_return = " WHERE $where_return "; + $return_value = ''; + foreach ($conditions as $type_condition => $condition_data) { + switch($type_condition) { + case 'where': + foreach ($condition_data as $condition => $value_array) { + if (is_array($value_array)) { + $clean_values = array(); + foreach($value_array as $item) { + $item = Database::escape_string($item); + $clean_values[]= "'$item'"; + } + } else { + $value_array = Database::escape_string($value_array); + $clean_values = "'$value_array'"; + } + if (!empty($condition) && !empty($clean_values)) { + $condition = str_replace('?','%s', $condition); //we treat everything as string + $condition = vsprintf($condition, $clean_values); + $where_return .= $condition; + } + } + if (!empty($where_return)) { + $return_value = " WHERE $where_return" ; + } + break; + case 'order': + $return_value .= " ORDER BY $condition_data"; + break; + + } } - return $where_return; + return $return_value; + } + + private function parse_where_conditions($coditions){ + return self::parse_conditions(array('where'=>$coditions)); } /**