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

349 lines
14 KiB
PHP
Raw Normal View History

2011-10-28 12:20:45 -04:00
<?php
2012-01-03 18:31:15 -04:00
require_once 'classes/interfaces/dashletInterface.php';
require_once 'classes/model/Dashlet.php';
require_once 'classes/model/DashletInstance.php';
2011-10-28 12:20:45 -04:00
class PMDashlet extends DashletInstance implements DashletInterface {
// Own properties
private $dashletInstance;
2011-10-31 15:14:01 -04:00
private $dashletObject;
// Interface functions
public static function getAdditionalFields($className) {
try {
2012-01-03 18:31:15 -04:00
if (!class_exists($className)) {
$oPluginRegistry = &PMPluginRegistry::getSingleton();
$pluginsDashlets = $oPluginRegistry->getDashlets();
foreach ($pluginsDashlets as $pluginDashlet) {
set_include_path(get_include_path() . PATH_SEPARATOR . PATH_PLUGINS . $pluginDashlet . PATH_SEP);
}
require_once 'classes' . PATH_SEP . 'class.' . $className . '.php';
2012-01-03 18:31:15 -04:00
}
G::LoadClass($className);
eval("\$additionalFields = $className::getAdditionalFields(\$className);");
return $additionalFields;
}
catch (Exception $error) {
throw $error;
}
}
2012-01-03 18:31:15 -04:00
public function setup($dasInsUid) {
try {
$this->dashletInstance = $this->loadDashletInstance($dasInsUid);
if (!isset($this->dashletInstance['DAS_CLASS'])) {
throw new Exception(G::LoadTranslation('ID_ERROR_OBJECT_NOT_EXISTS') . ' - Probably the plugin related is disabled');
}
2012-01-03 18:31:15 -04:00
$className = $this->dashletInstance['DAS_CLASS'];
G::LoadClass($className);
if (!class_exists($className)) {
$oPluginRegistry = &PMPluginRegistry::getSingleton();
$pluginsDashlets = $oPluginRegistry->getDashlets();
foreach ($pluginsDashlets as $pluginDashlet) {
set_include_path(get_include_path() . PATH_SEPARATOR . PATH_PLUGINS . $pluginDashlet . PATH_SEP);
}
require_once 'classes' . PATH_SEP . 'class.' . $className . '.php';
2012-01-03 18:31:15 -04:00
}
$this->dashletObject = new $className();
$this->dashletObject->setup($this->dashletInstance);
}
catch (Exception $error) {
throw $error;
}
2011-10-28 12:20:45 -04:00
}
public function render($width = 300) {
try {
2011-10-31 15:58:51 -04:00
if (is_null($this->dashletObject)) {
throw new Exception('Please call to the function "setup" before call the function "render".');
}
$this->dashletObject->render($width);
}
catch (Exception $error) {
throw $error;
}
}
// Getter and Setters
public function getDashletInstance() {
return $this->dashletInstance;
}
public function getDashletObject() {
return $this->dashletObject;
}
// Own functions
2011-10-31 18:06:01 -04:00
public function getDashletsInstances($start = null, $limit = null) {
try {
2011-10-31 18:06:01 -04:00
$dashletsInstances = array();
$criteria = new Criteria('workflow');
$criteria->addSelectColumn('*');
$criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN);
2011-10-31 18:06:01 -04:00
if (!is_null($start)) {
$criteria->setOffset($start);
}
if (!is_null($limit)) {
$criteria->setLimit($limit);
}
$dataset = DashletInstancePeer::doSelectRS($criteria);
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$dataset->next();
while ($row = $dataset->getRow()) {
$arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]);
2011-10-31 20:19:21 -04:00
$row['DAS_INS_STATUS_LABEL'] = ($row['DAS_INS_STATUS'] == '1' ? G::LoadTranslation('ID_ACTIVE') : G::LoadTranslation('ID_INACTIVE'));
$row["DAS_INS_TITLE"] = (isset($arrayField["DAS_INS_TITLE"]) && !empty($arrayField["DAS_INS_TITLE"]))? $arrayField["DAS_INS_TITLE"] : "";
2011-10-31 20:19:21 -04:00
switch ($row['DAS_INS_OWNER_TYPE']) {
case 'EVERYBODY':
$row['DAS_INS_OWNER_TITLE'] = G::LoadTranslation('ID_ALL_USERS');
break;
case 'USER':
require_once 'classes/model/Users.php';
$userInstance = new Users();
try {
$user = $userInstance->load($row['DAS_INS_OWNER_UID']);
$row['DAS_INS_OWNER_TITLE'] = $user['USR_FIRSTNAME'] . ' ' . $user['USR_LASTNAME'];
}
catch (Exception $error) {
$this->remove($row['DAS_INS_UID']);
$row['DAS_INS_UID'] = '';
}
break;
2011-10-31 20:19:21 -04:00
case 'DEPARTMENT':
require_once 'classes/model/Department.php';
$departmentInstance = new Department();
try {
$department = $departmentInstance->load($row['DAS_INS_OWNER_UID']);
$row['DAS_INS_OWNER_TITLE'] = $department['DEPO_TITLE'];
}
catch (Exception $error) {
$this->remove($row['DAS_INS_UID']);
$row['DAS_INS_UID'] = '';
}
2011-10-31 20:19:21 -04:00
break;
case 'GROUP':
require_once 'classes/model/Groupwf.php';
$groupInstance = new Groupwf();
try {
$group = $groupInstance->load($row['DAS_INS_OWNER_UID']);
$row['DAS_INS_OWNER_TITLE'] = $group['GRP_TITLE'];
}
catch (Exception $error) {
$this->remove($row['DAS_INS_UID']);
$row['DAS_INS_UID'] = '';
}
break;
2011-10-31 20:19:21 -04:00
default:
$row['DAS_INS_OWNER_TITLE'] = $row['DAS_INS_OWNER_TYPE'];
break;
}
if ($row['DAS_INS_UID'] != '') {
$dashletsInstances[] = $row;
}
2011-10-31 18:06:01 -04:00
$dataset->next();
}
return $dashletsInstances;
}
catch (Exception $error) {
throw $error;
}
}
public function getDashletsInstancesQuantity() {
try {
2011-10-31 18:06:01 -04:00
$criteria = new Criteria('workflow');
$criteria->addSelectColumn('*');
$criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN);
2011-10-31 18:06:01 -04:00
return DashletInstancePeer::doCount($criteria);
}
catch (Exception $error) {
throw $error;
}
}
public function loadDashletInstance($dasInsUid) {
2011-10-31 15:14:01 -04:00
try {
2011-10-31 15:51:23 -04:00
$dashletInstance = $this->load($dasInsUid);
//Load data from the serialized field
2011-10-31 15:51:23 -04:00
$dashlet = new Dashlet();
$dashletFields = $dashlet->load($dashletInstance['DAS_UID']);
if (is_null($dashletFields)) {
$dashletFields = array();
}
2011-10-31 15:51:23 -04:00
return array_merge($dashletFields, $dashletInstance);
2011-10-31 15:14:01 -04:00
}
catch (Exception $error) {
throw $error;
}
}
public function saveDashletInstance($data) {
try {
2011-10-31 19:06:40 -04:00
$this->createOrUpdate($data);
}
catch (Exception $error) {
throw $error;
}
}
public function deleteDashletInstance($dasInsUid) {
try {
2011-10-31 19:06:40 -04:00
$this->remove($dasInsUid);
}
catch (Exception $error) {
throw $error;
}
}
public function getDashletsInstancesForUser($userUid) {
try {
2011-10-31 18:45:18 -04:00
$dashletsInstances = array();
2011-10-31 18:06:01 -04:00
// Include required classes
2011-10-31 18:45:18 -04:00
require_once 'classes/model/Department.php';
require_once 'classes/model/Users.php';
2011-10-31 18:06:01 -04:00
// Check for "public" dashlets
$criteria = new Criteria('workflow');
$criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID);
$criteria->addSelectColumn(DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES);
$criteria->addSelectColumn(DashletPeer::DAS_CLASS);
$criteria->addSelectColumn(DashletPeer::DAS_TITLE);
$criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN);
$criteria->add(DashletInstancePeer::DAS_INS_OWNER_TYPE, 'EVERYBODY');
$dataset = DashletInstancePeer::doSelectRS($criteria);
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$dataset->next();
while ($row = $dataset->getRow()) {
if (!isset($dashletsInstances[$row['DAS_INS_UID']])) {
$arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]);
2012-01-03 18:31:15 -04:00
$row['DAS_XTEMPLATE'] = $this->getXTemplate($row['DAS_CLASS']);
$row["DAS_TITLE"] = (isset($arrayField["DAS_INS_TITLE"]) && !empty($arrayField["DAS_INS_TITLE"]))? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"];
$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);
$dashletsInstances[$row['DAS_INS_UID']] = $row;
}
$dataset->next();
}
2011-10-31 18:06:01 -04:00
// Check for the direct assignments
$usersInstance = new Users();
$criteria = new Criteria('workflow');
$criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID);
$criteria->addSelectColumn(DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES);
$criteria->addSelectColumn(DashletPeer::DAS_CLASS);
$criteria->addSelectColumn(DashletPeer::DAS_TITLE);
$criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN);
$criteria->add(DashletInstancePeer::DAS_INS_OWNER_TYPE, 'USER');
$criteria->add(DashletInstancePeer::DAS_INS_OWNER_UID, $userUid);
$dataset = DashletInstancePeer::doSelectRS($criteria);
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$dataset->next();
while ($row = $dataset->getRow()) {
if (!isset($dashletsInstances[$row['DAS_INS_UID']])) {
$arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]);
2012-01-03 18:31:15 -04:00
$row['DAS_XTEMPLATE'] = $this->getXTemplate($row['DAS_CLASS']);
$row["DAS_TITLE"] = (isset($arrayField["DAS_INS_TITLE"]) && !empty($arrayField["DAS_INS_TITLE"]))? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"];
$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);
$dashletsInstances[$row['DAS_INS_UID']] = $row;
}
$dataset->next();
}
2011-10-31 18:06:01 -04:00
// Check for department assigments
2011-10-31 18:27:10 -04:00
$departmentInstance = new Department();
$departments = $departmentInstance->getDepartmentsForUser($userUid);
foreach ($departments as $depUid => $department) {
2011-10-31 18:45:18 -04:00
$criteria = new Criteria('workflow');
$criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID);
$criteria->addSelectColumn(DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES);
$criteria->addSelectColumn(DashletPeer::DAS_CLASS);
2011-10-31 18:45:18 -04:00
$criteria->addSelectColumn(DashletPeer::DAS_TITLE);
$criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN);
2011-10-31 18:45:18 -04:00
$criteria->add(DashletInstancePeer::DAS_INS_OWNER_TYPE, 'DEPARTMENT');
$criteria->add(DashletInstancePeer::DAS_INS_OWNER_UID, $depUid);
$dataset = DashletInstancePeer::doSelectRS($criteria);
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$dataset->next();
while ($row = $dataset->getRow()) {
if (!isset($dashletsInstances[$row['DAS_INS_UID']])) {
$arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]);
2012-01-03 18:31:15 -04:00
$row['DAS_XTEMPLATE'] = $this->getXTemplate($row['DAS_CLASS']);
$row["DAS_TITLE"] = (isset($arrayField["DAS_INS_TITLE"]) && !empty($arrayField["DAS_INS_TITLE"]))? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"];
$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);
2011-10-31 18:45:18 -04:00
$dashletsInstances[$row['DAS_INS_UID']] = $row;
}
$dataset->next();
}
2011-10-31 18:27:10 -04:00
}
2011-10-31 18:06:01 -04:00
// Check for group assignments
G::LoadClass('groups');
$groupsInstance = new Groups();
$groups = $groupsInstance->getGroupsForUser($userUid);
foreach ($groups as $grpUid => $group) {
$criteria = new Criteria('workflow');
$criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID);
$criteria->addSelectColumn(DashletInstancePeer::DAS_INS_ADDITIONAL_PROPERTIES);
$criteria->addSelectColumn(DashletPeer::DAS_CLASS);
$criteria->addSelectColumn(DashletPeer::DAS_TITLE);
$criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::INNER_JOIN);
$criteria->add(DashletInstancePeer::DAS_INS_OWNER_TYPE, 'GROUP');
$criteria->add(DashletInstancePeer::DAS_INS_OWNER_UID, $grpUid);
$dataset = DashletInstancePeer::doSelectRS($criteria);
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$dataset->next();
while ($row = $dataset->getRow()) {
if (!isset($dashletsInstances[$row['DAS_INS_UID']])) {
$arrayField = unserialize($row["DAS_INS_ADDITIONAL_PROPERTIES"]);
2012-01-03 18:31:15 -04:00
$row['DAS_XTEMPLATE'] = $this->getXTemplate($row['DAS_CLASS']);
$row["DAS_TITLE"] = (isset($arrayField["DAS_INS_TITLE"]) && !empty($arrayField["DAS_INS_TITLE"]))? $arrayField["DAS_INS_TITLE"] : $row["DAS_TITLE"];
$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);
$dashletsInstances[$row['DAS_INS_UID']] = $row;
}
$dataset->next();
}
}
2011-10-31 18:06:01 -04:00
// Check for role assigments
// ToDo: Next release
// Check for permission assigments
// ToDo: Next release
2011-10-31 18:45:18 -04:00
return array_values($dashletsInstances);
}
catch (Exception $error) {
throw $error;
}
2011-10-28 12:20:45 -04:00
}
2012-01-03 18:31:15 -04:00
public static function getXTemplate($className) {
try {
if (!class_exists($className)) {
$oPluginRegistry = &PMPluginRegistry::getSingleton();
$pluginsDashlets = $oPluginRegistry->getDashlets();
foreach ($pluginsDashlets as $pluginDashlet) {
set_include_path(get_include_path() . PATH_SEPARATOR . PATH_PLUGINS . $pluginDashlet . PATH_SEP);
}
require_once ("classes" . PATH_SEP . "class." . $className . ".php");
2012-01-03 18:31:15 -04:00
}
G::LoadClass($className);
eval("\$additionalFields = $className::getXTemplate(\$className);");
return $additionalFields;
}
catch (Exception $error) {
throw $error;
}
}
2011-10-28 12:20:45 -04:00
}