ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilSCORMCertificateAdapter.php
Go to the documentation of this file.
1<?php
2 /*
3 +----------------------------------------------------------------------------+
4 | ILIAS open source |
5 +----------------------------------------------------------------------------+
6 | Copyright (c) 1998-2001 ILIAS open source, University of Cologne |
7 | |
8 | This program is free software; you can redistribute it and/or |
9 | modify it under the terms of the GNU General Public License |
10 | as published by the Free Software Foundation; either version 2 |
11 | of the License, or (at your option) any later version. |
12 | |
13 | This program is distributed in the hope that it will be useful, |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | GNU General Public License for more details. |
17 | |
18 | You should have received a copy of the GNU General Public License |
19 | along with this program; if not, write to the Free Software |
20 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21 +----------------------------------------------------------------------------+
22*/
23
24include_once "./Services/Certificate/classes/class.ilCertificateAdapter.php";
25
34{
35 protected $object;
36
42 public function __construct($object)
43 {
44 $this->object = $object;
45 parent::__construct();
46 }
47
53 public function getCertificatePath()
54 {
55 return CLIENT_WEB_DIR . "/certificates/scorm/" . $this->object->getId() . "/";
56 }
57
65 {
66 $vars = $this->getBaseVariablesForPreview();
67 $vars["SCORM_TITLE"] = ilUtil::prepareFormOutput($this->object->getTitle());
68 $vars["SCORM_POINTS"] = number_format(80.7, 1, $this->lng->txt("lang_sep_decimal"), $this->lng->txt("lang_sep_thousand")) . " %";
69 $vars["SCORM_POINTS_MAX"] = number_format(90, 0, $this->lng->txt("lang_sep_decimal"), $this->lng->txt("lang_sep_thousand"));
70
71 $insert_tags = array();
72 foreach ($vars as $id => $caption) {
73 $insert_tags["[" . $id . "]"] = $caption;
74 }
75
76 include_once 'Services/Object/classes/class.ilObjectLP.php';
77 $olp = ilObjectLP::getInstance($this->object->getId());
78 $collection = $olp->getCollectionInstance();
79 if ($collection) {
80 $counter = 0;
81 foreach ($collection->getPossibleItems() as $item_id => $sahs_item) {
82 if ($collection->isAssignedEntry($item_id)) {
83 $insert_tags['[SCO_T_' . $counter . ']'] = $sahs_item['title'];
84 $insert_tags['[SCO_P_' . $counter . ']'] = number_format(30.3, 1, $this->lng->txt("lang_sep_decimal"), $this->lng->txt("lang_sep_thousand"));
85 $insert_tags['[SCO_PM_' . $counter . ']'] = number_format(90.9, 1, $this->lng->txt("lang_sep_decimal"), $this->lng->txt("lang_sep_thousand"));
86 $insert_tags['[SCO_PP_' . $counter . ']'] = number_format(33.3333, 1, $this->lng->txt("lang_sep_decimal"), $this->lng->txt("lang_sep_thousand")) . " %";
87 $counter++;
88 }
89 }
90 }
91
92 return $insert_tags;
93 }
94
104 {
105 $this->lng->loadLanguageModule('certificate');
106
107 $points = $this->object->getPointsInPercent();
108 $txtPoints = "";
109 if (is_null($points)) {
110 $txtPoints = $this->lng->txt("certificate_points_notavailable");
111 } else {
112 $txtPoints = number_format($points, 1, $this->lng->txt("lang_sep_decimal"), $this->lng->txt("lang_sep_thousand")) . " %";
113 }
114
115 $max_points = $this->object->getMaxPoints();
116 $txtMaxPoints = '';
117 if (is_null($max_points)) {
118 $txtMaxPoints = $this->lng->txt("certificate_points_notavailable");
119 } else {
120 if ($max_points != floor($max_points)) {
121 $txtMaxPoints = number_format($max_points, 1, $this->lng->txt("lang_sep_decimal"), $this->lng->txt("lang_sep_thousand"));
122 } else {
123 $txtMaxPoints = $max_points;
124 }
125 }
126
127 $user_data = $params["user_data"];
128 $completion_date = $this->getUserCompletionDate($user_data["usr_id"]);
129
130 $vars = $this->getBaseVariablesForPresentation($user_data, $params["last_access"], $completion_date);
131 $vars["SCORM_TITLE"] = ilUtil::prepareFormOutput($this->object->getTitle());
132 $vars["SCORM_POINTS"] = $txtPoints;
133 $vars["SCORM_POINTS_MAX"] = $txtMaxPoints;
134
135 foreach ($vars as $id => $caption) {
136 $insert_tags["[" . $id . "]"] = $caption;
137 }
138
139 include_once 'Services/Object/classes/class.ilObjectLP.php';
140 $olp = ilObjectLP::getInstance($this->object->getId());
141 $collection = $olp->getCollectionInstance();
142 if ($collection) {
143 $counter = 0;
144 foreach ($collection->getPossibleItems() as $item_id => $sahs_item) {
145 if ($collection->isAssignedEntry($item_id)) {
146 $insert_tags['[SCO_T_' . $counter . ']'] = $sahs_item['title'];//." getId=".$this->object->getId()." item_id=".$item_id." user_id=".$ilUser->getId()
147 $a_scores = $collection->getScoresForUserAndCP_Node_Id($item_id, $GLOBALS['DIC']['ilUser']->getId());
148 if ($a_scores["raw"] == null) {
149 $insert_tags['[SCO_P_' . $counter . ']'] = $this->lng->txt("certificate_points_notavailable");
150 } else {
151 $insert_tags['[SCO_P_' . $counter . ']'] = number_format($a_scores["raw"], 1, $this->lng->txt("lang_sep_decimal"), $this->lng->txt("lang_sep_thousand"));
152 }
153 if ($a_scores["max"] == null) {
154 $insert_tags['[SCO_PM_' . $counter . ']'] = $this->lng->txt("certificate_points_notavailable");
155 } else {
156 $insert_tags['[SCO_PM_' . $counter . ']'] = number_format($a_scores["max"], 1, $this->lng->txt("lang_sep_decimal"), $this->lng->txt("lang_sep_thousand"));
157 }
158 if ($a_scores["scaled"] == null) {
159 $insert_tags['[SCO_PP_' . $counter . ']'] = $this->lng->txt("certificate_points_notavailable");
160 } else {
161 $insert_tags['[SCO_PP_' . $counter . ']'] = number_format(($a_scores["scaled"] * 100), 1, $this->lng->txt("lang_sep_decimal"), $this->lng->txt("lang_sep_thousand")) . " %";
162 }
163 $counter++;
164 }
165 }
166 }
167
168 return $insert_tags;
169 }
170
178 {
179 $vars = $this->getBaseVariablesDescription();
180 $vars["SCORM_TITLE"] = $this->lng->txt("certificate_ph_scormtitle");
181 $vars["SCORM_POINTS"] = $this->lng->txt("certificate_ph_scormpoints");
182 $vars["SCORM_POINTS_MAX"] = $this->lng->txt("certificate_ph_scormmaxpoints");
183
184 $template = new ilTemplate("tpl.certificate_edit.html", true, true, "Modules/ScormAicc");
185 $template->setCurrentBlock("items");
186 foreach ($vars as $id => $caption) {
187 $template->setVariable("ID", $id);
188 $template->setVariable("TXT", $caption);
189 $template->parseCurrentBlock();
190 }
191
192 $template->setVariable("PH_INTRODUCTION", $this->lng->txt("certificate_ph_introduction"));
193
194 include_once 'Services/Object/classes/class.ilObjectLP.php';
195 $olp = ilObjectLP::getInstance($this->object->getId());
196 $collection = $olp->getCollectionInstance();
197 if ($collection) {
198 $items = $collection->getPossibleItems();
199 }
200
201 if (!$items) {
202 $template->setCurrentBlock('NO_SCO');
203 $template->setVariable('PH_NO_SCO', $this->lng->txt('certificate_ph_no_sco'));
204 $template->parseCurrentBlock();
205 } else {
206 $template->setCurrentBlock('SCOS');
207 $template->setVariable('PH_SCOS', $this->lng->txt('certificate_ph_scos'));
208 $template->parseCurrentBlock();
209 $template->setCurrentBlock('SCO_HEADER');
210 $template->setVariable('PH_TITLE_SCO', $this->lng->txt('certificate_ph_title_sco'));
211 //$template->setVariable('PH_PH',$lng->txt('certificate_ph_ph'));
212 $template->setVariable('PH_SCO_TITLE', $this->lng->txt('certificate_ph_sco_title'));
213 $template->setVariable('PH_SCO_POINTS_RAW', $this->lng->txt('certificate_ph_sco_points_raw'));
214 $template->setVariable('PH_SCO_POINTS_MAX', $this->lng->txt('certificate_ph_sco_points_max'));
215 $template->setVariable('PH_SCO_POINTS_SCALED', $this->lng->txt('certificate_ph_sco_points_scaled'));
216 $template->parseCurrentBlock();
217 }
218
219 if ($collection) {
220 $counter = 0;
221 foreach ($items as $item_id => $sahs_item) {
222 if ($collection->isAssignedEntry($item_id)) {
223 $template->setCurrentBlock("SCO");
224 $template->setVariable('SCO_TITLE', $sahs_item['title']);
225 $template->setVariable('PH_SCO_TITLE', '[SCO_T_' . $counter . ']');
226 $template->setVariable('PH_SCO_POINTS_RAW', '[SCO_P_' . $counter . ']');
227 $template->setVariable('PH_SCO_POINTS_MAX', '[SCO_PM_' . $counter . ']');
228 $template->setVariable('PH_SCO_POINTS_SCALED', '[SCO_PP_' . $counter . ']');
229 $template->parseCurrentBlock();
230 $counter++;
231 }
232 }
233 }
234
235 return $template->get();
236 }
237
247 public function addAdditionalFormElements(&$form, $form_fields)
248 {
249 $short_name = new ilTextInputGUI($this->lng->txt("certificate_short_name"), "short_name");
250 $short_name->setRequired(true);
251 require_once "./Services/Utilities/classes/class.ilStr.php";
252 $short_name->setValue(strlen($form_fields["short_name"]) ? $form_fields["short_name"] : ilStr::subStr($this->object->getTitle(), 0, 30));
253 $short_name->setSize(30);
254 if (strlen($form_fields["short_name"])) {
255 $short_name->setInfo(str_replace("[SHORT_TITLE]", $form_fields["short_name"], $this->lng->txt("certificate_short_name_description")));
256 } else {
257 $short_name->setInfo($this->lng->txt("certificate_short_name_description"));
258 }
259 if (count($_POST)) {
260 $short_name->checkInput();
261 }
262 $form->addItem($short_name);
263 }
264
269 {
270 return true;
271 }
272
281 public function addFormFieldsFromPOST(&$form_fields)
282 {
283 $form_fields["certificate_enabled_scorm"] = $_POST["certificate_enabled_scorm"];
284 $form_fields["short_name"] = $_POST["short_name"];
285 }
286
295 public function addFormFieldsFromObject(&$form_fields)
296 {
297 $scormSetting = new ilSetting("scorm");
298 $form_fields["certificate_enabled_scorm"] = $scormSetting->get("certificate_" . $this->object->getId());
299 $form_fields["short_name"] = $scormSetting->get("certificate_short_name_" . $this->object->getId());
300 }
301
309 public function saveFormFields(&$form_fields)
310 {
311 $scormSetting = new ilSetting("scorm");
312 $scormSetting->set("certificate_" . $this->object->getId(), $form_fields["certificate_enabled_scorm"]);
313 $scormSetting->set("certificate_short_name_" . $this->object->getId(), $form_fields["short_name"]);
314 }
315
322 public function getAdapterType()
323 {
324 return "scorm";
325 }
326
333 public function getCertificateID()
334 {
335 return $this->object->getId();
336 }
337
344 public function getCertificateFilename($params = array())
345 {
346 $basename = parent::getCertificateFilename($params);
347
348 $user_data = $params["user_data"];
349 if (!is_array($user_data)) {
350 global $DIC;
351 $ilSetting = $DIC['ilSetting'];
352 $scormSetting = new ilSetting("scorm");
353 $short_title = $scormSetting->get("certificate_short_name_" . $this->object->getId());
354 return strftime("%y%m%d", time()) . "_" . $this->lng->txt("certificate_var_user_lastname") . "_" . $short_title . "_" . $basename;
355 } else {
356 return strftime("%y%m%d", time()) . "_" . $user_data["lastname"] . "_" . $params["short_title"] . "_.$basename";
357 }
358 }
359
365 public function deleteCertificate()
366 {
367 $scormSetting = new ilSetting("scorm");
368 $scormSetting->delete("certificate_" . $this->object->getId());
369 }
370
377 public function getUserIdForParams($a_params)
378 {
379 return $a_params["user_data"]["usr_id"];
380 }
381}
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
Adapter class to provide certificate data for the certificate generator.
getBaseVariablesForPresentation($a_user_data, $a_last_access=null, $a_completion_date=false)
Get variable values.
getBaseVariablesForPreview($a_enable_last_access=true, $a_enable_completion_date=true)
Get variable dummys.
getUserCompletionDate($a_user_id, $a_object_id=null)
Get completion for user.
getBaseVariablesDescription($a_enable_last_access=true, $a_enable_completion_date=true)
Get variable descriptions.
static getInstance($a_obj_id)
addFormFieldsFromObject(&$form_fields)
Allows to add additional form values to the array of form values evaluating the associated adapter cl...
addAdditionalFormElements(&$form, $form_fields)
Allows to add additional form fields to the certificate editor form This method will be called when t...
addFormFieldsFromPOST(&$form_fields)
Allows to add additional form values to the array of form values evaluating a HTTP POST action.
getCertificateVariablesDescription()
Returns a description of the available certificate parameters.
getCertificateVariablesForPreview()
Returns an array containing all variables and values which can be exchanged in the certificate.
getCertificateFilename($params=array())
Set the name of the certificate file This method will be called when the certificate will be generate...
getUserIdForParams($a_params)
Get user id for params.
getCertificateID()
Returns a certificate ID This value will be used to generate unique file names for the certificates.
deleteCertificate()
Is called when the certificate is deleted Add some adapter specific code if more work has to be done ...
getCertificatePath()
Returns the certificate path (with a trailing path separator)
__construct($object)
ilSCORMCertificateAdapter contructor
getAdapterType()
Returns the adapter type This value will be used to generate file names for the certificates.
getCertificateVariablesForPresentation($params=array())
Returns an array containing all variables and values which can be exchanged in the certificate The va...
saveFormFields(&$form_fields)
Allows to save additional adapter form fields This method will be called when the certificate editor ...
ILIAS Setting Class.
static subStr($a_str, $a_start, $a_length=null)
Definition: class.ilStr.php:15
special template class to simplify handling of ITX/PEAR
This class represents a text property in a property form.
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms @access public
$template
if(!array_key_exists('StateId', $_REQUEST)) $id
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
global $ilSetting
Definition: privfeed.php:17
if(isset($_POST['submit'])) $form
global $DIC
Definition: saml.php:7