ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilRepositoryObjectPlugin.php
Go to the documentation of this file.
1 <?php
2 
3 include_once("./Services/Component/classes/class.ilPlugin.php");
4 
13 abstract class ilRepositoryObjectPlugin extends ilPlugin
14 {
18  protected $lng;
19 
23  protected $db;
24 
25 
29  public function __construct()
30  {
31  global $DIC;
32  parent::__construct();
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",
94  ilPlugin::lookupNameForId(IL_COMP_SERVICE, "Repository", "robj", $a_type),
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  {
115  $ilDB = $this->db;
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()) {
151  $ops[] = ilRbacReview::_getOperationIdByName("copy");
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 }
Repository Utilities (application layer, put GUI related stuff into ilRepUtilGUI) ...
slotInit()
Object initialization done by slot.
$type
global $DIC
Definition: saml.php:7
static _getName($a_id)
Get class name.
static _getImagePath(string $a_ctype, string $a_cname, string $a_slot_id, string $a_pname, string $a_img)
static _getIcon($a_type, $a_size)
Get Icon.
static now()
Return current timestamp in Y-m-d H:i:s format.
Abstract parent class for all repository object plugin classes.
static lookupNameForId(string $a_ctype, string $a_cname, string $a_slot_id, string $a_plugin_id)
$a_type
Definition: workflow.php:92
allowCopy()
decides if this repository plugin can be copied
static _getOperationIdByName($a_operation)
get operation id by name of operation public static
beforeActivation()
Before activation processing.
global $ilDB
getPluginName()
Get Plugin Name.
const IL_COMP_SERVICE