ILIAS  release_4-3 Revision
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilLPStatusPlugin.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 include_once './Services/Tracking/classes/class.ilLPStatus.php';
5 
14 {
15  static protected $plugins; // [array]
16 
17  const INACTIVE_PLUGIN = -1;
18 
25  protected static function initPluginObj($a_obj_id)
26  {
27  if(!isset(self::$plugins[$a_obj_id]))
28  {
29  self::$plugins[$a_obj_id] = false;
30 
31  // active plugin?
32  include_once 'Services/Repository/classes/class.ilRepositoryObjectPluginSlot.php';
34  {
35  $obj = ilObjectFactory::getInstanceByObjId($a_obj_id);
36  if($obj && $obj instanceof ilLPStatusPluginInterface)
37  {
38  self::$plugins[$a_obj_id] = $obj;
39  }
40  }
41  // inactive plugin?
43  {
44  self::$plugins[$a_obj_id] = self::INACTIVE_PLUGIN;
45  }
46  }
47 
48  return self::$plugins[$a_obj_id];
49  }
50 
51  function _getNotAttempted($a_obj_id)
52  {
53  $plugin = self::initPluginObj($a_obj_id);
54  if($plugin)
55  {
56  if($plugin !== self::INACTIVE_PLUGIN)
57  {
58  return (array)$plugin->getLPNotAttempted();
59  }
60  else
61  {
62  // re-use existing data for inactive plugin
64  }
65  }
66  return array();
67  }
68 
69  function _getInProgress($a_obj_id)
70  {
71  $plugin = self::initPluginObj($a_obj_id);
72  if($plugin)
73  {
74  if($plugin !== self::INACTIVE_PLUGIN)
75  {
76  return (array)$plugin->getLPInProgress();
77  }
78  else
79  {
80  // re-use existing data for inactive plugin
82  }
83  }
84  return array();
85  }
86 
87  function _getCompleted($a_obj_id)
88  {
89  $plugin = self::initPluginObj($a_obj_id);
90  if($plugin)
91  {
92  if($plugin !== self::INACTIVE_PLUGIN)
93  {
94  return (array)$plugin->getLPCompleted();
95  }
96  else
97  {
98  // re-use existing data for inactive plugin
100  }
101  }
102  return array();
103  }
104 
105  function _getFailed($a_obj_id)
106  {
107  $plugin = self::initPluginObj($a_obj_id);
108  if($plugin)
109  {
110  if($plugin !== self::INACTIVE_PLUGIN)
111  {
112  return (array)$plugin->getLPFailed();
113  }
114  else
115  {
116  // re-use existing data for inactive plugin
117  return self::getLPStatusData($a_obj_id, LP_STATUS_FAILED_NUM);
118  }
119  }
120  return array();
121  }
122 
123  function determineStatus($a_obj_id, $a_user_id, $a_obj = null)
124  {
125  $plugin = self::initPluginObj($a_obj_id);
126  if($plugin)
127  {
128  if($plugin !== self::INACTIVE_PLUGIN)
129  {
130  // :TODO: create read_event here to make sure?
131  return $plugin->getLPStatusForUser($a_user_id);
132  }
133  else
134  {
135  // re-use existing data for inactive plugin
136  return self::getLPDataForUser($a_obj_id, $a_user_id);
137  }
138  }
139  // #11368
141  }
142 
143  function determinePercentage($a_obj_id, $a_user_id, $a_obj = null)
144  {
145  $plugin = self::initPluginObj($a_obj_id);
146  if($plugin)
147  {
148  if($plugin !== self::INACTIVE_PLUGIN)
149  {
150  if (method_exists($plugin, "getPercentageForUser"))
151  {
152  return $plugin->getPercentageForUser($a_user_id);
153  }
154  }
155  // re-use existing data for inactive plugin
156  return self::getPercentageForUser($a_obj_id, $a_user_id);
157  }
158  // #11368
159  return 0;
160  }
161 
169  protected static function getLPStatusData($a_obj_id, $a_status)
170  {
171  global $ilDB;
172 
173  $all = array();
174 
175  $set = $ilDB->query("SELECT usr_id".
176  " FROM ut_lp_marks".
177  " WHERE obj_id = ".$ilDB->quote($a_obj_id, "integer").
178  " AND status = ".$ilDB->quote($a_status, "integer"));
179  while($row = $ilDB->fetchAssoc($set))
180  {
181  $all[] = $row["usr_id"];
182  }
183  return $all;
184  }
185 
193  protected static function getLPDataForUser($a_obj_id, $a_user_id)
194  {
195  global $ilDB;
196 
197  $set = $ilDB->query("SELECT status".
198  " FROM ut_lp_marks".
199  " WHERE obj_id = ".$ilDB->quote($a_obj_id, "integer").
200  " AND usr_id = ".$ilDB->quote($a_user_id, "integer"));
201  $row = $ilDB->fetchAssoc($set);
202  $status = $row["status"];
203  if(!$status)
204  {
205  $status = LP_STATUS_NOT_ATTEMPTED_NUM;
206  }
207  return $status;
208  }
209 
210  protected static function getPercentageForUser($a_obj_id, $a_user_id)
211  {
212  global $ilDB;
213 
214  $set = $ilDB->query("SELECT percentage".
215  " FROM ut_lp_marks".
216  " WHERE obj_id = ".$ilDB->quote($a_obj_id, "integer").
217  " AND usr_id = ".$ilDB->quote($a_user_id, "integer"));
218  $row = $ilDB->fetchAssoc($set);
219  return (int) $row["percentage"];
220  }
221 }
222 
223 ?>