示例#1
0
 public static function FetchBy($kwargs)
 {
     extract($kwargs, EXTR_PREFIX_ALL, 't');
     $select_list = '*';
     $eq_conds = array();
     $order_by = '';
     $limit = '';
     $offset = '';
     $where_addition = '';
     $is_assoc = false;
     $is_unique = false;
     $special = array();
     if (isset($t_select_list)) {
         $select_list = $t_select_list;
     }
     if (isset($t_eq_conds)) {
         $eq_conds = $t_eq_conds;
     }
     if (isset($t_order_by)) {
         $order_by = $t_order_by;
     }
     if (isset($t_limit)) {
         $limit = $t_limit;
     }
     if (isset($t_offset)) {
         $offset = $t_offset;
     }
     if (isset($t_where_addition)) {
         $where_addition = $t_where_addition;
     }
     if (isset($t_is_assoc)) {
         $is_assoc = $t_is_assoc;
     }
     if (isset($t_is_unique)) {
         $is_unique = $t_is_unique;
     }
     if (isset($t_special)) {
         $special = $t_special;
     }
     global $db_connection;
     $where_clause = '';
     $i = 0;
     $size = count($eq_conds);
     $need_where_word = $size !== 0 || StringNotEmpty($where_addition);
     foreach ($eq_conds as $key => $value) {
         $value_tmp = $db_connection->real_escape_string($value);
         if (is_string($value_tmp)) {
             $value_tmp = '"' . $value_tmp . '"';
         }
         $where_clause .= ' (' . $key . ' = ' . $value_tmp . ') ';
         if ($i < $size - 1) {
             $where_clause .= 'OR';
         }
         ++$i;
     }
     if ($need_where_word) {
         if (StringNotEmpty($where_clause) && StringNotEmpty($where_addition)) {
             $where_clause = '(' . $where_clause . ') AND ';
             $where_addition = '(' . $where_addition . ')';
         }
         $where_clause = "WHERE " . $where_clause . ' ' . $where_addition;
     }
     if (StringNotEmpty($order_by)) {
         $where_clause .= ' ORDER BY ' . $order_by;
     }
     if (StringNotEmpty($limit)) {
         $where_clause .= ' LIMIT ' . $limit;
     }
     if (StringNotEmpty($offset)) {
         $where_clause .= ' OFFSET ' . $offset;
     }
     if (!StringNotEmpty($lang)) {
         $lang = GetLanguage();
     }
     $from_table = self::$table;
     $res = $db_connection->query("SELECT " . $select_list . " FROM " . $from_table . " " . $where_clause);
     if (!$res) {
         return new Error($db_connection->error, Error::db_error);
     }
     $res = self::ArrayFromDBResult($res, $is_assoc);
     $res_count = count($res);
     if ($is_unique) {
         if ($res_count > 1) {
             return Error::ambiguously;
         }
         if ($res_count === 0) {
             return Error::not_found;
         }
     }
     for ($i = 0, $count = count($special); $i < $count; ++$i) {
         switch ($special[$i]) {
             default:
                 break;
         }
     }
     if (!$is_unique) {
         return $res;
     } else {
         return $res[0];
     }
 }
