From 314683661f1b83bb648ecbace2e9140e30de4321 Mon Sep 17 00:00:00 2001 From: Antonio de la Rosa Date: Sat, 13 Dec 2025 01:40:41 +0100 Subject: [PATCH] Added simple list function and jsutils --- .gitmodules | 2 +- cuchulu/libraries/lists.py | 128 ++++++++++++++++++++++++- cuchulu/modules/admin/media/js/jsutils | 1 + 3 files changed, 129 insertions(+), 2 deletions(-) create mode 160000 cuchulu/modules/admin/media/js/jsutils diff --git a/.gitmodules b/.gitmodules index ffbf5df..e110c51 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "cuchulu/modules/admin/media/js/jsutils"] path = cuchulu/modules/admin/media/js/jsutils - url = https://git.cuchulu.com/paramecio/jsutils.git + url = ssh://git@git.cuchulu.com/paramecio/jsutils.git diff --git a/cuchulu/libraries/lists.py b/cuchulu/libraries/lists.py index 6f166d3..612d5af 100644 --- a/cuchulu/libraries/lists.py +++ b/cuchulu/libraries/lists.py @@ -445,7 +445,133 @@ class AjaxList(SimpleList): return {'fields': self.fields, 'rows': rows, 'html_pages': html_pages} -class SimpleAjaxList(): +def simple_ajax_list(model, fields_searched, fields_selected, func_options=None): + + error=1 + message='' + items=[] + + total_num_items=model.select_count(model.name_field_id) + + try: + + begin_page=int(request.query.get('begin_page')) if int(request.query.get('begin_page')>=0) else 0 + + except: + + begin_page=0 + + try: + + num_elements=int(request.query.get('num_elements')) if int(request.query.get('num_elements')>0) else 0 + + except: + + num_elements=20 + + arr_order=['ASC', 'DESC'] + + try: + + order=int(request.query.get('order', '0')) + + except: + + order=0 + + if order<0 or order>1: + order=0 + + get_order_field=str(request.query.get('order_field', '')) + + if get_order_field in model.fields and get_order_field!='': + order_field=get_order_field + + else: + order_field=fields_selected[0] + + search_values=[] + + sql_search_text='WHERE 1=1' + + search_all_text=str(request.query.get('search_all_text', '')) + + if search_all_text!='': + + arr_fields=[] + arr_values=[] + + for field in fields_searched: + arr_fields.append(f'`{field}` LIKE %s') + arr_values.append(search_all_text+'%') + + search_values=arr_values+search_values + sql_search_text+=f' AND ({' OR '.join(arr_fields)})' + #print(order_field) + #print(search_values) + #print(sql_search_text) + + #print({order_field: order}) + + with model.set_conditions(sql_search_text, search_values).set_order({order_field: order}).select(fields_selected, raw_query=True) as cursor: + + for v in cursor: + items.append(v) + + if func_options: + + items[len(items)-1]['options']=func_options(v) + + pass + + if len(items)>0: + error=0 + + return {'items': items, 'total_num_items': total_num_items, 'error': error, 'message': message} + + """ + + settype($_GET['search_all_text'], 'string'); + + $search_all_text=trim($_GET['search_all_text']); + + if($search_all_text!='') { + + $arr_fields=[]; + $arr_values=[]; + + //$arr_values_sql=array_fill(0, count($this->fields_list), '?'); + foreach(array_keys($this->fields_list) as $field) { + + $arr_fields[]='`'.$field.'` LIKE ?'; + $arr_values[]=$search_all_text.'%'; + } + + $search_values=array_merge($arr_values, $search_values); + $sql_search_text=$sql_search_text.' AND ('.implode(' OR ', $arr_fields).')'; + //$search_all_text='WHERE '; + + } + + $this->db->select($this->table, array_keys($this->fields_list), $sql_search_text.' order by ? ? limit '.$begin_page.','.$num_elements, $search_values); + + + foreach($this->db->get_result() as $v) { + + $items[]=$v; + + $items[count($items)-1]['options']=''._('Edit').'
'._('Delete').''; + + } + + if($items) { + + $error=0; + + } + + return ['items' =>$items, 'total_num_items' => $total_num_items, 'error' => $error, 'message' => $message]; + """ pass diff --git a/cuchulu/modules/admin/media/js/jsutils b/cuchulu/modules/admin/media/js/jsutils new file mode 160000 index 0000000..ff69d57 --- /dev/null +++ b/cuchulu/modules/admin/media/js/jsutils @@ -0,0 +1 @@ +Subproject commit ff69d57ca5224ddf528ab283f4e628b296ea4886