diff --git a/workflow/engine/classes/class.groups.php b/workflow/engine/classes/class.groups.php index 2283ee1a5..a942e90f1 100755 --- a/workflow/engine/classes/class.groups.php +++ b/workflow/engine/classes/class.groups.php @@ -169,14 +169,14 @@ class Groups throw $e; } } - + /** * Get Available Groups for a single user * @author Qennix * @param string $sUserUid * @return object */ - + function getAvailableGroupsCriteria($sUserUid, $filter=''){ try{ $oCriteria = new Criteria('workflow'); @@ -200,25 +200,25 @@ class Groups $oCriteria->add(GroupwfPeer::GRP_STATUS, 'ACTIVE'); $oCriteria->add(ContentPeer::CON_CATEGORY,'GRP_TITLE'); $oCriteria->add(ContentPeer::CON_LANG,SYS_LANG); - + if ($filter !=''){ $oCriteria->add(ContentPeer::CON_VALUE,'%'.$filter.'%',Criteria::LIKE); } - + return $oCriteria; } catch(exception $e){ throw $e; } } - + /** * Get Assigned Groups for a single user * @author Qennix * @param string $sUserUid * @return object */ - + function getAssignedGroupsCriteria($sUserUid, $filter=''){ try{ $oCriteria = new Criteria('workflow'); @@ -231,19 +231,33 @@ class Groups $oCriteria->add(GroupwfPeer::GRP_STATUS, 'ACTIVE'); $oCriteria->add(ContentPeer::CON_CATEGORY,'GRP_TITLE'); $oCriteria->add(ContentPeer::CON_LANG,SYS_LANG); - + if ($filter !=''){ $oCriteria->add(ContentPeer::CON_VALUE,'%'.$filter.'%',Criteria::LIKE); } - + return $oCriteria; } catch(exception $e){ throw $e; } } - + function getGroupsForUser($usrUid) { + $criteria = $this->getAssignedGroupsCriteria($usrUid); + $criteria->addAscendingOrderByColumn(ContentPeer::CON_VALUE); + $dataset = GroupwfPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + $groups = array(); + while ($row = $dataset->getRow()) { + if (!isset($groups[$row['GRP_UID']])) { + $groups[$row['GRP_UID']] = $row; + } + $dataset->next(); + } + return $groups; + } /** * Remove a user from all groups diff --git a/workflow/engine/classes/class.pmDashlet.php b/workflow/engine/classes/class.pmDashlet.php index 6ad95cadf..de689bc8e 100644 --- a/workflow/engine/classes/class.pmDashlet.php +++ b/workflow/engine/classes/class.pmDashlet.php @@ -55,12 +55,24 @@ class PMDashlet extends DashletInstance implements DashletInterface { while ($row = $dataset->getRow()) { $row['DAS_INS_STATUS_LABEL'] = ($row['DAS_INS_STATUS'] == '1' ? G::LoadTranslation('ID_ACTIVE') : G::LoadTranslation('ID_INACTIVE')); switch ($row['DAS_INS_OWNER_TYPE']) { + case 'USER': + require_once 'classes/model/Users.php'; + $userInstance = new Users(); + $user = $userInstance->load($row['DAS_INS_OWNER_UID']); + $row['DAS_INS_OWNER_TITLE'] = $user['USR_FIRSTNAME'] . ' ' . $user['USR_LASTNAME']; + break; case 'DEPARTMENT': require_once 'classes/model/Department.php'; $departmentInstance = new Department(); $department = $departmentInstance->load($row['DAS_INS_OWNER_UID']); $row['DAS_INS_OWNER_TITLE'] = $department['DEPO_TITLE']; break; + case 'GROUP': + require_once 'classes/model/Groupwf.php'; + $groupInstance = new Groupwf(); + $group = $groupInstance->load($row['DAS_INS_OWNER_UID']); + $row['DAS_INS_OWNER_TITLE'] = $group['GRP_TITLE']; + break; default: $row['DAS_INS_OWNER_TITLE'] = $row['DAS_INS_OWNER_TYPE']; break; @@ -125,11 +137,28 @@ class PMDashlet extends DashletInstance implements DashletInterface { // Check for "public" dashlets // ToDo: Next release // Check for the direct assignments - // ToDo: Next release + require_once 'classes/model/Users.php'; + $usersInstance = new Users(); + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID); + $criteria->addSelectColumn(DashletPeer::DAS_TITLE); + $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_CONTEXT_TIME); + $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']])) { + $row['DAS_TITLE'] .= ' (' . $row['DAS_INS_CONTEXT_TIME'] . ')'; + $dashletsInstances[$row['DAS_INS_UID']] = $row; + } + $dataset->next(); + } // Check for department assigments $departmentInstance = new Department(); $departments = $departmentInstance->getDepartmentsForUser($userUid); - foreach ($departments as $depUid => $department) { + foreach ($departments as $depUid => $department) { $criteria = new Criteria('workflow'); $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_UID); $criteria->addSelectColumn(DashletPeer::DAS_TITLE); @@ -148,7 +177,27 @@ class PMDashlet extends DashletInstance implements DashletInterface { } } // Check for group assignments - // ToDo: Next release + 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(DashletPeer::DAS_TITLE); + $criteria->addSelectColumn(DashletInstancePeer::DAS_INS_CONTEXT_TIME); + $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']])) { + $row['DAS_TITLE'] .= ' (' . $row['DAS_INS_CONTEXT_TIME'] . ')'; + $dashletsInstances[$row['DAS_INS_UID']] = $row; + } + $dataset->next(); + } + } // Check for role assigments // ToDo: Next release // Check for permission assigments diff --git a/workflow/engine/controllers/dashboard.php b/workflow/engine/controllers/dashboard.php index 7634665f0..754bee9d4 100644 --- a/workflow/engine/controllers/dashboard.php +++ b/workflow/engine/controllers/dashboard.php @@ -157,12 +157,91 @@ class Dashboard extends Controller { return $result; } - public function getOwnersByType($type) { + public function getOwnersByType($data) { $this->setResponseType('json'); $result = new stdclass(); $result->status = 'OK'; try { - //ToDo: For the next release + switch ($data->type) { + case 'USER': + require_once 'classes/model/Users.php'; + + $users = array(); + + $usersInstance = new Users(); + $allUsers = $usersInstance->getAll(); + foreach ($allUsers->data as $user) { + $users[] = array('OWNER_UID' => $user['USR_UID'], 'OWNER_NAME' => $user['USR_FIRSTNAME'] . ' ' . $user['USR_LASTNAME']); + } + + $result->total = $allUsers->totalCount; + $result->owners = $users; + break; + case 'DEPARTMENT': + require_once 'classes/model/Department.php'; + require_once 'classes/model/Content.php'; + + $departments = array(); + //SELECT + $criteria = new Criteria('workflow'); + $criteria->setDistinct(); + $criteria->addSelectColumn(DepartmentPeer::DEP_UID); + $criteria->addSelectColumn(ContentPeer::CON_VALUE); + //FROM + $conditions = array(); + $conditions[] = array(DepartmentPeer::DEP_UID, ContentPeer::CON_ID); + $conditions[] = array(ContentPeer::CON_CATEGORY, DBAdapter::getStringDelimiter() . 'DEPO_TITLE' . DBAdapter::getStringDelimiter()); + $conditions[] = array(ContentPeer::CON_LANG, DBAdapter::getStringDelimiter() . 'en' . DBAdapter::getStringDelimiter()); + $criteria->addJoinMC($conditions, Criteria::LEFT_JOIN); + //WHERE + $criteria->add(DepartmentPeer::DEP_STATUS, 'ACTIVE'); + //ORDER BY + $criteria->addAscendingOrderByColumn(ContentPeer::CON_VALUE); + + $dataset = DepartmentPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + while ($row = $dataset->getRow()) { + $departments[] = array('OWNER_UID' => $row['DEP_UID'], 'OWNER_NAME' => $row['CON_VALUE']); + $dataset->next(); + } + + $result->total = DepartmentPeer::doCount($criteria); + $result->owners = $departments; + break; + case 'GROUP': + require_once 'classes/model/Groupwf.php'; + require_once 'classes/model/Content.php'; + + $groups = array(); + //SELECT + $criteria = new Criteria('workflow'); + $criteria->setDistinct(); + $criteria->addSelectColumn(GroupwfPeer::GRP_UID); + $criteria->addSelectColumn(ContentPeer::CON_VALUE); + //FROM + $conditions = array(); + $conditions[] = array(GroupwfPeer::GRP_UID, ContentPeer::CON_ID); + $conditions[] = array(ContentPeer::CON_CATEGORY, DBAdapter::getStringDelimiter() . 'GRP_TITLE' . DBAdapter::getStringDelimiter()); + $conditions[] = array(ContentPeer::CON_LANG, DBAdapter::getStringDelimiter() . 'en' . DBAdapter::getStringDelimiter()); + $criteria->addJoinMC($conditions, Criteria::LEFT_JOIN); + //WHERE + $criteria->add(GroupwfPeer::GRP_STATUS, 'ACTIVE'); + //ORDER BY + $criteria->addAscendingOrderByColumn(ContentPeer::CON_VALUE); + + $dataset = GroupwfPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + while ($row = $dataset->getRow()) { + $groups[] = array('OWNER_UID' => $row['GRP_UID'], 'OWNER_NAME' => $row['CON_VALUE']); + $dataset->next(); + } + + $result->total = GroupwfPeer::doCount($criteria); + $result->owners = $groups; + break; + } } catch (Exception $error) { $result->status = 'ERROR'; @@ -171,130 +250,38 @@ class Dashboard extends Controller { return $result; } + public function getDashlets($data) { + $this->setResponseType('json'); + $result = new stdclass(); + $result->status = 'OK'; + try { + require_once 'classes/model/Dashlet.php'; + + $dashlets = array(); + + //SELECT + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(DashletPeer::DAS_UID); + $criteria->addSelectColumn(DashletPeer::DAS_TITLE); + //ORDER BY + $criteria->addAscendingOrderByColumn(DashletPeer::DAS_TITLE); + + $dataset = DashletPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + while ($row = $dataset->getRow()) { + $dashlets[] = array('DAS_UID' => $row['DAS_UID'], 'DAS_TITLE' => $row['DAS_TITLE']); + $dataset->next(); + } + $result->total = DashletPeer::doCount($criteria); + $result->dashlets = $dashlets; + } + catch (Exception $oException) { + $result->status = 'ERROR'; + $result->message = $error->getMessage(); + } + return $result; + } + // Functions for the dasboards administration module - End - - public function ownerData($data) - { try { - require_once ("classes/model/Content.php"); - - require_once ("classes/model/Users.php"); - require_once ("classes/model/Department.php"); - - G::LoadInclude("ajax"); - - //$option = $_POST["option"]; - //$option = get_ajax_value("option"); - - $type = $data->type; - - switch ($type) { - case "USER": // - break; - - case "DEPARTMENT": $department = array(); - - $oCriteria = new Criteria("workflow"); - $del = DBAdapter::getStringDelimiter(); - - /* - SELECT - DISTINCT - DEPARTMENT.DEP_UID, - CONTENT.CON_VALUE - FROM - DEPARTMENT AS DEP - LEFT JOIN CONTENT ON (DEPARTMENT.DEP_UID = CONTENT.CON_ID AND CONTENT.CON_CATEGORY = 'DYN_TITLE' AND CONTENT.CON_LANG = 'en') - WHERE - DEPARTMENT.DEP_STATUS = 'ACTIVE' - ORDER BY CONTENT.CON_VALUE ASC - */ - - //SELECT - $oCriteria->setDistinct(); - $oCriteria->addSelectColumn(DepartmentPeer::DEP_UID); - $oCriteria->addSelectColumn(ContentPeer::CON_VALUE); - //FROM - $aConditions = array(); - $aConditions[] = array(DepartmentPeer::DEP_UID, ContentPeer::CON_ID); - $aConditions[] = array(ContentPeer::CON_CATEGORY, $del . "DEPO_TITLE" . $del); - $aConditions[] = array(ContentPeer::CON_LANG, $del . "en" . $del); - $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); - //WHERE - $oCriteria->add(DepartmentPeer::DEP_STATUS, "ACTIVE"); - //ORDER BY X ASC - $oCriteria->addAscendingOrderByColumn(ContentPeer::CON_VALUE); - - $departmentNumRows = DepartmentPeer::doCount($oCriteria); - - $oDataset = DepartmentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - while ($oDataset->next()) { - $row = $oDataset->getRow(); - - $departmentUID = $row["DEP_UID"]; - $depName = $row["CON_VALUE"]; - - $department[] = array("TABLE_UID" => $departmentUID, "TABLE_NAME" => $depName); - } - - echo G::json_encode(array("success" => true, "resultTotal" => $departmentNumRows, "resultRoot" => $department)); - break; - } - } - catch (Exception $oException) { - echo $oException->getMessage(); - exit(0); - } - } - - public function dashletData($data) - { try { - require_once ("classes/model/Dashlet.php"); - - G::LoadInclude("ajax"); - - //$option = $_POST["option"]; - //$option = get_ajax_value("option"); - - $dashlet = array(); - - $oCriteria = new Criteria("workflow"); - - //SELECT - //$oCriteria->setDistinct(); - $oCriteria->addSelectColumn(DashletPeer::DAS_UID); - $oCriteria->addSelectColumn(DashletPeer::DAS_TITLE); - //FROM - //WHERE - //ORDER BY X ASC - $oCriteria->addAscendingOrderByColumn(DashletPeer::DAS_TITLE); - - //echo "
" . $oCriteria->toString() . "
"; - - //query - //doCount(Criteria $criteria, $distinct = false, $con = null) - $dashletNumRows = DashletPeer::doCount($oCriteria); - - $oDataset = DashletPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - while ($oDataset->next()) { - $row = $oDataset->getRow(); - - $dashletUID = $row["DAS_UID"]; - $dashTitle = $row["DAS_TITLE"]; - - $dashlet[] = array("DAS_UID" => $dashletUID, "DAS_TITLE" => $dashTitle); - } - - //echo "{users: " . G::json_encode($rows) . ", total_users: " . $totalRows . "}"; - //echo json_encode(array("success" => true, "resultTotal" => $dashletNumRows, "resultRoot" => $dashlet)); - echo G::json_encode(array("success" => true, "resultTotal" => $dashletNumRows, "resultRoot" => $dashlet)); - } - catch (Exception $oException) { - echo $oException->getMessage(); - exit(0); - } - } } \ No newline at end of file diff --git a/workflow/engine/templates/dashboard/dashletInstanceForm.js b/workflow/engine/templates/dashboard/dashletInstanceForm.js index 6985ed7da..10a84f9a9 100644 --- a/workflow/engine/templates/dashboard/dashletInstanceForm.js +++ b/workflow/engine/templates/dashboard/dashletInstanceForm.js @@ -57,15 +57,15 @@ dashletInstance.form = { //------------------------------------------------------------------------------------------------------------------ var storeDasUID = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({ - url: "dashletData", + url: "getDashlets", method: "POST" }), baseParams: {"option": "DASHLST"}, reader: new Ext.data.JsonReader({ - totalProperty: "resultTotal", - root: "resultRoot", + totalProperty: "total", + root: "dashlets", fields:[{name: "DAS_UID", type: "string"}, {name: "DAS_TITLE", type: "string"} ] @@ -107,22 +107,23 @@ dashletInstance.form = { var storeDasInsOwnerType = new Ext.data.ArrayStore({ idIndex: 0, fields: ["id", "value"], - data: [//["USER", "User"], - ["DEPARTMENT", "Department"] + data: [["USER", "User"], + ["DEPARTMENT", "Department"], + ["GROUP", "Group"] ] }); var storeDasInsOwnerUID = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({ - url: "ownerData", + url: "getOwnersByType", method: "POST" }), reader: new Ext.data.JsonReader({ - totalProperty: "resultTotal", - root: "resultRoot", - fields:[{name: "TABLE_UID", type: "string"}, - {name: "TABLE_NAME", type: "string"} + totalProperty: "total", + root: "owners", + fields:[{name: "OWNER_UID", type: "string"}, + {name: "OWNER_NAME", type: "string"} ] }), @@ -257,13 +258,14 @@ dashletInstance.form = { editable: false, width: 200, - fieldLabel: "Owner Type", + fieldLabel: "Assign To", listeners: { select: function (combo, record, index) { storeDasInsOwnerUID.baseParams = {"option": "OWNERTYPE", "type": combo.getValue() }; + cboDasInsOwnerUID.store.removeAll(); cboDasInsOwnerUID.store.load(); } } @@ -273,8 +275,8 @@ dashletInstance.form = { id: "cboDasInsOwnerUID", name: "DAS_INS_OWNER_UID", - valueField: "TABLE_UID", - displayField: "TABLE_NAME", + valueField: "OWNER_UID", + displayField: "OWNER_NAME", store: storeDasInsOwnerUID, triggerAction: "all", @@ -282,7 +284,7 @@ dashletInstance.form = { editable: false, width: 200, - fieldLabel: "Assign To" + fieldLabel: "Name" }); var cboProcess = new Ext.form.ComboBox({ @@ -340,7 +342,7 @@ dashletInstance.form = { cboDasInsContextTime, //txtDasInsStartDate, //txtDasInsEndDate, - //cboDasInsOwnerType, + cboDasInsOwnerType, cboDasInsOwnerUID //, //cboProcess,