16781c68dSSzymon Olewniczak<?php 2*d6d97f60SAnna Dabrowska 36781c68dSSzymon Olewniczaknamespace dokuwiki\plugin\struct\types; 46781c68dSSzymon Olewniczak 56781c68dSSzymon Olewniczakuse dokuwiki\plugin\struct\meta\QueryBuilder; 66781c68dSSzymon Olewniczakuse dokuwiki\plugin\struct\meta\QueryBuilderWhere; 76781c68dSSzymon Olewniczak 86781c68dSSzymon Olewniczak//We prefixing this type with "Abstract" to hide it in Schema Editor 9*d6d97f60SAnna Dabrowskaclass AutoSummary extends AbstractBaseType 10*d6d97f60SAnna Dabrowska{ 116781c68dSSzymon Olewniczak /** 126781c68dSSzymon Olewniczak * When handling `%lastsummary%` get the data from the `titles` table instead the `data_` table. 136781c68dSSzymon Olewniczak * 146781c68dSSzymon Olewniczak * @param QueryBuilder $QB 156781c68dSSzymon Olewniczak * @param string $tablealias 166781c68dSSzymon Olewniczak * @param string $colname 176781c68dSSzymon Olewniczak * @param string $alias 186781c68dSSzymon Olewniczak */ 19*d6d97f60SAnna Dabrowska public function select(QueryBuilder $QB, $tablealias, $colname, $alias) 20*d6d97f60SAnna Dabrowska { 216781c68dSSzymon Olewniczak $rightalias = $QB->generateTableAlias(); 226781c68dSSzymon Olewniczak $QB->addLeftJoin($tablealias, 'titles', $rightalias, "$tablealias.pid = $rightalias.pid"); 236781c68dSSzymon Olewniczak $QB->addSelectStatement("$rightalias.lastsummary", $alias); 246781c68dSSzymon Olewniczak } 256781c68dSSzymon Olewniczak 266781c68dSSzymon Olewniczak /** 276781c68dSSzymon Olewniczak * When sorting `%lastsummary%`, then sort the data from the `titles` table instead the `data_` table. 286781c68dSSzymon Olewniczak * 296781c68dSSzymon Olewniczak * @param QueryBuilder $QB 306781c68dSSzymon Olewniczak * @param string $tablealias 316781c68dSSzymon Olewniczak * @param string $colname 326781c68dSSzymon Olewniczak * @param string $order 336781c68dSSzymon Olewniczak */ 34*d6d97f60SAnna Dabrowska public function sort(QueryBuilder $QB, $tablealias, $colname, $order) 35*d6d97f60SAnna Dabrowska { 366781c68dSSzymon Olewniczak $rightalias = $QB->generateTableAlias(); 376781c68dSSzymon Olewniczak $QB->addLeftJoin($tablealias, 'titles', $rightalias, "$tablealias.pid = $rightalias.pid"); 386781c68dSSzymon Olewniczak $QB->addOrderBy("$rightalias.lastsummary $order"); 396781c68dSSzymon Olewniczak } 406781c68dSSzymon Olewniczak 416781c68dSSzymon Olewniczak /** 426781c68dSSzymon Olewniczak * When using `%lastsummary%`, we need to compare against the `title` table. 436781c68dSSzymon Olewniczak * 446781c68dSSzymon Olewniczak * @param QueryBuilderWhere $add 456781c68dSSzymon Olewniczak * @param string $tablealias 466781c68dSSzymon Olewniczak * @param string $colname 476781c68dSSzymon Olewniczak * @param string $comp 486781c68dSSzymon Olewniczak * @param string|\string[] $value 496781c68dSSzymon Olewniczak * @param string $op 506781c68dSSzymon Olewniczak */ 51*d6d97f60SAnna Dabrowska public function filter(QueryBuilderWhere $add, $tablealias, $colname, $comp, $value, $op) 52*d6d97f60SAnna Dabrowska { 536781c68dSSzymon Olewniczak $QB = $add->getQB(); 546781c68dSSzymon Olewniczak $rightalias = $QB->generateTableAlias(); 556781c68dSSzymon Olewniczak $QB->addLeftJoin($tablealias, 'titles', $rightalias, "$tablealias.pid = $rightalias.pid"); 566781c68dSSzymon Olewniczak 576781c68dSSzymon Olewniczak // compare against page and title 586781c68dSSzymon Olewniczak $sub = $add->where($op); 596781c68dSSzymon Olewniczak $pl = $QB->addValue($value); 606781c68dSSzymon Olewniczak $sub->whereOr("$rightalias.lastsummary $comp $pl"); 616781c68dSSzymon Olewniczak } 626781c68dSSzymon Olewniczak} 63