xref: /plugin/struct/types/AutoSummary.php (revision 7234bfb14e712ff548d9266ef32fdcc8eaf2d04e)
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