Files
luos/workflow/engine/classes/class.pmDashlet.php
2011-10-31 19:06:40 -04:00

149 lines
4.3 KiB
PHP

<?php
require_once 'interfaces/dashletInterface.php';
require_once 'model/Dashlet.php';
require_once 'model/DashletInstance.php';
class PMDashlet extends DashletInstance implements DashletInterface {
// Own properties
private $dashletObject;
// Interface functions
public function setup($dasInsUid) {
try {
$dashletInstance = $this->getDashletInstance($dasInsUid);
G::LoadClass($dashletInstance['DAS_CLASS']);
$this->dashletObject = new $dashletInstance['DAS_CLASS']();
$this->dashletObject->setup($dashletInstance);
}
catch (Exception $error) {
throw $error;
}
}
public function render($width = 300) {
try {
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;
}
}
// Own functions
public function getDashletsInstances($start = null, $limit = null) {
try {
$dashletsInstances = array();
$criteria = new Criteria('workflow');
$criteria->addSelectColumn('*');
$criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::LEFT_JOIN);
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()) {
$dashletsInstances[] = $row;
$dataset->next();
}
return $dashletsInstances;
}
catch (Exception $error) {
throw $error;
}
}
public function getDashletsInstancesQuantity() {
try {
$criteria = new Criteria('workflow');
$criteria->addSelectColumn('*');
$criteria->addJoin(DashletInstancePeer::DAS_UID, DashletPeer::DAS_UID, Criteria::LEFT_JOIN);
return DashletInstancePeer::doCount($criteria);
}
catch (Exception $error) {
throw $error;
}
}
public function getDashletInstance($dasInsUid) {
try {
$dashletInstance = $this->load($dasInsUid);
$dashlet = new Dashlet();
$dashletFields = $dashlet->load($dashletInstance['DAS_UID']);
return array_merge($dashletFields, $dashletInstance);
}
catch (Exception $error) {
throw $error;
}
}
public function saveDashletInstance($data) {
try {
$this->createOrUpdate($data);
}
catch (Exception $error) {
throw $error;
}
}
public function deleteDashletInstance($dasInsUid) {
try {
$this->remove($dasInsUid);
}
catch (Exception $error) {
throw $error;
}
}
public function getDashletsInstancesForUser($userUid) {
try {
$dashletsInstances = array();
// Include required classes
require_once 'classes/model/Department.php';
// Check for "public" dashlets
// ToDo: Next release
// Check for the direct assignments
// ToDo: Next release
// Check for department assigments
$departmentInstance = new Department();
$departments = $departmentInstance->getDepartmentsForUser($userUid);
foreach ($departments as $depUid => $department) {
$criteria = new Criteria('workflow');
$criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID);
$criteria->addSelectColumn(DashletPeer::DAS_TITLE);
$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']])) {
$dashletsInstances[$row['DAS_INS_UID']] = $row;
}
$dataset->next();
}
}
// Check for group assignments
// ToDo: Next release
// Check for role assigments
// ToDo: Next release
// Check for permission assigments
// ToDo: Next release
return array_values($dashletsInstances);
}
catch (Exception $error) {
throw $error;
}
}
}