ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilObjBibliographicGUI.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
5 require_once "./Services/Object/classes/class.ilObject2GUI.php";
6 require_once "./Modules/Bibliographic/classes/class.ilBibliographicDetailsGUI.php";
7 require_once("./Services/Export/classes/class.ilExportGUI.php");
8 require_once('./Services/News/classes/class.ilNewsItem.php');
9 require_once('./Services/PersonalDesktop/interfaces/interface.ilDesktopItemHandling.php');
10 
11 
28 
29  const P_ENTRY_ID = 'entry_id';
33  protected $bibl_obj;
34 
35 
41  public function __construct($a_id = 0, $a_id_type = self::REPOSITORY_NODE_ID, $a_parent_node_id = 0) {
42  global $lng, $ilias;
43  $this->lng = $lng;
44  $this->ilias = $ilias;
45  parent::__construct($a_id, $a_id_type, $a_parent_node_id);
46  $lng->loadLanguageModule('bibl');
47  if ($a_id > 0) {
48  $this->bibl_obj = $this->object;
49  }
50  }
51 
52 
58  public function getStandardCmd() {
59  return "view";
60  }
61 
62 
68  public function getType() {
69  return "bibl";
70  }
71 
72 
76  public function executeCommand() {
77  global $ilCtrl, $ilTabs, $ilNavigationHistory, $tpl, $lng;
78  // Navigation History
79  $link = $ilCtrl->getLinkTarget($this, $this->getStandardCmd());
80  if ($this->object != NULL) {
81  $ilNavigationHistory->addItem($this->object->getRefId(), $link, "bibl");
82  $this->addHeaderAction();
83  }
84  $next_class = $ilCtrl->getNextClass($this);
85  $this->cmd = $ilCtrl->getCmd();
86  switch ($next_class) {
87  case "ilinfoscreengui":
88  $this->prepareOutput();
89  $ilTabs->activateTab("id_info");
90  $this->infoScreenForward();
91  break;
92  case "ilcommonactiondispatchergui":
93  include_once("Services/Object/classes/class.ilCommonActionDispatcherGUI.php");
95  $this->ctrl->forwardCommand($gui);
96  break;
97  case "ilpermissiongui":
98  $this->prepareOutput();
99  $ilTabs->activateTab("id_permissions");
100  include_once("Services/AccessControl/classes/class.ilPermissionGUI.php");
101  $perm_gui = new ilPermissionGUI($this);
102  $this->ctrl->forwardCommand($perm_gui);
103  break;
104  case "ilobjectcopygui":
105  include_once "./Services/Object/classes/class.ilObjectCopyGUI.php";
106  $cp = new ilObjectCopyGUI($this);
107  $cp->setType('bibl');
108  $tpl->getStandardTemplate();
109  $this->ctrl->forwardCommand($cp);
110  break;
111  case "ilobjfilegui":
112  $this->prepareOutput();
113  $ilTabs->setTabActive("id_records");
114  include_once("./Modules/File/classes/class.ilObjFile.php");
115  $file_gui = new ilObjFile($this);
116  $this->ctrl->forwardCommand($file_gui);
117  break;
118  case "ilexportgui":
119  $this->prepareOutput();
120  $ilTabs->setTabActive("export");
121  $exp_gui = new ilExportGUI($this);
122  $exp_gui->addFormat("xml");
123  $this->ctrl->forwardCommand($exp_gui);
124  break;
125  default:
126  return parent::executeCommand();
127  }
128 
129  return true;
130  }
131 
132 
138  public function infoScreen() {
139  $this->ctrl->setCmd("showSummary");
140  $this->ctrl->setCmdClass("ilinfoscreengui");
141  $this->infoScreenForward();
142  }
143 
144 
148  public function infoScreenForward() {
149  global $ilTabs, $ilErr, $lng;
150  if (! $this->checkPermissionBool("visible")) {
151  ilUtil::sendFailure($lng->txt("msg_no_perm_read"), true);
152  $this->ctrl->redirectByClass('ilPersonalDesktopGUI', '');
153  }
154  $ilTabs->activateTab("id_info");
155  include_once("./Services/InfoScreen/classes/class.ilInfoScreenGUI.php");
156  $info = new ilInfoScreenGUI($this);
157  $info->enablePrivateNotes();
158  $info->addMetaDataSections($this->object->getId(), 0, $this->object->getType());
159  $this->ctrl->forwardCommand($info);
160  }
161 
162 
163  /*
164  * addLocatorItems
165  */
166  public function addLocatorItems() {
167  global $ilLocator;
168  if (is_object($this->object)) {
169  $ilLocator->addItem($this->object->getTitle(), $this->ctrl->getLinkTarget($this, ""), "", $this->node_id);
170  }
171  }
172 
173 
180  public static function _goto($a_target) {
181  global $ilAccess, $ilErr, $ilCtrl;
182  $id = explode("_", $a_target);
183  $ilCtrl->setTargetScript("ilias.php");
184  $ilCtrl->initBaseClass("ilRepositoryGUI");
185  $ilCtrl->setParameterByClass("ilobjbibliographicgui", "ref_id", $id[0]);
186  //Detail-View
187  if ($id[1]) {
188  $ilCtrl->setParameterByClass("ilobjbibliographicgui", ilObjBibliographicGUI::P_ENTRY_ID, $id[1]);
189  $ilCtrl->redirectByClass(array( "ilRepositoryGUI", "ilobjbibliographicgui" ), "showDetails");
190  } else {
191  $ilCtrl->redirectByClass(array( "ilRepositoryGUI", "ilobjbibliographicgui" ), "view");
192  }
193  }
194 
195 
201  protected function initCreationForms($a_new_type) {
202  global $lng;
203  $forms = parent::initCreationForms($a_new_type);
204  // Add File-Upload
205  $in_file = new ilFileInputGUI($lng->txt("bibliography file"), "bibliographic_file");
206  $in_file->setSuffixes(array( "ris", "bib", "bibtex" ));
207  $in_file->setRequired(true);
208  $forms[self::CFORM_NEW]->addItem($in_file);
209  $this->ctrl->saveParameterByClass('ilobjrootfoldergui', 'new_type');
210  $forms[self::CFORM_NEW]->setFormAction($this->ctrl->getFormActionByClass('ilobjrootfoldergui', "save"));
211 
212  return $forms;
213  }
214 
215 
216  public function save() {
217  global $tpl;
218  $form = $this->initCreationForms($this->getType());
219  if ($form[self::CFORM_NEW]->checkInput()) {
220  parent::save();
221  } else {
222  $form = $form[self::CFORM_NEW];
223  $form->setValuesByPost();
224  $tpl->setContent($form->getHtml());
225  }
226  }
227 
228 
232  protected function afterSave(ilObjBibliographic $a_new_object) {
233  $a_new_object->doUpdate();
234  $this->addNews($a_new_object->getId(), 'created');
235  $this->ctrl->redirect($this, "edit");
236  }
237 
238 
245  public function setTabs() {
246  global $ilAccess, $ilTabs, $lng, $ilHelp;
253  $ilHelp->setScreenIdComponent('bibl');
254  // info screen
255  if ($ilAccess->checkAccess('read', "", $this->object->getRefId())) {
256  $ilTabs->addTab("content", $lng->txt("content"), $this->ctrl->getLinkTarget($this, "showContent"));
257  }
258  // info screen
259  if ($ilAccess->checkAccess('visible', "", $this->object->getRefId())) {
260  $ilTabs->addTab("id_info", $lng->txt("info_short"), $this->ctrl->getLinkTargetByClass("ilinfoscreengui", "showSummary"));
261  }
262  // settings
263  if ($ilAccess->checkAccess('write', "", $this->object->getRefId())) {
264  $ilTabs->addTab("settings", $lng->txt("settings"), $this->ctrl->getLinkTarget($this, "editObject"));
265  }
266  // export
267  if ($ilAccess->checkAccess("write", "", $this->object->getRefId())) {
268  $ilTabs->addTab("export", $lng->txt("export"), $this->ctrl->getLinkTargetByClass("ilexportgui", ""));
269  }
270  // edit permissions
271  if ($ilAccess->checkAccess('edit_permission', "", $this->object->getRefId())) {
272  $ilTabs->addTab("id_permissions", $lng->txt("perm_settings"), $this->ctrl->getLinkTargetByClass("ilpermissiongui", "perm"));
273  }
274  }
275 
276 
277  public function initEditForm() {
278  global $lng;
279  $form = parent::initEditForm();
280  // Add File-Upload
281  $in_file = new ilFileInputGUI($lng->txt("bibliography file"), "bibliographic_file");
282  $in_file->setSuffixes(array( "ris", "bib", "bibtex" ));
283  $in_file->setRequired(false);
284  $cb_override = new ilCheckboxInputGUI($this->lng->txt("override_entries"), "override_entries");
285  $cb_override->addSubItem($in_file);
286  $form->addItem($cb_override);
287  $form->setFormAction($this->ctrl->getFormAction($this, "save"));
288 
289  return $form;
290  }
291 
292 
296  protected function initEditCustomForm(ilPropertyFormGUI $a_form) {
297  global $ilTabs;
298  $ilTabs->activateTab("settings");
299  // is_online
300  $cb = new ilCheckboxInputGUI($this->lng->txt("online"), "is_online");
301  $a_form->addItem($cb);
302  }
303 
304 
310  public function getEditFormCustomValues(array &$a_values) {
311  $a_values["is_online"] = $this->object->getOnline();
312 
313  return $a_values;
314  }
315 
316 
317 
318 
319  public function render() {
320  $this->showContent();
321  }
322 
323 
327  public function showContent() {
328  global $ilAccess, $tpl, $lng, $ilToolbar, $ilCtrl, $ilTabs;
329  // if user has read permission and object is online OR user has write permissions
330  if (($ilAccess->checkAccess('read', "", $this->object->getRefId()) && $this->object->getOnline())
331  || $ilAccess->checkAccess('write', "", $this->object->getRefId())
332  ) {
333  $ilTabs->setTabActive("content");
334  include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
335  $ilToolbar = new ilToolbarGUI();
336  $ilToolbar->addButton($lng->txt("download_original_file"), $ilCtrl->getLinkTargetByClass("ilBibliographicDetailsGUI", "sendFile"));
337  include_once "./Modules/Bibliographic/classes/class.ilBibliographicRecordListTableGUI.php";
338  $table = new ilDataBibliographicRecordListTableGUI($this, $this->cmd);
339  $html = $table->getHTML();
340  $tpl->setContent($html);
341  //Permanent Link
342  $tpl->setPermanentLink("bibl", $this->object->getRefId());
343  } else {
344  $object_title = ilObject::_lookupTitle(ilObject::_lookupObjId($_GET["ref_id"]));
345  ilUtil::sendFailure(sprintf($this->lng->txt("msg_no_perm_read_item"), $object_title), true);
346  //redirect to repository without any parameters
347  unset($_GET);
349  }
350  }
351 
352 
356  public function sendFile() {
357  global $ilAccess, $tpl, $lng;
358  if ($ilAccess->checkAccess('read', "", $this->object->getRefId())) {
359  $file_path = $this->bibl_obj->getFileAbsolutePath();
360  if ($file_path) {
361  if (is_file($file_path)) {
362  $path_array = explode(DIRECTORY_SEPARATOR, $file_path);
363  $filename = $path_array[sizeof($path_array) - 1];
364  ilUtil::deliverFile($file_path, $filename);
365  } else {
366  ilUtil::sendFailure($lng->txt("file_not_found"));
367  $this->showContent($this->bibl_obj);
368  }
369  }
370  } else {
371  ilUtil::sendFailure($this->lng->txt("no_permission"), true);
373  }
374  }
375 
376 
377  public function showDetails() {
378  global $ilAccess, $tpl, $lng;
379  if ($ilAccess->checkAccess('read', "", $this->object->getRefId())) {
380  $bibGUI = ilBibliographicDetailsGUI::getInstance($this->bibl_obj, $_GET[self::P_ENTRY_ID]);
381  $this->tpl->setContent($bibGUI->getHTML());
382  } else {
383  ilUtil::sendFailure($this->lng->txt("no_permission"), true);
385  }
386  }
387 
388 
389  public function view() {
390  $this->showContent();
391  }
392 
393 
397  public function updateCustom(ilPropertyFormGUI $a_form) {
398  global $ilAccess;
399  if ($ilAccess->checkAccess('write', "", $this->object->getRefId())) {
400  if ($this->object->getOnline() != $a_form->getInput("is_online")) {
401  $this->object->setOnline($a_form->getInput("is_online"));
402  }
403 
404  if (! empty($_FILES['bibliographic_file']['name'])) {
405  $this->addNews($this->bibl_obj->getId(), 'updated');
406  }
407 
408  } else {
409  ilUtil::sendFailure($this->lng->txt("no_permission"), true);
411  }
412  }
413 
414  public function toggleNotification() {
415  global $ilCtrl, $ilUser;
416  include_once "./Services/Notification/classes/class.ilNotification.php";
417  switch ($_GET["ntf"]) {
418  case 1:
420  break;
421  case 2:
423  break;
424  }
425  $ilCtrl->redirect($this, "");
426  }
427 
431  public function addNews($obj_id, $change = 'created') {
432  global $lng, $ilUser;
433 
434  $ilNewsItem = new ilNewsItem();
435  $ilNewsItem->setTitle($lng->txt('news_title_' . $change));
436  $ilNewsItem->setPriority(NEWS_NOTICE);
437  $ilNewsItem->setContext($obj_id, $this->getType());
438  $ilNewsItem->setUserId($ilUser->getId());
439  $ilNewsItem->setVisibility(NEWS_USERS);
440  $ilNewsItem->setContentTextIsLangVar(false);
441  $ilNewsItem->create();
442  }
443 
448  public function addToDeskObject() {
449  include_once './Services/PersonalDesktop/classes/class.ilDesktopItemGUI.php';
451  ilUtil::sendSuccess($this->lng->txt("added_to_desktop"), true);
452  $this->ctrl->redirect($this, 'view');
453  }
454 
459  public function removeFromDeskObject() {
460  include_once './Services/PersonalDesktop/classes/class.ilDesktopItemGUI.php';
462  ilUtil::sendSuccess($this->lng->txt("removed_from_desktop"), true);
463  $this->ctrl->redirect($this, 'view');
464  }
465 
470  public function addToDesk() {
471  $this->addToDeskObject();
472  }
473 
478  public function removeFromDesk() {
479  $this->removeFromDeskObject();
480  }
481 }
482 
483 ?>