/workflow/engine/classes/class.pmDashlet.php

https://bitbucket.org/ferOnti/processmaker · PHP · 351 lines · 304 code · 33 blank · 14 comment · 31 complexity · e79cef0f4c94a16362fff5ce17244210 MD5 · raw file

  1. <?php
  2. require_once 'classes/interfaces/dashletInterface.php';
  3. require_once 'classes/model/Dashlet.php';
  4. require_once 'classes/model/DashletInstance.php';
  5. class PMDashlet extends DashletInstance implements DashletInterface
  6. {
  7. // Own properties
  8. private $dashletInstance;
  9. private $dashletObject;
  10. // Interface functions
  11. public static function getAdditionalFields ($className)
  12. {
  13. try {
  14. if (! class_exists( $className )) {
  15. self::setIncludePath();
  16. require_once 'classes' . PATH_SEP . 'class.' . $className . '.php';
  17. }
  18. G::LoadClass( $className );
  19. eval( "\$additionalFields = $className::getAdditionalFields(\$className);" );
  20. return $additionalFields;
  21. } catch (Exception $error) {
  22. throw $error;
  23. }
  24. }
  25. public function setup ($dasInsUid)
  26. {
  27. try {
  28. $this->dashletInstance = $this->loadDashletInstance( $dasInsUid );
  29. if (! isset( $this->dashletInstance['DAS_CLASS'] )) {
  30. throw new Exception( G::LoadTranslation( 'ID_ERROR_OBJECT_NOT_EXISTS' ) . ' - Probably the plugin related is disabled' );
  31. }
  32. $className = $this->dashletInstance['DAS_CLASS'];
  33. G::LoadClass( $className );
  34. if (! class_exists( $className )) {
  35. self::setIncludePath();
  36. require_once 'classes' . PATH_SEP . 'class.' . $className . '.php';
  37. }
  38. $this->dashletObject = new $className();
  39. $this->dashletObject->setup( $this->dashletInstance );
  40. } catch (Exception $error) {
  41. throw $error;
  42. }
  43. }
  44. public function render ($width = 300)
  45. {
  46. try {
  47. if (is_null( $this->dashletObject )) {
  48. throw new Exception( 'Please call to the function "setup" before call the function "render".' );
  49. }
  50. $this->dashletObject->render( $width );
  51. } catch (Exception $error) {
  52. throw $error;
  53. }
  54. }
  55. // Getter and Setters
  56. public function getDashletInstance ()
  57. {
  58. return $this->dashletInstance;
  59. }
  60. public function getDashletObject ()
  61. {
  62. return $this->dashletObject;
  63. }
  64. // Own functions
  65. public function getDashletsInstances ($start = null, $limit = null)
  66. {
  67. try {
  68. $dashletsInstances = array ();
  69. $criteria = new Criteria( 'workflow' );
  70. $criteria->addSelectColumn( '*' );
  71. $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN );
  72. if (! is_null( $start )) {
  73. $criteria->setOffset( $start );
  74. }
  75. if (! is_null( $limit )) {
  76. $criteria->setLimit( $limit );
  77. }
  78. $dataset = DashletInstancePeer::doSelectRS( $criteria );
  79. $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
  80. $dataset->next();
  81. while ($row = $dataset->getRow()) {
  82. $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] );
  83. $row['DAS_INS_STATUS_LABEL'] = ($row['DAS_INS_STATUS'] == '1' ? G::LoadTranslation( 'ID_ACTIVE' ) : G::LoadTranslation( 'ID_INACTIVE' ));
  84. $row['DAS_INS_TITLE'] = (isset( $arrayField['DAS_INS_TITLE'] ) && ! empty( $arrayField['DAS_INS_TITLE'] )) ? $arrayField['DAS_INS_TITLE'] : '';
  85. if (! class_exists( $row['DAS_CLASS'] )) {
  86. self::setIncludePath();
  87. require_once 'classes' . PATH_SEP . 'class.' . $row['DAS_CLASS'] . '.php';
  88. }
  89. eval( "\$row['DAS_VERSION'] = defined('" . $row['DAS_CLASS'] . "::version') ? " . $row['DAS_CLASS'] . "::version : \$row['DAS_VERSION'];" );
  90. switch ($row['DAS_INS_OWNER_TYPE']) {
  91. case 'EVERYBODY':
  92. $row['DAS_INS_OWNER_TITLE'] = G::LoadTranslation( 'ID_ALL_USERS' );
  93. break;
  94. case 'USER':
  95. require_once 'classes/model/Users.php';
  96. $userInstance = new Users();
  97. try {
  98. $user = $userInstance->load( $row['DAS_INS_OWNER_UID'] );
  99. $row['DAS_INS_OWNER_TITLE'] = $user['USR_FIRSTNAME'] . ' ' . $user['USR_LASTNAME'];
  100. } catch (Exception $error) {
  101. $this->remove( $row['DAS_INS_UID'] );
  102. $row['DAS_INS_UID'] = '';
  103. }
  104. break;
  105. case 'DEPARTMENT':
  106. require_once 'classes/model/Department.php';
  107. $departmentInstance = new Department();
  108. try {
  109. $department = $departmentInstance->load( $row['DAS_INS_OWNER_UID'] );
  110. $row['DAS_INS_OWNER_TITLE'] = $department['DEPO_TITLE'];
  111. } catch (Exception $error) {
  112. $this->remove( $row['DAS_INS_UID'] );
  113. $row['DAS_INS_UID'] = '';
  114. }
  115. break;
  116. case 'GROUP':
  117. require_once 'classes/model/Groupwf.php';
  118. $groupInstance = new Groupwf();
  119. try {
  120. $group = $groupInstance->load( $row['DAS_INS_OWNER_UID'] );
  121. $row['DAS_INS_OWNER_TITLE'] = $group['GRP_TITLE'];
  122. } catch (Exception $error) {
  123. $this->remove( $row['DAS_INS_UID'] );
  124. $row['DAS_INS_UID'] = '';
  125. }
  126. break;
  127. default:
  128. $row['DAS_INS_OWNER_TITLE'] = $row['DAS_INS_OWNER_TYPE'];
  129. break;
  130. }
  131. if ($row['DAS_INS_UID'] != '') {
  132. $dashletsInstances[] = $row;
  133. }
  134. $dataset->next();
  135. }
  136. return $dashletsInstances;
  137. } catch (Exception $error) {
  138. throw $error;
  139. }
  140. }
  141. public function getDashletsInstancesQuantity ()
  142. {
  143. try {
  144. $criteria = new Criteria( 'workflow' );
  145. $criteria->addSelectColumn( '*' );
  146. $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN );
  147. return DashletInstancePeer::doCount( $criteria );
  148. } catch (Exception $error) {
  149. throw $error;
  150. }
  151. }
  152. public function loadDashletInstance ($dasInsUid)
  153. {
  154. try {
  155. $dashletInstance = $this->load( $dasInsUid );
  156. //Load data from the serialized field
  157. $dashlet = new Dashlet();
  158. $dashletFields = $dashlet->load( $dashletInstance['DAS_UID'] );
  159. if (is_null( $dashletFields )) {
  160. $dashletFields = array ();
  161. }
  162. return array_merge( $dashletFields, $dashletInstance );
  163. } catch (Exception $error) {
  164. throw $error;
  165. }
  166. }
  167. public function saveDashletInstance ($data)
  168. {
  169. try {
  170. $this->createOrUpdate( $data );
  171. } catch (Exception $error) {
  172. throw $error;
  173. }
  174. }
  175. public function deleteDashletInstance ($dasInsUid)
  176. {
  177. try {
  178. $this->remove( $dasInsUid );
  179. } catch (Exception $error) {
  180. throw $error;
  181. }
  182. }
  183. public function getDashletsInstancesForUser ($userUid)
  184. {
  185. try {
  186. $dashletsInstances = array ();
  187. // Include required classes
  188. require_once 'classes/model/Department.php';
  189. require_once 'classes/model/Users.php';
  190. // Check for "public" dashlets
  191. $criteria = new Criteria( 'workflow' );
  192. $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_UID );
  193. $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES );
  194. $criteria->addSelectColumn( DashletPeer::DAS_CLASS );
  195. $criteria->addSelectColumn( DashletPeer::DAS_TITLE );
  196. $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN );
  197. $criteria->add( DashletInstancePeer::DAS_INS_OWNER_TYPE, 'EVERYBODY' );
  198. $dataset = DashletInstancePeer::doSelectRS( $criteria );
  199. $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
  200. $dataset->next();
  201. while ($row = $dataset->getRow()) {
  202. if (! isset( $dashletsInstances[$row['DAS_INS_UID']] )) {
  203. $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] );
  204. $row['DAS_XTEMPLATE'] = $this->getXTemplate( $row['DAS_CLASS'] );
  205. $row["DAS_TITLE"] = (isset( $arrayField["DAS_INS_TITLE"] ) && ! empty( $arrayField["DAS_INS_TITLE"] )) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"];
  206. $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset( $arrayField["DAS_INS_SUBTITLE"] ) && ! empty( $arrayField["DAS_INS_SUBTITLE"] )) ? str_replace( "@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"] ) : null);
  207. $dashletsInstances[$row['DAS_INS_UID']] = $row;
  208. }
  209. $dataset->next();
  210. }
  211. // Check for the direct assignments
  212. $usersInstance = new Users();
  213. $criteria = new Criteria( 'workflow' );
  214. $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_UID );
  215. $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES );
  216. $criteria->addSelectColumn( DashletPeer::DAS_CLASS );
  217. $criteria->addSelectColumn( DashletPeer::DAS_TITLE );
  218. $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN );
  219. $criteria->add( DashletInstancePeer::DAS_INS_OWNER_TYPE, 'USER' );
  220. $criteria->add( DashletInstancePeer::DAS_INS_OWNER_UID, $userUid );
  221. $dataset = DashletInstancePeer::doSelectRS( $criteria );
  222. $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
  223. $dataset->next();
  224. while ($row = $dataset->getRow()) {
  225. if (! isset( $dashletsInstances[$row['DAS_INS_UID']] )) {
  226. $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] );
  227. $row['DAS_XTEMPLATE'] = $this->getXTemplate( $row['DAS_CLASS'] );
  228. $row["DAS_TITLE"] = (isset( $arrayField["DAS_INS_TITLE"] ) && ! empty( $arrayField["DAS_INS_TITLE"] )) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"];
  229. $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset( $arrayField["DAS_INS_SUBTITLE"] ) && ! empty( $arrayField["DAS_INS_SUBTITLE"] )) ? str_replace( "@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"] ) : null);
  230. $dashletsInstances[$row['DAS_INS_UID']] = $row;
  231. }
  232. $dataset->next();
  233. }
  234. // Check for department assigments
  235. $departmentInstance = new Department();
  236. $departments = $departmentInstance->getDepartmentsForUser( $userUid );
  237. foreach ($departments as $depUid => $department) {
  238. $criteria = new Criteria( 'workflow' );
  239. $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_UID );
  240. $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES );
  241. $criteria->addSelectColumn( DashletPeer::DAS_CLASS );
  242. $criteria->addSelectColumn( DashletPeer::DAS_TITLE );
  243. $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN );
  244. $criteria->add( DashletInstancePeer::DAS_INS_OWNER_TYPE, 'DEPARTMENT' );
  245. $criteria->add( DashletInstancePeer::DAS_INS_OWNER_UID, $depUid );
  246. $dataset = DashletInstancePeer::doSelectRS( $criteria );
  247. $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
  248. $dataset->next();
  249. while ($row = $dataset->getRow()) {
  250. if (! isset( $dashletsInstances[$row['DAS_INS_UID']] )) {
  251. $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] );
  252. $row['DAS_XTEMPLATE'] = $this->getXTemplate( $row['DAS_CLASS'] );
  253. $row["DAS_TITLE"] = (isset( $arrayField["DAS_INS_TITLE"] ) && ! empty( $arrayField["DAS_INS_TITLE"] )) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"];
  254. $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset( $arrayField["DAS_INS_SUBTITLE"] ) && ! empty( $arrayField["DAS_INS_SUBTITLE"] )) ? str_replace( "@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"] ) : null);
  255. $dashletsInstances[$row['DAS_INS_UID']] = $row;
  256. }
  257. $dataset->next();
  258. }
  259. }
  260. // Check for group assignments
  261. G::LoadClass( 'groups' );
  262. $groupsInstance = new Groups();
  263. $groups = $groupsInstance->getGroupsForUser( $userUid );
  264. foreach ($groups as $grpUid => $group) {
  265. $criteria = new Criteria( 'workflow' );
  266. $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_UID );
  267. $criteria->addSelectColumn( DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES );
  268. $criteria->addSelectColumn( DashletPeer::DAS_CLASS );
  269. $criteria->addSelectColumn( DashletPeer::DAS_TITLE );
  270. $criteria->addJoin( DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN );
  271. $criteria->add( DashletInstancePeer::DAS_INS_OWNER_TYPE, 'GROUP' );
  272. $criteria->add( DashletInstancePeer::DAS_INS_OWNER_UID, $grpUid );
  273. $dataset = DashletInstancePeer::doSelectRS( $criteria );
  274. $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC );
  275. $dataset->next();
  276. while ($row = $dataset->getRow()) {
  277. if (! isset( $dashletsInstances[$row['DAS_INS_UID']] )) {
  278. $arrayField = unserialize( $row["DAS_INS_ADDITIONAL_PROPERTIES"] );
  279. $row['DAS_XTEMPLATE'] = $this->getXTemplate( $row['DAS_CLASS'] );
  280. $row["DAS_TITLE"] = (isset( $arrayField["DAS_INS_TITLE"] ) && ! empty( $arrayField["DAS_INS_TITLE"] )) ? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"];
  281. $row["DAS_TITLE"] = $row["DAS_TITLE"] . ((isset( $arrayField["DAS_INS_SUBTITLE"] ) && ! empty( $arrayField["DAS_INS_SUBTITLE"] )) ? str_replace( "@@USR_USERNAME", $_SESSION["USR_USERNAME"], $arrayField["DAS_INS_SUBTITLE"] ) : null);
  282. $dashletsInstances[$row['DAS_INS_UID']] = $row;
  283. }
  284. $dataset->next();
  285. }
  286. }
  287. // Check for role assigments
  288. // ToDo: Next release
  289. // Check for permission assigments
  290. // ToDo: Next release
  291. return array_values( $dashletsInstances );
  292. } catch (Exception $error) {
  293. throw $error;
  294. }
  295. }
  296. public static function getXTemplate ($className)
  297. {
  298. try {
  299. if (! class_exists( $className )) {
  300. self::setIncludePath();
  301. require_once 'classes' . PATH_SEP . 'class.' . $className . '.php';
  302. }
  303. G::LoadClass( $className );
  304. eval( "\$additionalFields = $className::getXTemplate(\$className);" );
  305. return $additionalFields;
  306. } catch (Exception $error) {
  307. throw $error;
  308. }
  309. }
  310. private static function setIncludePath ()
  311. {
  312. $oPluginRegistry = &PMPluginRegistry::getSingleton();
  313. $pluginsDashlets = $oPluginRegistry->getDashlets();
  314. foreach ($pluginsDashlets as $pluginDashlet) {
  315. set_include_path( get_include_path() . PATH_SEPARATOR . PATH_PLUGINS . $pluginDashlet . PATH_SEP );
  316. }
  317. }
  318. }