xref: /plugin/structpublish/meta/Revision.php (revision 3449f9ce9770752ac28fe0246797d80e125747d5)
1c2f8a3c4SAnna Dabrowska<?php
2c2f8a3c4SAnna Dabrowska
3c2f8a3c4SAnna Dabrowskanamespace dokuwiki\plugin\structpublish\meta;
4c2f8a3c4SAnna Dabrowska
5c2f8a3c4SAnna Dabrowskaclass Revision
6c2f8a3c4SAnna Dabrowska{
7c2f8a3c4SAnna Dabrowska    const STATUS_DRAFT = 'draft';
8c2f8a3c4SAnna Dabrowska    const STATUS_APPROVED = 'approved';
9c2f8a3c4SAnna Dabrowska    const STATUS_PUBLISHED = 'published';
10c2f8a3c4SAnna Dabrowska
11c2f8a3c4SAnna Dabrowska    protected $sqlite;
12*3449f9ceSAnna Dabrowska    protected $schemas;
13c2f8a3c4SAnna Dabrowska    protected $id;
14c2f8a3c4SAnna Dabrowska    protected $rev;
15c2f8a3c4SAnna Dabrowska    protected $status;
16*3449f9ceSAnna Dabrowska    protected $version = 0;
17c2f8a3c4SAnna Dabrowska    protected $user;
18c2f8a3c4SAnna Dabrowska
19c2f8a3c4SAnna Dabrowska    /**
20c2f8a3c4SAnna Dabrowska     * @param $sqlite
21*3449f9ceSAnna Dabrowska     * @param string $id
22*3449f9ceSAnna Dabrowska     * @param int $rev
23c2f8a3c4SAnna Dabrowska     */
24*3449f9ceSAnna Dabrowska    public function __construct($sqlite, $id, $rev)
25c2f8a3c4SAnna Dabrowska    {
26c2f8a3c4SAnna Dabrowska        $this->sqlite = $sqlite;
27c2f8a3c4SAnna Dabrowska        $this->id = $id;
28c2f8a3c4SAnna Dabrowska        $this->rev = $rev;
29c2f8a3c4SAnna Dabrowska
30*3449f9ceSAnna Dabrowska        $sql = 'SELECT * FROM structpublish_revisions WHERE id = ? AND rev = ?';
31*3449f9ceSAnna Dabrowska        $res = $sqlite->query($sql, $id, $rev);
32c2f8a3c4SAnna Dabrowska        $vals = $sqlite->res2row($res);
33*3449f9ceSAnna Dabrowska
34*3449f9ceSAnna Dabrowska        if (!empty($vals)) {
35*3449f9ceSAnna Dabrowska            $this->status = $vals['status'];
36*3449f9ceSAnna Dabrowska            $this->version = $vals['version'];
37*3449f9ceSAnna Dabrowska            $this->user = $vals['user'];
38*3449f9ceSAnna Dabrowska        }
39c2f8a3c4SAnna Dabrowska    }
40c2f8a3c4SAnna Dabrowska
41c2f8a3c4SAnna Dabrowska    public function save()
42c2f8a3c4SAnna Dabrowska    {
43*3449f9ceSAnna Dabrowska        // TODO reset publish status of older revisions
44*3449f9ceSAnna Dabrowska        $sql = 'REPLACE INTO structpublish_revisions (id, rev, status, version, user) VALUES (?,?,?,?,?)';
45c2f8a3c4SAnna Dabrowska        $res = $this->sqlite->query(
46c2f8a3c4SAnna Dabrowska            $sql,
47c2f8a3c4SAnna Dabrowska            $this->id,
48c2f8a3c4SAnna Dabrowska            $this->rev,
49c2f8a3c4SAnna Dabrowska            $this->status,
50c2f8a3c4SAnna Dabrowska            $this->version,
51c2f8a3c4SAnna Dabrowska            $this->user
52c2f8a3c4SAnna Dabrowska        );
53*3449f9ceSAnna Dabrowska
54*3449f9ceSAnna Dabrowska        if ($this->status === self::STATUS_PUBLISHED) {
55*3449f9ceSAnna Dabrowska            $this->updateCoreData();
56*3449f9ceSAnna Dabrowska        }
57c2f8a3c4SAnna Dabrowska    }
58c2f8a3c4SAnna Dabrowska
59c2f8a3c4SAnna Dabrowska    /**
60*3449f9ceSAnna Dabrowska     * Returns the latest version for a given id, or 0
61*3449f9ceSAnna Dabrowska     *
62*3449f9ceSAnna Dabrowska     * @return int
63*3449f9ceSAnna Dabrowska     */
64*3449f9ceSAnna Dabrowska    public function getLatestVersion()
65*3449f9ceSAnna Dabrowska    {
66*3449f9ceSAnna Dabrowska        $sql = 'SELECT MAX(version) AS latest FROM structpublish_revisions WHERE id = ?';
67*3449f9ceSAnna Dabrowska        $res = $this->sqlite->query($sql, $this->id);
68*3449f9ceSAnna Dabrowska        $res = $this->sqlite->res2arr($res);
69*3449f9ceSAnna Dabrowska        return $res['latest'] ?? 0;
70*3449f9ceSAnna Dabrowska    }
71*3449f9ceSAnna Dabrowska
72*3449f9ceSAnna Dabrowska    /**
73*3449f9ceSAnna Dabrowska     * @return string
74c2f8a3c4SAnna Dabrowska     */
75c2f8a3c4SAnna Dabrowska    public function getId()
76c2f8a3c4SAnna Dabrowska    {
77c2f8a3c4SAnna Dabrowska        return $this->id;
78c2f8a3c4SAnna Dabrowska    }
79c2f8a3c4SAnna Dabrowska
80c2f8a3c4SAnna Dabrowska    /**
81*3449f9ceSAnna Dabrowska     * @return int
82c2f8a3c4SAnna Dabrowska     */
83c2f8a3c4SAnna Dabrowska    public function getVersion()
84c2f8a3c4SAnna Dabrowska    {
85c2f8a3c4SAnna Dabrowska        return $this->version;
86c2f8a3c4SAnna Dabrowska    }
87c2f8a3c4SAnna Dabrowska
88c2f8a3c4SAnna Dabrowska    /**
89*3449f9ceSAnna Dabrowska     * @param int $version
90c2f8a3c4SAnna Dabrowska     */
91c2f8a3c4SAnna Dabrowska    public function setVersion($version): void
92c2f8a3c4SAnna Dabrowska    {
93c2f8a3c4SAnna Dabrowska        $this->version = $version;
94c2f8a3c4SAnna Dabrowska    }
95c2f8a3c4SAnna Dabrowska
96c2f8a3c4SAnna Dabrowska    /**
97*3449f9ceSAnna Dabrowska     * @return int
98c2f8a3c4SAnna Dabrowska     */
99c2f8a3c4SAnna Dabrowska    public function getRev()
100c2f8a3c4SAnna Dabrowska    {
101c2f8a3c4SAnna Dabrowska        return $this->rev;
102c2f8a3c4SAnna Dabrowska    }
103c2f8a3c4SAnna Dabrowska
104c2f8a3c4SAnna Dabrowska    /**
105*3449f9ceSAnna Dabrowska     * @param int $rev
106c2f8a3c4SAnna Dabrowska     */
107c2f8a3c4SAnna Dabrowska    public function setRev($rev): void
108c2f8a3c4SAnna Dabrowska    {
109c2f8a3c4SAnna Dabrowska        $this->rev = $rev;
110c2f8a3c4SAnna Dabrowska    }
111c2f8a3c4SAnna Dabrowska
112c2f8a3c4SAnna Dabrowska    /**
113*3449f9ceSAnna Dabrowska     * @return string
114c2f8a3c4SAnna Dabrowska     */
115c2f8a3c4SAnna Dabrowska    public function getStatus()
116c2f8a3c4SAnna Dabrowska    {
117c2f8a3c4SAnna Dabrowska        return $this->status ?? self::STATUS_DRAFT;
118c2f8a3c4SAnna Dabrowska    }
119c2f8a3c4SAnna Dabrowska
120c2f8a3c4SAnna Dabrowska    /**
121*3449f9ceSAnna Dabrowska     * @param string $status
122c2f8a3c4SAnna Dabrowska     */
123c2f8a3c4SAnna Dabrowska    public function setStatus($status): void
124c2f8a3c4SAnna Dabrowska    {
125c2f8a3c4SAnna Dabrowska        $this->status = $status;
126c2f8a3c4SAnna Dabrowska    }
127c2f8a3c4SAnna Dabrowska
128c2f8a3c4SAnna Dabrowska    /**
129*3449f9ceSAnna Dabrowska     * @return string
130c2f8a3c4SAnna Dabrowska     */
131c2f8a3c4SAnna Dabrowska    public function getUser()
132c2f8a3c4SAnna Dabrowska    {
133c2f8a3c4SAnna Dabrowska        return $this->user;
134c2f8a3c4SAnna Dabrowska    }
135c2f8a3c4SAnna Dabrowska
136c2f8a3c4SAnna Dabrowska    /**
137*3449f9ceSAnna Dabrowska     * @param string $user
138c2f8a3c4SAnna Dabrowska     */
139c2f8a3c4SAnna Dabrowska    public function setUser($user): void
140c2f8a3c4SAnna Dabrowska    {
141c2f8a3c4SAnna Dabrowska        $this->user = $user;
142c2f8a3c4SAnna Dabrowska    }
143*3449f9ceSAnna Dabrowska
144*3449f9ceSAnna Dabrowska    /**
145*3449f9ceSAnna Dabrowska     * Update publish status in the core table
146*3449f9ceSAnna Dabrowska     */
147*3449f9ceSAnna Dabrowska    protected function updateCoreData()
148*3449f9ceSAnna Dabrowska    {
149*3449f9ceSAnna Dabrowska        // FIXME we don't know anything about schemas yet!
150*3449f9ceSAnna Dabrowska//        $sql = 'UPDATE data_schema SET published = NULL WHERE id = ?';
151*3449f9ceSAnna Dabrowska//        $this->sqlite->query($sql, $this->id);
152*3449f9ceSAnna Dabrowska    }
153c2f8a3c4SAnna Dabrowska}
154