1<?php 2 3namespace dokuwiki\plugin\struct\types; 4 5use dokuwiki\plugin\struct\meta\QueryBuilder; 6use dokuwiki\plugin\struct\meta\QueryBuilderWhere; 7 8//We prefixing this type with "Abstract" to hide it in Schema Editor 9class AutoSummary extends AbstractBaseType 10{ 11 12 /** 13 * When handling `%lastsummary%` get the data from the `titles` table instead the `data_` table. 14 * 15 * @param QueryBuilder $QB 16 * @param string $tablealias 17 * @param string $colname 18 * @param string $alias 19 */ 20 public function select(QueryBuilder $QB, $tablealias, $colname, $alias) 21 { 22 $rightalias = $QB->generateTableAlias(); 23 $QB->addLeftJoin($tablealias, 'titles', $rightalias, "$tablealias.pid = $rightalias.pid"); 24 $QB->addSelectStatement("$rightalias.lastsummary", $alias); 25 } 26 27 /** 28 * When sorting `%lastsummary%`, then sort the data from the `titles` table instead the `data_` table. 29 * 30 * @param QueryBuilder $QB 31 * @param string $tablealias 32 * @param string $colname 33 * @param string $order 34 */ 35 public function sort(QueryBuilder $QB, $tablealias, $colname, $order) 36 { 37 $rightalias = $QB->generateTableAlias(); 38 $QB->addLeftJoin($tablealias, 'titles', $rightalias, "$tablealias.pid = $rightalias.pid"); 39 $QB->addOrderBy("$rightalias.lastsummary $order"); 40 } 41 42 /** 43 * When using `%lastsummary%`, we need to compare against the `title` table. 44 * 45 * @param QueryBuilderWhere $add 46 * @param string $tablealias 47 * @param string $colname 48 * @param string $comp 49 * @param string|\string[] $value 50 * @param string $op 51 */ 52 public function filter(QueryBuilderWhere $add, $tablealias, $colname, $comp, $value, $op) 53 { 54 $QB = $add->getQB(); 55 $rightalias = $QB->generateTableAlias(); 56 $QB->addLeftJoin($tablealias, 'titles', $rightalias, "$tablealias.pid = $rightalias.pid"); 57 58 // compare against page and title 59 $sub = $add->where($op); 60 $pl = $QB->addValue($value); 61 $sub->whereOr("$rightalias.lastsummary $comp $pl"); 62 return; 63 } 64} 65