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