ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilPCSourceCodeGUI.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
5 require_once("./Services/COPage/classes/class.ilPCSourceCode.php");
6 require_once("./Services/COPage/classes/class.ilPageContentGUI.php");
7 
19 {
23  protected $user;
24 
25 
30  public function __construct($a_pg_obj, $a_content_obj, $a_hier_id, $a_pc_id = "")
31  {
32  global $DIC;
33 
34  $this->user = $DIC->user();
35  parent::__construct($a_pg_obj, $a_content_obj, $a_hier_id, $a_pc_id);
36  }
37 
38 
42  public function executeCommand()
43  {
44  // get next class that processes or forwards current command
45  $next_class = $this->ctrl->getNextClass($this);
46 
47  // get current command
48  $cmd = $this->ctrl->getCmd();
49 
50  switch ($next_class) {
51  default:
52  $ret = $this->$cmd();
53  break;
54  }
55 
56  return $ret;
57  }
58 
62  public function edit()
63  {
64  $form = $this->initPropertyForm($this->lng->txt("cont_edit_src"), "update", "cancelCreate");
65 
66  if ($this->pg_obj->getParentType() == "lm") {
67  $this->tpl->setVariable(
68  "LINK_ILINK",
69  $this->ctrl->getLinkTargetByClass("ilInternalLinkGUI", "showLinkHelp")
70  );
71  $this->tpl->setVariable("TXT_ILINK", "[" . $this->lng->txt("cont_internal_link") . "]");
72  }
73 
74  $this->displayValidationError();
75 
76  if (key($_POST["cmd"]) == "update") {
77  $form->setValuesByPost();
78  } else {
79  $form->getItemByPostVar("par_language")->setValue($this->content_obj->getLanguage());
80  $form->getItemByPostVar("par_subcharacteristic")->setValue($this->content_obj->getSubCharacteristic());
81  $form->getItemByPostVar("par_downloadtitle")->setValue($this->content_obj->getDownloadTitle());
82  $form->getItemByPostVar("par_showlinenumbers")->setChecked(
83  $this->content_obj->getShowLineNumbers() == "y"?true:false
84  );
85  // $form->getItemByPostVar("par_autoindent")->setChecked(
86  // $this->content_obj->getAutoIndent()=="y"?true:false);
87 
88  $par_content = $this->content_obj->xml2output($this->content_obj->getText());
89 
90  //TODO: Find a better way to convert back curly brackets
91  $par_content = str_replace("&#123;", "{", $par_content);
92  $par_content = str_replace("&#125;", "}", $par_content);
93 
94  $form->getItemByPostVar("par_content")->setValue($par_content);
95  }
96 
97 
98  $this->tpl->setContent($form->getHTML());
99  }
100 
104  public function insert()
105  {
107 
108  $form = $this->initPropertyForm($this->lng->txt("cont_insert_src"), "create_src", "cancelCreate");
109 
110  if ($this->pg_obj->getParentType() == "lm") {
111  $this->tpl->setVariable(
112  "LINK_ILINK",
113  $this->ctrl->getLinkTargetByClass("ilInternalLinkGUI", "showLinkHelp")
114  );
115  $this->tpl->setVariable("TXT_ILINK", "[" . $this->lng->txt("cont_internal_link") . "]");
116  }
117 
118  $this->displayValidationError();
119 
120  if (key($_POST["cmd"]) == "create_src") {
121  $form->setValuesByPost();
122  } else {
123  if ($_SESSION["il_text_lang_" . $_GET["ref_id"]] != "") {
124  $form->getItemByPostVar("par_language")->setValue($_SESSION["il_text_lang_" . $_GET["ref_id"]]);
125  } else {
126  $form->getItemByPostVar("par_language")->setValue($ilUser->getLanguage());
127  }
128 
129  $form->getItemByPostVar("par_showlinenumbers")->setChecked(true);
130  // $form->getItemByPostVar("par_autoindent")->setChecked(true);
131  $form->getItemByPostVar("par_subcharacteristic")->setValue("");
132  $form->getItemByPostVar("par_content")->setValue("");
133  }
134 
135  $this->tpl->setContent($form->getHTML());
136  }
137 
138 
142  public function update()
143  {
144  $this->upload_source();
145 
146  // set language and characteristic
147 
148  $this->content_obj->setLanguage($_POST["par_language"]);
149  $this->content_obj->setCharacteristic($_POST["par_characteristic"]);
150 
151  //echo "PARupdate:".htmlentities($this->content_obj->input2xml($_POST["par_content"])).":<br>"; exit;
152 
153 
154  // set language and characteristic
155  $this->content_obj->setLanguage($_POST["par_language"]);
156  $this->content_obj->setSubCharacteristic($_POST["par_subcharacteristic"]);
157  $this->content_obj->setDownloadTitle(str_replace('"', '', ilUtil::stripSlashes($_POST["par_downloadtitle"])));
158  $this->content_obj->setShowLineNumbers($_POST["par_showlinenumbers"]?"y":"n");
159  //$this->content_obj->setAutoIndent($_POST["par_autoindent"]?"y":"n");
160  $this->content_obj->setSubCharacteristic($_POST["par_subcharacteristic"]);
161  $this->content_obj->setCharacteristic("Code");
162 
163  $this->updated = $this->content_obj->setText(
164  $this->content_obj->input2xml($_POST["par_content"], 0, false)
165  );
166 
167  if ($this->updated !== true) {
168  //echo "Did not update!";
169  $this->edit();
170  return;
171  }
172 
173  $this->updated = $this->pg_obj->update();
174 
175  if ($this->updated === true && $this->ctrl->getCmd() != "upload") {
176  $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
177  } else {
178  $this->edit();
179  }
180  }
181 
185  public function cancelUpdate()
186  {
187  $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
188  }
189 
193  public function create()
194  {
195  $this->content_obj = new ilPCSourceCode($this->getPage());
196  $this->content_obj->create($this->pg_obj, $this->hier_id, $this->pc_id);
197  $this->content_obj->setLanguage($_POST["par_language"]);
198 
199  $_SESSION["il_text_lang_" . $_GET["ref_id"]] = $_POST["par_language"];
200 
201  $uploaded = $this->upload_source();
202 
203  $this->content_obj->setCharacteristic($_POST["par_characteristic"]);
204  $this->content_obj->setSubCharacteristic($_POST["par_subcharacteristic"]);
205  $this->content_obj->setDownloadTitle(str_replace('"', '', ilUtil::stripSlashes($_POST["par_downloadtitle"])));
206  $this->content_obj->setShowLineNumbers($_POST["par_showlinenumbers"]?'y':'n');
207  $this->content_obj->setCharacteristic('Code');
208  //$this->content_obj->setAutoIndent ($_POST["par_autoindent"]?'y':'n');
209 
210  if ($uploaded) {
211  $this->insert();
212  return;
213  }
214 
215  $this->updated = $this->content_obj->setText(
216  $this->content_obj->input2xml($_POST["par_content"], 0, false)
217  );
218 
219  if ($this->updated !== true) {
220  $this->insert();
221  return;
222  }
223 
224  $this->updated = $this->pg_obj->update();
225 
226  if ($this->updated === true && !$uploaded) {
227  $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
228  } else {
229  $this->insert();
230  }
231  }
232 
236  public function cancelCreate()
237  {
238  $this->ctrl->returnToParent($this, "jump" . $this->hier_id);
239  }
240 
241  public function upload_source()
242  {
243  if (isset($_FILES['userfile']['name'])) {
244  $userfile = $_FILES['userfile']['tmp_name'];
245 
246  if ($userfile == "" || !is_uploaded_file($userfile)) {
247  $error_str = "<b>Error(s):</b><br>Upload error: file name must not be empty!";
248  $this->tpl->setVariable("MESSAGE", $error_str);
249  $this->content_obj->setText($this->content_obj->input2xml(stripslashes($_POST["par_content"]), 0, false));
250  return false;
251  }
252 
253  $_POST["par_content"] = file_get_contents($userfile);
254  $_POST["par_downloadtitle"] = $_FILES['userfile']['name'];
255  return true;
256  }
257 
258  return false;
259  }
260 
261 
267  public function getProgLangOptions()
268  {
269  $prog_langs = array(
270  "" => "other");
271  include_once("./Services/UIComponent/SyntaxHighlighter/classes/class.ilSyntaxHighlighter.php");
272  foreach (ilSyntaxHighlighter::getSupportedLanguagesV51() as $k => $v) {
273  $prog_langs[$k] = $v;
274  }
275  return $prog_langs;
276  }
277 
286  public function initPropertyForm($a_title, $a_cmd, $a_cmd_cancel)
287  {
288  include_once("./Services/Form/classes/class.ilPropertyFormGUI.php");
289  $form = new ilPropertyFormGUI();
290  $form->setTitle($a_title);
291  $form->setFormAction($this->ctrl->getFormAction($this, $a_cmd));
292  $form->addCommandButton($a_cmd, $this->lng->txt("save"));
293  $form->addCommandButton($a_cmd_cancel, $this->lng->txt("cancel"));
294 
295 
296  require_once("Services/MetaData/classes/class.ilMDLanguageItem.php");
297  $lang_var = ilMDLanguageItem::_getLanguages();
298  include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
299  $lang = new ilSelectInputGUI($this->lng->txt("language"), "par_language");
300  $lang->setOptions($lang_var);
301  $form->addItem($lang);
302 
303  $prog_langs = $this->getProgLangOptions();
304  $code_style = new ilSelectInputGUI($this->lng->txt("cont_src"), "par_subcharacteristic");
305  $code_style->setOptions($prog_langs);
306  $form->addItem($code_style);
307  include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
308  $line_number = new ilCheckboxInputGUI($this->lng->txt("cont_show_line_numbers"), "par_showlinenumbers");
309  $form->addItem($line_number);
310  //$indent = new ilCheckboxInputGUI($this->lng->txt("cont_autoindent"), "par_autoindent");
311  //$form->addItem($indent);
312 
313 
314  include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
315  $code = new ilTextAreaInputGUI("", "par_content");
316  $code->setRows(12);
317  $form->addItem($code);
318 
319  include_once("./Services/Form/classes/class.ilTextInputGUI.php");
320  $downlaod_title = new ilTextInputGUI($this->lng->txt("cont_download_title"), "par_downloadtitle");
321  $downlaod_title->setSize(40);
322  $form->addItem($downlaod_title);
323 
324  include_once("./Services/Form/classes/class.ilFileInputGUI.php");
325  $file = new ilFileInputGUI($this->lng->txt("import_file"), "userfile");
326  $form->addItem($file);
327 
328  return $form;
329  }
330 }
$_SESSION["AccountId"]
create()
create new paragraph in dom and update page in db
This class represents a selection list property in a property form.
This class represents a property form user interface.
global $DIC
Definition: saml.php:7
$_GET["client_id"]
This class represents a file property in a property form.
edit()
edit paragraph form
$code
Definition: example_050.php:99
initPropertyForm($a_title, $a_cmd, $a_cmd_cancel)
initiates property form GUI class
Class ilPCSourcecodeGUI.
This class represents a checkbox property in a property form.
user()
Definition: user.php:4
executeCommand()
execute command
User Interface for Editing of Page Content Objects (Paragraphs, Tables, ...)
if(isset($_POST['submit'])) $form
Class ilPCSourceCode.
setSize($a_size)
Set Size.
displayValidationError()
display validation errors
This class represents a text property in a property form.
update()
update paragraph in dom and update page in db
$ilUser
Definition: imgupload.php:18
cancelCreate()
cancel creating paragraph
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
setOptions($a_options)
Set Options.
static getSupportedLanguagesV51()
Get supported languages (keys are ILIAS <= 5.1 internal values, values are for representation) ...
__construct($a_pg_obj, $a_content_obj, $a_hier_id, $a_pc_id="")
Constructor public.
This class represents a text area property in a property form.
getProgLangOptions()
Get selectable programming languages.
$ret
Definition: parser.php:6
for($i=1; $i<=count($kw_cases_sel); $i+=1) $lang
Definition: langwiz.php:349
$_POST["username"]
insert()
insert paragraph form