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