dbXapp 2.0
RAD, CMS, Module und Runtime-IDE fuer dbXapp
Loading...
Searching...
No Matches
dbxContent_list.class.php
Go to the documentation of this file.
1<?php
2namespace dbx\dbxContent_admin;
3dbx()->get_system_obj('dbxReport','use');
4
5use dbx\dbxContent\dbxContent_permalink;
6
7require_once dirname(__DIR__, 2) . '/dbxContent/include/dbxContent_bootstrap_sync.php';
8
9
11 public $_folders = array(); // speed up
12 public $_groups = array();
13
14
15
16 private function get_folder_matrix() { // create matrix folder <-> parent
17 $folder_matrix=dbx()->get_modul_var('folder_matrix','');
18 if (is_array($folder_matrix)) return $folder_matrix;
19 $folder_matrix=array();
20 $db=dbx()->get_system_obj('dbxDB');
21 $root = dbx()->get_modul_var('tree_root',0);
22 $lng = dbx()->get_system_var('dbx_lng','de');
23 $tab = function_exists('dbx_lng_name') ? dbx_lng_name('content_folder', $lng) : ('content_folder_' . $lng);
24
25
26 $folders=$db->select($tab,'','id,parent_id');
27 if (is_array($folders)) {
28 //dbx_debug("#Folders=",$folders);
29 foreach ($folders as $no => $record) {
30 $id='f_'.$record['id'];
31 $pa=$record['parent_id'];
32 //dbx_debug("Folder=($id) pa=($pa)");
33 $folder_matrix[$id]=$pa;
34 }
35 }
36 //dbx_debug("#Folders matrix=",$folder_matrix);
37 dbx()->set_modul_var('folder_matrix',$folder_matrix);
38 return $folder_matrix;
39 }
40
41
42 private function get_folder_level($folder,$root=0) {
43 $level=0;
44 $folder_matrix=$this->get_folder_matrix();
45
46 while ($folder != $root) :
47 $pa=$root;
48 $folder='f_'.$folder;
49 if (isset($folder_matrix[$folder])) $pa=$folder_matrix[$folder];
50 if ($pa != $root && $pa > 0) {
51 $level++;
52 $folder=$pa;
53 } else {
54 $root=$folder; // break
55 }
56 endwhile;
57
58 return $level;
59 }
60
61
62
63
64 private function get_folder_name($id) {
65 $folders=$this->_folders;
66 //dbx_debug("###Folders## id=($id) ",$folders);
67
68
69 $l=0; $folder = "(0) /";
70 if ($id) {
71 $folder_name='?';
72 if (isset($folders[$id])) {
73 $folder_name=$folders[$id];
74 }
75 $l=($this->get_folder_level($id,0) +1);
76 $folder = "($id) | $folder_name | ($l)";
77 }
78 return $folder;
79 }
80
81 public function run_body($content) {
82 $folder=0; $level=0; $sorter=''; $permalink='';
83 $record =$this->_record;
84
85 if (isset($record['parent_id'])) $folder =$record['id'];
86 if (isset($record['folder'])) $folder =$record['folder'];
87 if (isset($record['sorter'])) $sorter =$record['sorter'];
88
89 if ($folder) $level=$this->get_folder_level($folder);
90
91 if (!isset($record['parent_id'])) {
92 if (isset($record['folder'])) $record['folder_name'] = $this->get_folder_name($record['folder']);
93 }
94 $record['sort']=$sorter;
95 $record['l'] =($level +1); // root is 0
96 $record['perma']=($permalink);
97 $this->_record=$record;
98 return $content;
99 }
100}
101
102
103
104
105// - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
107
108 Public $oTPL;
109
110 public function __construct() {
111 $this->oTPL = dbx()->get_system_obj('dbxTPL');
112 }
113
114
115 function make_select_data($data,$id,$name,$parent='') {
116 $select_data=array();
117 $select_data[0]='/ ';
118 if (is_array($data)) {
119 foreach ($data as $no => $record) {
120 if (is_array($record)) {
121 if ( isset($record[$id]) && isset($record[$name]) ) {
122 $xid=$record[$id];
123 $xna=$record[$name];
124 if ($parent && isset($record[$parent])) {
125 $pid=$record[$parent];
126 if ($pid==$xid) $pid=0;
127 if ($pid) {
128 while ($pid > 0) {
129 foreach ($data as $no2 => $rec2) {
130 if ($rec2[$id]==$pid) {
131 $xna=$rec2[$name].' -> '.$xna;
132 $pid=$rec2[$parent];
133 break;
134 } // == $pid
135 } //foreach
136 } // while $pid > 0
137 } // $pid
138 } // parent
139 $xna='/ -> '.$xna;
140 $select_data[$xid]=$xna;
141 } // isset $id && $name
142 } else {
143 // ?
144 }
145 }
146 }
147 return $select_data;
148 }
149
150
151
152
153 Private function delete_data($id) {
154 //dbx_debug("DELETE Record ID($id)");
155 return 1;
156 }
157
158
159 private function report_content_tree() {
160 //$content="Start<br>";
161 //$content.=$this->get_content_tree();
162 //$content.="<br>Ende";
163
164
165 // TreeView einschalten
166 $db = dbx()->get_system_obj('dbxDB');
167 $lng = dbx()->get_modul_var('lng','de');
168
169 $tab_content=dbx_lng_name('content', $lng);
170 $tab_folder = dbx_lng_name('content_folder', $lng);
171
172 $data_folder=$db->select($tab_folder);
173
174 $data_folder=$this->make_select_data($data_folder,'id','name','parent_id');
175 //$content.=$modal;
176
177 $data=array();
178 $data['root']=dbx()->get_session_var('content_tree_root',0);
179
180 $oForm=dbx()->get_system_obj('dbxForm');
181 $oForm->init('form-content-tree');
182
183 $oForm->_action='?dbx_modul=dbxContent_admin&dbx_run1=tree';
184 $oForm->_data=$data;
185 $oForm->_fld_change_state='*'; // move value allways to _post
186 $oForm->add_fld('root','select-single-label',rules: 'array|int', label: 'Auswahl Content Root',options: $data_folder);
187 $oForm->add_obj('submit','dbx|button-submit',label: 'Auswahl');
188
189
190 if($oForm->submit()) {
191 //dbx_debug("#FORM-SUBMIT#");
192 if(!$oForm->errors()) { // submit && no errors // we ignore warnings
193 //dbx_debug("###_POST=",$oForm->_post,$_POST);
194 $root=$oForm->_post['root'];
195 dbx()->set_session_var('content_tree_root',$root);
196 //dbx_debug("Set-session root-val=($root)");
197 }
198 }
199
200 $root=dbx()->get_session_var('content_tree_root',0);
201 //dbx_debug("get-session root-val=($root)");
202 dbx()->set_modul_var('fid',$root);
203
204 $folder=$this->report_content_folder(1);
205 $tree =$this->get_content_tree($root);
206 $files =$this->report_content_files();
207
208 $oForm->add_obj('folder','obj-value',$folder);
209
210 //dbx_debug("FOLDER",$folder);
211
212
213 $oForm->add_obj('tree' ,'obj-value',$tree);
214 $oForm->add_obj('files','obj-value',$files);
215 $oForm->add_obj('modal','obj-value',$modal);
216
217 $oForm->add_js_call('','tree');
218 $content=$oForm->run();
219
220 return $content;
221 }
222
223
224
225 private function get_content_tree($root) {
226 $i = dbx()->next_id();
227 dbx()->set_modul_var('fid',$root);
228 $tree=$this->oTPL->get_tpl('modul','report-content-tree',"fid=$root&l=0",'htm',$i);
229 //dbx_debug("#Content-Tree Root=($root) i=($i)",$tree);
230
231 return $tree;
232 }
233
234
235
236 private function report_content_flat() {
237 $oDB = dbx()->get_system_obj('dbxDB');
238 $lng = dbx()->get_modul_var('lng','de');
239 $rid = dbx()->get_modul_var('rid',0,'int');
240
241 $tab_content=dbx_lng_name('content', $lng);
242 $tab_folder = dbx_lng_name('content_folder', $lng);
243 $tab_groups = 'dbxUser_groups';
244
245
246 $form_id ='Report-Content-flat';
247 $oReport = new dbxReport_Content();
248 $oReport->init($form_id);
249
250
251 $do=dbx()->get_modul_var('dbx_run3');
252 if ($do == 'row_edit' && $rid) {
253 $obj=dbx()->get_include_obj('dbxContent_view');
254 $modal_content=$obj->run();
255 return $modal_content;
256
257 }
258 if ($do == 'row_delete' && $rid) {
259 $ok=$oDB->delete($tab_content,$rid);
260 if ( $ok) $oReport->_msg_success = 'Zeile gelöscht';
261 if (!$ok) $oReport->_msg_error = 'Zeile konnte nicht gelöscht werden';
262 }
263
264
265 $tab_content=dbx_lng_name('content', $lng);
266 $tab_folder = dbx_lng_name('content_folder', $lng);
267 $tab_groups = 'dbxUser_groups';
268
269 $folders=array(); $groups=array();
270 $data_folder=$oDB->select($tab_folder);
271 foreach ($data_folder as $no => $record) {
272 $id =$record['id'];
273 $folders[$id]=$record['name'];
274 }
275 $data_groups=$oDB->select($tab_groups);
276 foreach ($data_groups as $no => $record) {
277 $id =$record['name'];
278 $groups[$id] =$record['description'];
279 }
280
281 $oReport->_folders =$folders; // speed up
282 $oReport->_groups = $groups; // speed up
283 //dbx_debug("##FOLDERS##",$folders);
284
285
286
287 $flds['id'] ='ID';
288 $flds['permalink'] ='Permalink';
289 $flds['title'] ='Titel';
290 $flds['folder_name']='ID | Ordner | Level';
291 $flds['group_read'] ='Zugriff';
292 $flds['activ'] ='Aktiv';
293 $flds['hits'] ='Hits';
294
295 $options_rsort['id'] ='ID';
296 $options_rsort['folder'] ='Ortner';
297 $options_rsort['title'] ='Titel';
298
299 $data['dbx_rrows']= 10;
300 $data['dbx_rsort']='id';
301
302 //$oReport->set_form_id($form_id,$data);
303 $oReport->_data = $data;
304 $oReport->_action ='?dbx_modul=dbxContent_admin&dbx_run1=flat'; // set_action() cid 'new' or record.id
305 $oReport->_options_rsort = $options_rsort;
306 $oReport->_but_pagination = 9;
307 $oReport->_create_row_select= 1;
308 $oReport->_create_row_edit = 1;
309 $oReport->_create_row_delete= 1;
310
311 $oReport->_msg_info ='';
312
313 $oReport->add_action('rows_delete' ,'action_button_delete' ,'&dbx_run2=multi_delete');
314 $oReport->add_action('rows_activate' ,'action_button_activate' ,'&dbx_run2=multi_activate');
315 $oReport->add_action('rows_deactivate','action_button_deactivate','&dbx_run2=multi_deactivate');
316
317
318
319
320
321 if($oReport->submit()) {
322 if(!$oReport->errors()) { // submit && no errors
323 $work=$oReport->get_post('dbx_run2');
324 if ($work == 'multi_delete') {
325 $ids=$oReport->get_post('Report-content_select','','array|int');
326 if (is_array($ids)) {
327 foreach ($ids as $no => $id) {
328 $ok=$this->delete_data($id);
329 }
330 }
331 }
332 $oReport->_msg_success = '';
333 } else {
334 $oReport->_msg_error = 'Prüfen sie bitte ihre Eingaben';
335 }
336 }
337
338 // get all selections and order
339 $rgroup='';
340 $rwhere=$oReport->get_sel('dbx_rwhere','');
341 $rrows =$oReport->get_sel('dbx_rrows',10);
342 $rpos =$oReport->get_sel('dbx_rpos',0);
343 $rsort =$oReport->get_sel('dbx_rsort','id');
344 $rdesc =$oReport->get_sel('dbx_rdesc','ASC');
345 // Custom select
346 if ($rwhere) $rwhere="title LIKE '%$rwhere%' ";
347 // get db-Data
348 $flds2=$flds; // folder ist nicht in flds, da folder_name (generic)
349 $flds2['folder']='folder';
350 $oReport->_rcount=$oDB->count($tab_content,$rwhere);
351 $oReport->_rdata =$oDB->select($tab_content,$rwhere,$flds2,$rsort,$rdesc,$rgroup,$rrows,$rpos);
352 // run Report
353 $content=$oReport->run(1,$flds,'table');
354
355 //$content= (str_replace('dbxAjax','',$content));
356
357 return $content;
358 } // report_content_flat()
359
360
361
362
363 private function report_content_folder($root=0) {
364 $content = '';
365
366 $oReport = new dbxReport_Content;
367 $db = dbx()->get_system_obj('dbxDB');
368
369 $lng = dbx()->get_system_var('dbx_lng','de');
370
371 $tab_content=dbx_lng_name('content', $lng);
372 $tab_folder = dbx_lng_name('content_folder', $lng);
373
374 $folder =dbx()->get_modul_var('fid',0,'int');
375
376 $flds['id'] ='ID';
377 $flds['parent_id'] ='Parent';
378 $flds['name'] ='Ordner';
379 $flds['group_read'] ='Lesen';
380 $flds['group_write'] ='Schreiben';
381 $flds['group_delete'] ='Löschen';
382
383 $data['dbx_rrows']= 1000;
384 $data['dbx_rsort']='name';
385
386 if (!$root) $where_folder = "parent_id = $folder";
387 if ( $root) $where_folder = "id = $folder";
388
389
390 if ( $folder) $rdata =$db->select($tab_folder,$where_folder,'*','name');
391 if (!$folder) {
392 $rdata[0]['id'] =0;
393 $rdata[0]['name']='/ (root)';
394 }
395 //$rdata =$this->get_folder_level($rdata,$folder);
396 //dbx_debug("Root=($root) Folder=($folder) where=($where_folder)",$rdata);
397
398 $oReport->init('report-content-folder');
399 $oReport->_data = $data;
400 $oReport->_rdata = $rdata;
401 $oReport->_rcount= count($rdata);
402 $oReport->_create_sel_flds=0;
403
404 if ($oReport->_rcount) {
405 $content=$oReport->run(0);
406 }
407 //$content= str_replace('{m}' ,$m ,$content);
408 return $content;
409 }
410
411
412 private function report_content_files() {
413 //$m = dbx()->get_system_var('modal_m',0);
414 $db = dbx()->get_system_obj('dbxDB');
415 $lng = dbx()->get_modul_var('lng','de'); // sysvar ?
416
417 $tab_content=dbx_lng_name('content', $lng);
418 $folder=dbx()->get_modul_var('fid',-1,'int');
419 if ($folder < 0) return 'no access';
420
421 $flds['id'] ='ID';
422 $flds['sorter'] ='Seq';
423 $flds['title'] ='Titel';
424 $flds['folder'] ='Ordner';
425 $flds['permalink'] ='Permalink';
426
427 $data['dbx_rrows']= 25;
428 $data['dbx_rsort']='sorter';
429
430 $rwhere = "folder = $folder";
431 $rcount=$db->count($tab_content,$rwhere);
432 $rdata =$db->select($tab_content,$rwhere,$flds,'sorter');
433 //$rdata =$this->get_folder_level($rdata,$folder);
434
435 $oReport = new dbxReport_Content; // dbx()->get_system_obj('dbxReport','new');
436 $oReport->init('report-content-files');
437 $oReport->_data=$data;
438 $oReport->_create_sel_flds=0;
439 $oReport->_rcount=$rcount;
440 $oReport->_rdata =$rdata;
441
442
443 if ($rcount) {
444 $oReport->add_obj('folder_file','modul|folder_files');
445 $content="<li>($rcount) Einträge Ordner ($folder)</li>";
446 $content=$oReport->run(0,$flds);
447 } else {
448 $content="<ul><li>Keine Einträge Ordner ($folder)</li></ul>";
449 }
450
451 //$content= str_replace('{m}' ,$m ,$content);
452
453 return $content;
454 }
455
456
457
458 private function report_content_folder_files() {
459 $content='';
460 $oReport = new dbxReport_Content;
461 $db = dbx()->get_system_obj('dbxDB');
462
463 $lng = dbx()->get_system_var('dbx_lng','de'); // sysvar ?
464
465 $tab_content=dbx_lng_name('content', $lng);
466 $tab_folder = dbx_lng_name('content_folder', $lng);
467
468 $root =dbx()->get_modul_var('fid',0,'int');
469 $folder=dbx()->get_system_var('tree_folder',0);
470
471 $folder=0;
472
473 //dbx()->set_modul_var('tree_folder',0); //only once
474
475 //dbx()->set_system_var('tree_root',$root);
476
477 $flds['id'] ='ID';
478 $flds['parent_id'] ='Parent';
479 $flds['name'] ='Ordner';
480 $flds['sorter'] ='Seq';
481 $flds['group_read'] ='Lesen';
482
483 $data['dbx_rrows']= 1000;
484 $data['dbx_rsort']='name';
485
486 if (!$folder) $where_folder = "parent_id = $root";
487 if ( $folder) $where_folder = "id = $root";
488
489 $data_folder = $db->select($tab_folder,$where_folder,'*','name');
490 //dbx_debug("Folder=($folder) where=($where_folder)",$data_folder);
491
492 //$level = $this->get_folder_level($data_folder[0][],$root);
493
494 $oReport->init('report-content-folder-files');
495 $oReport->_data = $data;
496 $oReport->_rdata = $data_folder;
497 $oReport->_rcount= count($data_folder);
498 $oReport->_create_sel_flds=0;
499 //$oReport->add_rep('fid',$root);
500
501 if ($oReport->_rcount) {
502 $content=$oReport->run(0,$flds);
503 //dbx_debug("report_content_folder_files root=($root) ");
504
505
506 }
507 return $content;
508 }
509 // Helper function for tree-view aktions add and delete_data
510
511 public function add_content() {
512 $rid=dbx()->get_modul_var('rid',0);
513 if ($rid) { // folder id
514 $db = dbx()->get_system_obj('dbxDB');
515 $lng = dbx()->get_modul_var('lng','de');
516
517 $tab_content=dbx_lng_name('content', $lng);
518 $tab_folder = dbx_lng_name('content_folder', $lng);
519
520 $data['id']=0;
521 $data['folder']=$rid;
522 $data['title'] ='Neuer Content';
523 $data['permalink'] = dbxContent_permalink::build($db, $tab_folder, $rid, $data['title']);
524 $data['group_read'] ='admin';
525 $data['template'] ='c-content';
526 $ok=$db->save($tab_content,$data,0);
527 }
528 }
529
530
531 public function del_content() {
532 $rid=dbx()->get_modul_var('rid',0);
533 //dbx_debug("TREE-DEL-Content=($rid)");
534
535 if ($rid) { // folder id
536 $db = dbx()->get_system_obj('dbxDB');
537 $lng = dbx()->get_modul_var('lng','de');
538 $tab_content=dbx_lng_name('content', $lng);
539
540 $ok=$db->delete($tab_content,$rid,1);
541 $error=$db->_error;
542 $query=$db->_query;
543
544 //dbx_debug("DB-Error=($error) \n Query=($query)");
545
546
547
548 //dbx_debug("del=($ok)");
549 }
550 }
551
552
553
554 // ----------------------------------------------------
555
556 public function run($action='flat') {
557 $content='Modul dbxContent_admin action('.dbx()->html($action).') not defined';
558 //dbx_Debug("dbxContent_list=($action)");
559 switch ($action) {
560 case 'flat':
561 $content=$this->report_content_flat();
562 break;
563 case 'tree': // alias for 'folder_files'
564 $content=$this->report_content_tree();
565 break;
566 case 'folder':
567 $content=$this->report_content_folder();
568 break;
569 case 'files':
570 $content=$this->report_content_files();
571 break;
572 case 'folder_files':
573 $content=$this->report_content_folder_files();
574 break;
575
576 }
577 return $content;
578 } // run
579
580} // class
581
582
583
584?>
init($fid, $tpl='', $first_page_lines=-1, $next_page_lines=-1, $current_line=-1)
$_record
Aktueller Datensatz im Body-Lauf.
make_select_data($data, $id, $name, $parent='')
DBX schema administration.