ILIAS  release_4-3 Revision
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilObjPortfolio.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 require_once "Services/Object/classes/class.ilObject2.php";
5 
15 {
16  protected $online; // [bool]
17  protected $comments; // [bool]
18  protected $default; // [bool]
19  protected $bg_color; // [string]
20  protected $font_color; // [string]
21  protected $img; // [string]
22  protected $ppic; // [string]
23 
24  function initType()
25  {
26  $this->type = "prtf";
27  }
28 
34  function setOnline($a_value)
35  {
36  $this->online = (bool)$a_value;
37  }
38 
44  function isOnline()
45  {
46  return $this->online;
47  }
48 
54  function setPublicComments($a_value)
55  {
56  $this->comments = (bool)$a_value;
57  }
58 
64  function hasPublicComments()
65  {
66  return $this->comments;
67  }
68 
74  function hasProfilePicture()
75  {
76  return $this->ppic;
77  }
78 
84  function setProfilePicture($a_status)
85  {
86  $this->ppic = (bool)$a_status;
87  }
88 
94  function setDefault($a_value)
95  {
96  $this->default = (bool)$a_value;
97  }
98 
104  function isDefault()
105  {
106  return $this->default;
107  }
108 
109 
116  {
117  if(!$this->bg_color)
118  {
119  $this->bg_color = "ffffff";
120  }
121  return $this->bg_color;
122  }
123 
129  function setBackgroundColor($a_value)
130  {
131  $this->bg_color = (string)$a_value;
132  }
133 
139  function getFontColor()
140  {
141  if(!$this->font_color)
142  {
143  $this->font_color = "505050";
144  }
145  return $this->font_color;
146  }
147 
153  function setFontColor($a_value)
154  {
155  $this->font_color = (string)$a_value;
156  }
157 
163  function getImage()
164  {
165  return $this->img;
166  }
167 
173  function setImage($a_value)
174  {
175  $this->img = (string)$a_value;
176  }
177 
178  protected function doRead()
179  {
180  global $ilDB;
181 
182  $set = $ilDB->query("SELECT * FROM usr_portfolio".
183  " WHERE id = ".$ilDB->quote($this->id, "integer"));
184  $row = $ilDB->fetchAssoc($set);
185  $this->setOnline((bool)$row["is_online"]);
186  $this->setPublicComments((bool)$row["comments"]);
187  $this->setProfilePicture((bool)$row["ppic"]);
188  $this->setDefault((bool)$row["is_default"]);
189  $this->setBackgroundColor($row["bg_color"]);
190  $this->setFontColor($row["font_color"]);
191  $this->setImage($row["img"]);
192  }
193 
194  protected function doCreate()
195  {
196  global $ilDB;
197 
198  $ilDB->manipulate("INSERT INTO usr_portfolio (id,is_online,is_default)".
199  " VALUES (".$ilDB->quote($this->id, "integer").",".
200  $ilDB->quote($this->isOnline(), "integer").",".
201  $ilDB->quote($this->isDefault(), "integer").")");
202  }
203 
204  protected function doUpdate()
205  {
206  global $ilDB;
207 
208  // must be online to be default
209  if(!$this->isOnline() && $this->isDefault())
210  {
211  $this->setDefault(false);
212  }
213 
214  $ilDB->manipulate("UPDATE usr_portfolio SET".
215  " is_online = ".$ilDB->quote($this->isOnline(), "integer").
216  ",comments = ".$ilDB->quote($this->hasPublicComments(), "integer").
217  ",ppic = ".$ilDB->quote($this->hasProfilePicture(), "integer").
218  ",is_default = ".$ilDB->quote($this->isDefault(), "integer").
219  ",bg_color = ".$ilDB->quote($this->getBackgroundColor(), "text").
220  ",font_color = ".$ilDB->quote($this->getFontcolor(), "text").
221  ",img = ".$ilDB->quote($this->getImage(), "text").
222  " WHERE id = ".$ilDB->quote($this->id, "integer"));
223  }
224 
225  protected function doDelete()
226  {
227  global $ilDB;
228 
229  // delete pages
230  include_once "Services/Portfolio/classes/class.ilPortfolioPage.php";
231  $pages = ilPortfolioPage::getAllPages($this->id);
232  foreach($pages as $page)
233  {
234  $page = new ilPortfolioPage($this->id, $page["id"]);
235  $page->delete();
236  }
237 
238  $this->deleteImage();
239 
240  $ilDB->manipulate("DELETE FROM usr_portfolio".
241  " WHERE id = ".$ilDB->quote($this->id, "integer"));
242  }
243 
250  public static function setUserDefault($a_user_id, $a_portfolio_id = null)
251  {
252  global $ilDB;
253 
254  $all = array();
255  foreach(self::getPortfoliosOfUser($a_user_id) as $item)
256  {
257  $all[] = $item["id"];
258  }
259  if($all)
260  {
261  $ilDB->manipulate("UPDATE usr_portfolio".
262  " SET is_default = ".$ilDB->quote(false, "integer").
263  " WHERE ".$ilDB->in("id", $all, "", "integer"));
264  }
265 
266  if($a_portfolio_id)
267  {
268  $ilDB->manipulate("UPDATE usr_portfolio".
269  " SET is_default = ".$ilDB->quote(true, "integer").
270  " WHERE id = ".$ilDB->quote($a_portfolio_id, "integer"));
271  }
272  }
273 
280  static function getPortfoliosOfUser($a_user_id)
281  {
282  global $ilDB;
283 
284  $set = $ilDB->query("SELECT up.*,od.title,od.description".
285  " FROM usr_portfolio up".
286  " JOIN object_data od ON (up.id = od.obj_id)".
287  " WHERE od.owner = ".$ilDB->quote($a_user_id, "integer").
288  " ORDER BY od.title");
289  $res = array();
290  while ($rec = $ilDB->fetchAssoc($set))
291  {
292  $res[] = $rec;
293  }
294  return $res;
295  }
296 
303  static function getDefaultPortfolio($a_user_id)
304  {
305  global $ilDB, $ilSetting;
306 
307  if(!$ilSetting->get('user_portfolios'))
308  {
309  return;
310  }
311 
312  $set = $ilDB->query("SELECT up.id FROM usr_portfolio up".
313  " JOIN object_data od ON (up.id = od.obj_id)".
314  " WHERE od.owner = ".$ilDB->quote($a_user_id, "integer").
315  " AND up.is_default = ".$ilDB->quote(1, "integer"));
316  $res = $ilDB->fetchAssoc($set);
317  if($res["id"])
318  {
319  return $res["id"];
320  }
321  }
322 
328  function getImageFullPath($a_as_thumb = false)
329  {
330  if($this->img)
331  {
332  $path = $this->initStorage($this->id);
333  if(!$a_as_thumb)
334  {
335  return $path.$this->img;
336  }
337  else
338  {
339  return $path."thb_".$this->img;
340  }
341  }
342  }
343 
347  public function deleteImage()
348  {
349  if($this->id)
350  {
351  include_once "Services/Portfolio/classes/class.ilFSStoragePortfolio.php";
352  $storage = new ilFSStoragePortfolio($this->id);
353  $storage->delete();
354 
355  $this->setImage(null);
356  }
357  }
358 
366  public static function initStorage($a_id, $a_subdir = null)
367  {
368  include_once "Services/Portfolio/classes/class.ilFSStoragePortfolio.php";
369  $storage = new ilFSStoragePortfolio($a_id);
370  $storage->create();
371 
372  $path = $storage->getAbsolutePath()."/";
373 
374  if($a_subdir)
375  {
376  $path .= $a_subdir."/";
377 
378  if(!is_dir($path))
379  {
380  mkdir($path);
381  }
382  }
383 
384  return $path;
385  }
386 
393  function uploadImage(array $a_upload)
394  {
395  if(!$this->id)
396  {
397  return false;
398  }
399 
400  $this->deleteImage();
401 
402  // #10074
403  $clean_name = preg_replace("/[^a-zA-Z0-9\_\.\-]/", "", $a_upload["name"]);
404 
405  $path = $this->initStorage($this->id);
406  $original = "org_".$this->id."_".$clean_name;
407  $thumb = "thb_".$this->id."_".$clean_name;
408  $processed = $this->id."_".$clean_name;
409 
410  if(@move_uploaded_file($a_upload["tmp_name"], $path.$original))
411  {
412  chmod($path.$original, 0770);
413 
414  $prfa_set = new ilSetting("prfa");
415  $dimensions = $prfa_set->get("banner_width")."x".
416  $prfa_set->get("banner_height");
417 
418  // take quality 100 to avoid jpeg artefacts when uploading jpeg files
419  // taking only frame [0] to avoid problems with animated gifs
420  $original_file = ilUtil::escapeShellArg($path.$original);
421  $thumb_file = ilUtil::escapeShellArg($path.$thumb);
422  $processed_file = ilUtil::escapeShellArg($path.$processed);
423  ilUtil::execConvert($original_file."[0] -geometry 100x100 -quality 100 JPEG:".$thumb_file);
424  ilUtil::execConvert($original_file."[0] -geometry ".$dimensions."! -quality 100 JPEG:".$processed_file);
425 
426  $this->setImage($processed);
427  return true;
428  }
429  return false;
430  }
431 
437  public static function deleteUserPortfolios($a_user_id)
438  {
439  $all = self::getPortfoliosOfUser($a_user_id);
440  if($all)
441  {
442  include_once "Services/Portfolio/classes/class.ilPortfolioAccessHandler.php";
443  $access_handler = new ilPortfolioAccessHandler();
444 
445  foreach($all as $item)
446  {
447  $access_handler->removePermission($item["id"]);
448 
449  $portfolio = new self($item["id"], false);
450  $portfolio->delete();
451  }
452  }
453  }
454 }
455 
456 ?>