示例#2
0
 public static function FetchBy($kwargs)
 {
     extract($kwargs, EXTR_PREFIX_ALL, 't');
     $select_list = '*';
     $eq_conds = array();
     $order_by = '';
     $limit = '';
     $offset = '';
     $where_addition = '';
     $is_assoc = false;
     $is_unique = false;
     $special = array();
     if (isset($t_select_list)) {
         $select_list = $t_select_list;
     }
     if (isset($t_eq_conds)) {
         $eq_conds = $t_eq_conds;
     }
     if (isset($t_order_by)) {
         $order_by = $t_order_by;
     }
     if (isset($t_limit)) {
         $limit = $t_limit;
     }
     if (isset($t_offset)) {
         $offset = $t_offset;
     }
     if (isset($t_where_addition)) {
         $where_addition = $t_where_addition;
     }
     if (isset($t_is_assoc)) {
         $is_assoc = $t_is_assoc;
     }
     if (isset($t_is_unique)) {
         $is_unique = $t_is_unique;
     }
     if (isset($t_special)) {
         $special = $t_special;
     }
     global $db_connection;
     $where_clause = '';
     $i = 0;
     $size = count($eq_conds);
     $need_where_word = $size !== 0 || StringNotEmpty($where_addition);
     foreach ($eq_conds as $key => $value) {
         $value_tmp = $db_connection->real_escape_string($value);
         if (is_string($value)) {
             $value_tmp = '"' . $value_tmp . '"';
         }
         $where_clause .= ' (' . $key . ' = ' . $value_tmp . ') ';
         if ($i < $size - 1) {
             $where_clause .= 'OR';
         }
         ++$i;
     }
     if ($need_where_word) {
         if (StringNotEmpty($where_clause) && StringNotEmpty($where_addition)) {
             $where_clause = '(' . $where_clause . ') AND ';
             $where_addition = '(' . $where_addition . ')';
         }
         $where_clause = "WHERE " . $where_clause . ' ' . $where_addition;
     }
     if (StringNotEmpty($order_by)) {
         $where_clause .= ' ORDER BY ' . $order_by;
     }
     if (StringNotEmpty($limit)) {
         $where_clause .= ' LIMIT ' . $limit;
     }
     if (StringNotEmpty($offset)) {
         $where_clause .= ' OFFSET ' . $offset;
     }
     if (!StringNotEmpty($lang)) {
         $lang = GetLanguage();
     }
     $from_table = self::$table;
     $res = $db_connection->query("SELECT " . $select_list . " FROM " . $from_table . " " . $where_clause);
     if (!$res) {
         return new Error($db_connection->error, Error::db_error);
     }
     $res = self::ArrayFromDBResult($res, $is_assoc);
     $res_count = count($res);
     if ($is_unique) {
         if ($res_count > 1) {
             return Error::ambiguously;
         }
         if ($res_count === 0) {
             return Error::not_found;
         }
     }
     for ($i = 0, $count = count($special); $i < $count; ++$i) {
         switch ($special[$i]) {
             case 'file_type':
                 if ($is_assoc === false) {
                     break;
                 }
                 global $valid_extensions;
                 for ($j = 0; $j < $res_count; ++$j) {
                     if (isset($res[$j]['name'])) {
                         $type = fileExtension($res[$j]['name']);
                         if (!in_array($type, $valid_extensions)) {
                             $type = 'file';
                         }
                         $res[$j]['file_type'] = $type;
                     }
                 }
                 break;
             case 'link_to_download':
                 if ($is_assoc === false) {
                     break;
                 }
                 for ($j = 0; $j < $res_count; ++$j) {
                     if (isset($res[$j]['path_to_file']) && isset($res[$j]['name']) && isset($res[$j]['is_directory'])) {
                         $tmp = self::FetchFromAssoc(['path_to_file' => $res[$j]['path_to_file'], 'name' => $res[$j]['name'], 'is_directory' => $res[$j]['is_directory']]);
                         $res[$j]['link_to_download'] = $tmp->GetLinkToFile();
                     }
                 }
                 break;
             case 'link_to_delete':
                 if ($is_assoc === false) {
                     break;
                 }
                 for ($j = 0; $j < $res_count; ++$j) {
                     if (isset($res[$j]['id']) && isset($res[$j]['owner_id'])) {
                         $tmp = self::FetchFromAssoc(['id' => $res[$j]['id'], 'owner_id' => $res[$j]['owner_id']]);
                         $res[$j]['link_to_delete'] = $tmp->GetLinkToDelete();
                     }
                 }
                 break;
             case 'link_to_edit':
                 if ($is_assoc === false) {
                     break;
                 }
                 for ($j = 0; $j < $res_count; ++$j) {
                     if (isset($res[$j]['id']) && isset($res[$j]['owner_id'])) {
                         $tmp = self::FetchFromAssoc(['id' => $res[$j]['id'], 'owner_id' => $res[$j]['owner_id']]);
                         $res[$j]['link_to_edit'] = $tmp->GetLinkToEdit();
                     }
                 }
                 break;
             case 'link_to_link_to_download':
                 if ($is_assoc === false) {
                     break;
                 }
                 for ($j = 0; $j < $res_count; ++$j) {
                     if (isset($res[$j]['id']) && isset($res[$j]['owner_id'])) {
                         $tmp = self::FetchFromAssoc(['path_to_file' => $res[$j]['path_to_file'], 'name' => $res[$j]['name'], 'id' => $res[$j]['id']]);
                         $link = $tmp->CreateDownloadLink();
                         $res[$j]['link_to_link_to_download'] = SecretLink::WrapLinkToButton($link->GetPublicLink());
                     }
                 }
                 break;
             default:
                 break;
         }
     }
     if (!$is_unique) {
         return $res;
     } else {
         return $res[0];
     }
 }