xref: /plugin/structpublish/meta/Revision.php (revision e394901a0f7c5b3f8d056c0f4d754d974f4f8413)
1c2f8a3c4SAnna Dabrowska<?php
2c2f8a3c4SAnna Dabrowska
3c2f8a3c4SAnna Dabrowskanamespace dokuwiki\plugin\structpublish\meta;
4c2f8a3c4SAnna Dabrowska
5*e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\AccessTable;
6*e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\AccessTableSerial;
7*e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\ConfigParser;
8*e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\Schema;
9*e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\SearchConfig;
10*e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\Value;
11*e394901aSAnna Dabrowska
12c2f8a3c4SAnna Dabrowskaclass Revision
13c2f8a3c4SAnna Dabrowska{
14c2f8a3c4SAnna Dabrowska    const STATUS_DRAFT = 'draft';
15*e394901aSAnna Dabrowska    const STATUS_REVIEWED = 'reviewed';
16c2f8a3c4SAnna Dabrowska    const STATUS_PUBLISHED = 'published';
17c2f8a3c4SAnna Dabrowska
18*e394901aSAnna Dabrowska    /** @var \helper_plugin_sqlite */
19c2f8a3c4SAnna Dabrowska    protected $sqlite;
203449f9ceSAnna Dabrowska    protected $schemas;
21c2f8a3c4SAnna Dabrowska    protected $id;
22c2f8a3c4SAnna Dabrowska    protected $rev;
23c2f8a3c4SAnna Dabrowska    protected $status;
24*e394901aSAnna Dabrowska    protected $version;
25c2f8a3c4SAnna Dabrowska    protected $user;
26*e394901aSAnna Dabrowska    protected $date;
27c2f8a3c4SAnna Dabrowska
28c2f8a3c4SAnna Dabrowska    /**
29c2f8a3c4SAnna Dabrowska     * @param $sqlite
303449f9ceSAnna Dabrowska     * @param string $id
313449f9ceSAnna Dabrowska     * @param int $rev
32c2f8a3c4SAnna Dabrowska     */
333449f9ceSAnna Dabrowska    public function __construct($sqlite, $id, $rev)
34c2f8a3c4SAnna Dabrowska    {
35c2f8a3c4SAnna Dabrowska        $this->sqlite = $sqlite;
36c2f8a3c4SAnna Dabrowska        $this->id = $id;
37c2f8a3c4SAnna Dabrowska        $this->rev = $rev;
38c2f8a3c4SAnna Dabrowska
39*e394901aSAnna Dabrowska        $schema = new Schema('structpublish');
40*e394901aSAnna Dabrowska        $statusCol = $schema->findColumn('status');
41*e394901aSAnna Dabrowska        $versionCol = $schema->findColumn('version');
42*e394901aSAnna Dabrowska        $userCol = $schema->findColumn('user');
43*e394901aSAnna Dabrowska        $dateCol = $schema->findColumn('date');
443449f9ceSAnna Dabrowska
45*e394901aSAnna Dabrowska        /** @var Value[] $values */
46*e394901aSAnna Dabrowska        $values = $this->getCoreData($id);
47*e394901aSAnna Dabrowska
48*e394901aSAnna Dabrowska        if (!empty($values)) {
49*e394901aSAnna Dabrowska            $this->status = $values[$statusCol->getColref() - 1]->getRawValue();
50*e394901aSAnna Dabrowska            $this->version = $values[$versionCol->getColref() - 1]->getRawValue();
51*e394901aSAnna Dabrowska            $this->user = $values[$userCol->getColref() - 1]->getRawValue();
52*e394901aSAnna Dabrowska            $this->date = $values[$dateCol->getColref() - 1]->getRawValue();
533449f9ceSAnna Dabrowska        }
54c2f8a3c4SAnna Dabrowska    }
55c2f8a3c4SAnna Dabrowska
56c2f8a3c4SAnna Dabrowska    public function save()
57c2f8a3c4SAnna Dabrowska    {
58*e394901aSAnna Dabrowska        // drafts reference the latest version
59*e394901aSAnna Dabrowska        if ($this->status === self::STATUS_DRAFT) {
60*e394901aSAnna Dabrowska            //FIXME no rev yet
61*e394901aSAnna Dabrowska            $this->setVersion($this->getVersion());
62*e394901aSAnna Dabrowska        }
63*e394901aSAnna Dabrowska
643449f9ceSAnna Dabrowska        // TODO reset publish status of older revisions
653449f9ceSAnna Dabrowska
66*e394901aSAnna Dabrowska            $this->updateCoreData($this->id);
67c2f8a3c4SAnna Dabrowska    }
68c2f8a3c4SAnna Dabrowska
69c2f8a3c4SAnna Dabrowska    /**
703449f9ceSAnna Dabrowska     * @return int
71c2f8a3c4SAnna Dabrowska     */
72c2f8a3c4SAnna Dabrowska    public function getVersion()
73c2f8a3c4SAnna Dabrowska    {
74c2f8a3c4SAnna Dabrowska        return $this->version;
75c2f8a3c4SAnna Dabrowska    }
76c2f8a3c4SAnna Dabrowska
77c2f8a3c4SAnna Dabrowska    /**
783449f9ceSAnna Dabrowska     * @param int $version
79c2f8a3c4SAnna Dabrowska     */
80c2f8a3c4SAnna Dabrowska    public function setVersion($version): void
81c2f8a3c4SAnna Dabrowska    {
82c2f8a3c4SAnna Dabrowska        $this->version = $version;
83c2f8a3c4SAnna Dabrowska    }
84c2f8a3c4SAnna Dabrowska
85c2f8a3c4SAnna Dabrowska    /**
863449f9ceSAnna Dabrowska     * @return int
87c2f8a3c4SAnna Dabrowska     */
88c2f8a3c4SAnna Dabrowska    public function getRev()
89c2f8a3c4SAnna Dabrowska    {
90c2f8a3c4SAnna Dabrowska        return $this->rev;
91c2f8a3c4SAnna Dabrowska    }
92c2f8a3c4SAnna Dabrowska
93c2f8a3c4SAnna Dabrowska    /**
943449f9ceSAnna Dabrowska     * @param int $rev
95c2f8a3c4SAnna Dabrowska     */
96c2f8a3c4SAnna Dabrowska    public function setRev($rev): void
97c2f8a3c4SAnna Dabrowska    {
98c2f8a3c4SAnna Dabrowska        $this->rev = $rev;
99c2f8a3c4SAnna Dabrowska    }
100c2f8a3c4SAnna Dabrowska
101c2f8a3c4SAnna Dabrowska    /**
1023449f9ceSAnna Dabrowska     * @return string
103c2f8a3c4SAnna Dabrowska     */
104c2f8a3c4SAnna Dabrowska    public function getStatus()
105c2f8a3c4SAnna Dabrowska    {
106*e394901aSAnna Dabrowska        return $this->status;
107c2f8a3c4SAnna Dabrowska    }
108c2f8a3c4SAnna Dabrowska
109c2f8a3c4SAnna Dabrowska    /**
1103449f9ceSAnna Dabrowska     * @param string $status
111c2f8a3c4SAnna Dabrowska     */
112c2f8a3c4SAnna Dabrowska    public function setStatus($status): void
113c2f8a3c4SAnna Dabrowska    {
114c2f8a3c4SAnna Dabrowska        $this->status = $status;
115c2f8a3c4SAnna Dabrowska    }
116c2f8a3c4SAnna Dabrowska
117c2f8a3c4SAnna Dabrowska    /**
1183449f9ceSAnna Dabrowska     * @return string
119c2f8a3c4SAnna Dabrowska     */
120c2f8a3c4SAnna Dabrowska    public function getUser()
121c2f8a3c4SAnna Dabrowska    {
122c2f8a3c4SAnna Dabrowska        return $this->user;
123c2f8a3c4SAnna Dabrowska    }
124c2f8a3c4SAnna Dabrowska
125c2f8a3c4SAnna Dabrowska    /**
1263449f9ceSAnna Dabrowska     * @param string $user
127c2f8a3c4SAnna Dabrowska     */
128c2f8a3c4SAnna Dabrowska    public function setUser($user): void
129c2f8a3c4SAnna Dabrowska    {
130c2f8a3c4SAnna Dabrowska        $this->user = $user;
131c2f8a3c4SAnna Dabrowska    }
1323449f9ceSAnna Dabrowska
133*e394901aSAnna Dabrowska    public function getDate()
134*e394901aSAnna Dabrowska    {
135*e394901aSAnna Dabrowska        return $this->date;
136*e394901aSAnna Dabrowska    }
137*e394901aSAnna Dabrowska
138*e394901aSAnna Dabrowska    public function setDate($time)
139*e394901aSAnna Dabrowska    {
140*e394901aSAnna Dabrowska        $this->date = date('Y-m-d', $time);
141*e394901aSAnna Dabrowska    }
142*e394901aSAnna Dabrowska
1433449f9ceSAnna Dabrowska    /**
1443449f9ceSAnna Dabrowska     * Update publish status in the core table
1453449f9ceSAnna Dabrowska     */
146*e394901aSAnna Dabrowska    protected function updateCoreData($pid, $rid = 0)
1473449f9ceSAnna Dabrowska    {
148*e394901aSAnna Dabrowska        $data = [
149*e394901aSAnna Dabrowska            'status' => $this->status,
150*e394901aSAnna Dabrowska            'user' => $this->user,
151*e394901aSAnna Dabrowska            'date' => $this->date,
152*e394901aSAnna Dabrowska            'revision' => $this->rev,
153*e394901aSAnna Dabrowska            'version' => $this->version,
154*e394901aSAnna Dabrowska        ];
155*e394901aSAnna Dabrowska        $access = AccessTable::getSerialAccess('structpublish', $pid, $rid);
156*e394901aSAnna Dabrowska        $access->saveData($data);
157*e394901aSAnna Dabrowska    }
158*e394901aSAnna Dabrowska
159*e394901aSAnna Dabrowska    public function getCoreData($id)
160*e394901aSAnna Dabrowska    {
161*e394901aSAnna Dabrowska        $lines = [
162*e394901aSAnna Dabrowska            'schema: structpublish',
163*e394901aSAnna Dabrowska            'cols: *',
164*e394901aSAnna Dabrowska            'filter: %pageid% = $ID$'
165*e394901aSAnna Dabrowska        ];
166*e394901aSAnna Dabrowska        $parser = new ConfigParser($lines);
167*e394901aSAnna Dabrowska        $config = $parser->getConfig();
168*e394901aSAnna Dabrowska        $search = new SearchConfig($config);
169*e394901aSAnna Dabrowska        $data = $search->execute();
170*e394901aSAnna Dabrowska        if (!empty($data)) {
171*e394901aSAnna Dabrowska            return $data[array_key_last($data)];
172*e394901aSAnna Dabrowska        }
173*e394901aSAnna Dabrowska        return [];
1743449f9ceSAnna Dabrowska    }
175c2f8a3c4SAnna Dabrowska}
176