ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilRepositoryObjectPlugin.php
Go to the documentation of this file.
1<?php
2
3include_once("./Services/Component/classes/class.ilPlugin.php");
4
13abstract class ilRepositoryObjectPlugin extends ilPlugin
14{
18 protected $lng;
19
23 protected $db;
24
25
29 public function __construct()
30 {
31 global $DIC;
33
34 $this->db = $DIC->database();
35 }
36
42 public function getComponentType()
43 {
44 return IL_COMP_SERVICE;
45 }
46
52 public function getComponentName()
53 {
54 return "Repository";
55 }
56
62 public function getSlot()
63 {
64 return "RepositoryObject";
65 }
66
72 public function getSlotId()
73 {
74 return "robj";
75 }
76
80 protected function slotInit()
81 {
82 // nothing to do here
83 }
84
88 public static function _getIcon($a_type, $a_size)
89 {
92 "Repository",
93 "robj",
95 "icon_" . $a_type . ".svg"
96 );
97 }
98
102 public static function _getName($a_id)
103 {
104 $name = ilPlugin::lookupNameForId(IL_COMP_SERVICE, "Repository", "robj", $a_id);
105 if ($name != "") {
106 return $name;
107 }
108 }
109
113 protected function beforeActivation()
114 {
116
117 // before activating, we ensure, that the type exists in the ILIAS
118 // object database and that all permissions exist
119 $type = $this->getId();
120
121 if (substr($type, 0, 1) != "x") {
122 throw new ilPluginException("Object plugin type must start with an x. Current type is " . $type . ".");
123 }
124
125 // check whether type exists in object data, if not, create the type
126 $set = $ilDB->query(
127 "SELECT * FROM object_data " .
128 " WHERE type = " . $ilDB->quote("typ", "text") .
129 " AND title = " . $ilDB->quote($type, "text")
130 );
131 if ($rec = $ilDB->fetchAssoc($set)) {
132 $t_id = $rec["obj_id"];
133 } else {
134 $t_id = $ilDB->nextId("object_data");
135 $ilDB->manipulate("INSERT INTO object_data " .
136 "(obj_id, type, title, description, owner, create_date, last_update) VALUES (" .
137 $ilDB->quote($t_id, "integer") . "," .
138 $ilDB->quote("typ", "text") . "," .
139 $ilDB->quote($type, "text") . "," .
140 $ilDB->quote("Plugin " . $this->getPluginName(), "text") . "," .
141 $ilDB->quote(-1, "integer") . "," .
142 $ilDB->quote(ilUtil::now(), "timestamp") . "," .
143 $ilDB->quote(ilUtil::now(), "timestamp") .
144 ")");
145 }
146
147 // add rbac operations
148 // 1: edit_permissions, 2: visible, 3: read, 4:write, 6:delete
149 $ops = array(1, 2, 3, 4, 6);
150 if ($this->allowCopy()) {
152 }
153 foreach ($ops as $op) {
154 // check whether type exists in object data, if not, create the type
155 $set = $ilDB->query(
156 "SELECT * FROM rbac_ta " .
157 " WHERE typ_id = " . $ilDB->quote($t_id, "integer") .
158 " AND ops_id = " . $ilDB->quote($op, "integer")
159 );
160 if (!$ilDB->fetchAssoc($set)) {
161 $ilDB->manipulate("INSERT INTO rbac_ta " .
162 "(typ_id, ops_id) VALUES (" .
163 $ilDB->quote($t_id, "integer") . "," .
164 $ilDB->quote($op, "integer") .
165 ")");
166 }
167 }
168
169 // now add creation permission, if not existing
170 $set = $ilDB->query(
171 "SELECT * FROM rbac_operations " .
172 " WHERE class = " . $ilDB->quote("create", "text") .
173 " AND operation = " . $ilDB->quote("create_" . $type, "text")
174 );
175 if ($rec = $ilDB->fetchAssoc($set)) {
176 $create_ops_id = $rec["ops_id"];
177 } else {
178 $create_ops_id = $ilDB->nextId("rbac_operations");
179 $ilDB->manipulate("INSERT INTO rbac_operations " .
180 "(ops_id, operation, description, class) VALUES (" .
181 $ilDB->quote($create_ops_id, "integer") . "," .
182 $ilDB->quote("create_" . $type, "text") . "," .
183 $ilDB->quote("create " . $type, "text") . "," .
184 $ilDB->quote("create", "text") .
185 ")");
186 }
187
188 // assign creation operation to root, cat, crs, grp and fold
189 $par_types = $this->getParentTypes();
190 foreach ($par_types as $par_type) {
191 $set = $ilDB->query(
192 "SELECT obj_id FROM object_data " .
193 " WHERE type = " . $ilDB->quote("typ", "text") .
194 " AND title = " . $ilDB->quote($par_type, "text")
195 );
196 if ($rec = $ilDB->fetchAssoc($set)) {
197 if ($rec["obj_id"] > 0) {
198 $set = $ilDB->query(
199 "SELECT * FROM rbac_ta " .
200 " WHERE typ_id = " . $ilDB->quote($rec["obj_id"], "integer") .
201 " AND ops_id = " . $ilDB->quote($create_ops_id, "integer")
202 );
203 if (!$ilDB->fetchAssoc($set)) {
204 $ilDB->manipulate("INSERT INTO rbac_ta " .
205 "(typ_id, ops_id) VALUES (" .
206 $ilDB->quote($rec["obj_id"], "integer") . "," .
207 $ilDB->quote($create_ops_id, "integer") .
208 ")");
209 }
210 }
211 }
212 }
213
214 return true;
215 }
216
217 protected function beforeUninstallCustom()
218 {
219 // plugin-specific
220 // false would indicate that anything went wrong
221 return true;
222 }
223
224 abstract protected function uninstallCustom();
225
226 final protected function beforeUninstall()
227 {
228 if ($this->beforeUninstallCustom()) {
229 include_once "Services/Repository/classes/class.ilRepUtil.php";
230 $rep_util = new ilRepUtil();
231 $rep_util->deleteObjectType($this->getId());
232
233 // custom database tables may be needed by plugin repository object
234 $this->uninstallCustom();
235
236 return true;
237 }
238 return false;
239 }
240
244 public function getParentTypes()
245 {
246 $par_types = array("root", "cat", "crs", "grp", "fold");
247 return $par_types;
248 }
249
255 public function allowCopy()
256 {
257 return false;
258 }
259
265 public function useOrguPermissions() : bool
266 {
267 return false;
268 }
269}
An exception for terminatinating execution or to throw for unit testing.
const IL_COMP_SERVICE
Abstract Class ilPlugin.
static lookupNameForId(string $a_ctype, string $a_cname, string $a_slot_id, string $a_plugin_id)
static _getImagePath(string $a_ctype, string $a_cname, string $a_slot_id, string $a_pname, string $a_img)
static _getOperationIdByName($a_operation)
get operation id by name of operation @access public @access static
Repository Utilities (application layer, put GUI related stuff into ilRepUtilGUI)
Abstract parent class for all repository object plugin classes.
allowCopy()
decides if this repository plugin can be copied
static _getIcon($a_type, $a_size)
Get Icon.
static _getName($a_id)
Get class name.
useOrguPermissions()
Decide if this repository plugin uses OrgUnit Permissions.
beforeActivation()
Before activation processing.
slotInit()
Object initialization done by slot.
static now()
Return current timestamp in Y-m-d H:i:s format.
if($format !==null) $name
Definition: metadata.php:230
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
$type
global $ilDB
$a_type
Definition: workflow.php:92
$DIC
Definition: xapitoken.php:46