xref: /plugin/structpublish/meta/Revision.php (revision 3231ebae4b1306b9f8a4137b83017a39a16e79eb)
1c2f8a3c4SAnna Dabrowska<?php
2c2f8a3c4SAnna Dabrowska
3c2f8a3c4SAnna Dabrowskanamespace dokuwiki\plugin\structpublish\meta;
4c2f8a3c4SAnna Dabrowska
5e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\ConfigParser;
6e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\Schema;
7e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\SearchConfig;
8e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\Value;
9e394901aSAnna Dabrowska
10c2f8a3c4SAnna Dabrowskaclass Revision
11c2f8a3c4SAnna Dabrowska{
12c2f8a3c4SAnna Dabrowska    const STATUS_DRAFT = 'draft';
13*3231ebaeSAnna Dabrowska    const STATUS_APPROVED = 'approved';
14c2f8a3c4SAnna Dabrowska    const STATUS_PUBLISHED = 'published';
15c2f8a3c4SAnna Dabrowska
16e394901aSAnna Dabrowska    /** @var \helper_plugin_sqlite */
17c2f8a3c4SAnna Dabrowska    protected $sqlite;
183449f9ceSAnna Dabrowska    protected $schemas;
19c2f8a3c4SAnna Dabrowska    protected $id;
20c2f8a3c4SAnna Dabrowska    protected $rev;
21c2f8a3c4SAnna Dabrowska    protected $status;
22e394901aSAnna Dabrowska    protected $version;
23c2f8a3c4SAnna Dabrowska    protected $user;
24e394901aSAnna Dabrowska    protected $date;
25c2f8a3c4SAnna Dabrowska
26c2f8a3c4SAnna Dabrowska    /**
27c2f8a3c4SAnna Dabrowska     * @param $sqlite
283449f9ceSAnna Dabrowska     * @param string $id
293449f9ceSAnna Dabrowska     * @param int $rev
30c2f8a3c4SAnna Dabrowska     */
313449f9ceSAnna Dabrowska    public function __construct($sqlite, $id, $rev)
32c2f8a3c4SAnna Dabrowska    {
33c2f8a3c4SAnna Dabrowska        $this->sqlite = $sqlite;
34c2f8a3c4SAnna Dabrowska        $this->id = $id;
35c2f8a3c4SAnna Dabrowska        $this->rev = $rev;
36c2f8a3c4SAnna Dabrowska
37e394901aSAnna Dabrowska        $schema = new Schema('structpublish');
38e394901aSAnna Dabrowska        $statusCol = $schema->findColumn('status');
39e394901aSAnna Dabrowska        $versionCol = $schema->findColumn('version');
40e394901aSAnna Dabrowska        $userCol = $schema->findColumn('user');
41e394901aSAnna Dabrowska        $dateCol = $schema->findColumn('date');
423449f9ceSAnna Dabrowska
43e394901aSAnna Dabrowska        /** @var Value[] $values */
44e394901aSAnna Dabrowska        $values = $this->getCoreData($id);
45e394901aSAnna Dabrowska
46e394901aSAnna Dabrowska        if (!empty($values)) {
47e394901aSAnna Dabrowska            $this->status = $values[$statusCol->getColref() - 1]->getRawValue();
48e394901aSAnna Dabrowska            $this->version = $values[$versionCol->getColref() - 1]->getRawValue();
49e394901aSAnna Dabrowska            $this->user = $values[$userCol->getColref() - 1]->getRawValue();
50e394901aSAnna Dabrowska            $this->date = $values[$dateCol->getColref() - 1]->getRawValue();
513449f9ceSAnna Dabrowska        }
52c2f8a3c4SAnna Dabrowska    }
53c2f8a3c4SAnna Dabrowska
54c2f8a3c4SAnna Dabrowska    public function save()
55c2f8a3c4SAnna Dabrowska    {
56e394901aSAnna Dabrowska        // drafts reference the latest version
57e394901aSAnna Dabrowska        if ($this->status === self::STATUS_DRAFT) {
58e394901aSAnna Dabrowska            //FIXME no rev yet
59e394901aSAnna Dabrowska            $this->setVersion($this->getVersion());
60e394901aSAnna Dabrowska        }
61e394901aSAnna Dabrowska
623449f9ceSAnna Dabrowska        // TODO reset publish status of older revisions
633449f9ceSAnna Dabrowska
64e394901aSAnna Dabrowska            $this->updateCoreData($this->id);
65c2f8a3c4SAnna Dabrowska    }
66c2f8a3c4SAnna Dabrowska
67c2f8a3c4SAnna Dabrowska    /**
683449f9ceSAnna Dabrowska     * @return int
69c2f8a3c4SAnna Dabrowska     */
70c2f8a3c4SAnna Dabrowska    public function getVersion()
71c2f8a3c4SAnna Dabrowska    {
72*3231ebaeSAnna Dabrowska        return (int)$this->version;
73c2f8a3c4SAnna Dabrowska    }
74c2f8a3c4SAnna Dabrowska
75c2f8a3c4SAnna Dabrowska    /**
763449f9ceSAnna Dabrowska     * @param int $version
77c2f8a3c4SAnna Dabrowska     */
78c2f8a3c4SAnna Dabrowska    public function setVersion($version): void
79c2f8a3c4SAnna Dabrowska    {
80c2f8a3c4SAnna Dabrowska        $this->version = $version;
81c2f8a3c4SAnna Dabrowska    }
82c2f8a3c4SAnna Dabrowska
83c2f8a3c4SAnna Dabrowska    /**
843449f9ceSAnna Dabrowska     * @return int
85c2f8a3c4SAnna Dabrowska     */
86c2f8a3c4SAnna Dabrowska    public function getRev()
87c2f8a3c4SAnna Dabrowska    {
88c2f8a3c4SAnna Dabrowska        return $this->rev;
89c2f8a3c4SAnna Dabrowska    }
90c2f8a3c4SAnna Dabrowska
91c2f8a3c4SAnna Dabrowska    /**
923449f9ceSAnna Dabrowska     * @param int $rev
93c2f8a3c4SAnna Dabrowska     */
94c2f8a3c4SAnna Dabrowska    public function setRev($rev): void
95c2f8a3c4SAnna Dabrowska    {
96c2f8a3c4SAnna Dabrowska        $this->rev = $rev;
97c2f8a3c4SAnna Dabrowska    }
98c2f8a3c4SAnna Dabrowska
99c2f8a3c4SAnna Dabrowska    /**
1003449f9ceSAnna Dabrowska     * @return string
101c2f8a3c4SAnna Dabrowska     */
102c2f8a3c4SAnna Dabrowska    public function getStatus()
103c2f8a3c4SAnna Dabrowska    {
104e394901aSAnna Dabrowska        return $this->status;
105c2f8a3c4SAnna Dabrowska    }
106c2f8a3c4SAnna Dabrowska
107c2f8a3c4SAnna Dabrowska    /**
1083449f9ceSAnna Dabrowska     * @param string $status
109c2f8a3c4SAnna Dabrowska     */
110c2f8a3c4SAnna Dabrowska    public function setStatus($status): void
111c2f8a3c4SAnna Dabrowska    {
112c2f8a3c4SAnna Dabrowska        $this->status = $status;
113c2f8a3c4SAnna Dabrowska    }
114c2f8a3c4SAnna Dabrowska
115c2f8a3c4SAnna Dabrowska    /**
1163449f9ceSAnna Dabrowska     * @return string
117c2f8a3c4SAnna Dabrowska     */
118c2f8a3c4SAnna Dabrowska    public function getUser()
119c2f8a3c4SAnna Dabrowska    {
120c2f8a3c4SAnna Dabrowska        return $this->user;
121c2f8a3c4SAnna Dabrowska    }
122c2f8a3c4SAnna Dabrowska
123c2f8a3c4SAnna Dabrowska    /**
1243449f9ceSAnna Dabrowska     * @param string $user
125c2f8a3c4SAnna Dabrowska     */
126c2f8a3c4SAnna Dabrowska    public function setUser($user): void
127c2f8a3c4SAnna Dabrowska    {
128c2f8a3c4SAnna Dabrowska        $this->user = $user;
129c2f8a3c4SAnna Dabrowska    }
1303449f9ceSAnna Dabrowska
131e394901aSAnna Dabrowska    public function getDate()
132e394901aSAnna Dabrowska    {
133e394901aSAnna Dabrowska        return $this->date;
134e394901aSAnna Dabrowska    }
135e394901aSAnna Dabrowska
136e394901aSAnna Dabrowska    public function setDate($time)
137e394901aSAnna Dabrowska    {
138e394901aSAnna Dabrowska        $this->date = date('Y-m-d', $time);
139e394901aSAnna Dabrowska    }
140e394901aSAnna Dabrowska
1413449f9ceSAnna Dabrowska    /**
1423449f9ceSAnna Dabrowska     * Update publish status in the core table
1433449f9ceSAnna Dabrowska     */
144e394901aSAnna Dabrowska    protected function updateCoreData($pid, $rid = 0)
1453449f9ceSAnna Dabrowska    {
146e394901aSAnna Dabrowska        $data = [
147e394901aSAnna Dabrowska            'status' => $this->status,
148e394901aSAnna Dabrowska            'user' => $this->user,
149e394901aSAnna Dabrowska            'date' => $this->date,
150e394901aSAnna Dabrowska            'revision' => $this->rev,
151e394901aSAnna Dabrowska            'version' => $this->version,
152e394901aSAnna Dabrowska        ];
153*3231ebaeSAnna Dabrowska        $schema = new Schema('structpublish', 0);
154*3231ebaeSAnna Dabrowska        $access = new AccessTableStructpublish($schema, $pid, 0, $rid);
155e394901aSAnna Dabrowska        $access->saveData($data);
156e394901aSAnna Dabrowska    }
157e394901aSAnna Dabrowska
158e394901aSAnna Dabrowska    public function getCoreData($id)
159e394901aSAnna Dabrowska    {
160e394901aSAnna Dabrowska        $lines = [
161e394901aSAnna Dabrowska            'schema: structpublish',
162e394901aSAnna Dabrowska            'cols: *',
163e394901aSAnna Dabrowska            'filter: %pageid% = $ID$'
164e394901aSAnna Dabrowska        ];
165e394901aSAnna Dabrowska        $parser = new ConfigParser($lines);
166e394901aSAnna Dabrowska        $config = $parser->getConfig();
167e394901aSAnna Dabrowska        $search = new SearchConfig($config);
168e394901aSAnna Dabrowska        $data = $search->execute();
169e394901aSAnna Dabrowska        if (!empty($data)) {
170e394901aSAnna Dabrowska            return $data[array_key_last($data)];
171e394901aSAnna Dabrowska        }
172e394901aSAnna Dabrowska        return [];
1733449f9ceSAnna Dabrowska    }
174c2f8a3c4SAnna Dabrowska}
175