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