diff --git a/workflow/engine/controllers/home.php b/workflow/engine/controllers/home.php index 57bdd58e5..72539314c 100755 --- a/workflow/engine/controllers/home.php +++ b/workflow/engine/controllers/home.php @@ -218,6 +218,53 @@ class Home extends Controller $this->render(); } + public function appAdvancedSearch ($httpData) + { + $title = G::LoadTranslation("ID_ADVANCEDSEARCH"); + $httpData->t = 'search'; + + // settings html template + $this->setView( $this->userUxBaseTemplate . PATH_SEP . 'appListSearch' ); + + $process = (isset($httpData->process)) ? $httpData->process : null; + $status = (isset($httpData->status)) ? $httpData->status : null; + $search = (isset($httpData->search)) ? $httpData->search : null; + $category = (isset($httpData->category)) ? $httpData->category : null; + $user = (isset($httpData->user)) ? $httpData->user : null; + $dateFrom = (isset($httpData->dateFrom)) ? $httpData->dateFrom : null; + $dateTo = (isset($httpData->dateTo)) ? $httpData->dateTo : null; + + $cases = $this->getAppsData( $httpData->t, null, null, $user, null, $search, $process, $status, $dateFrom, $dateTo, null, null, 'APP_CACHE_VIEW.APP_NUMBER', $category); + $arraySearch = array($process, $status, $search, $category, $user, $dateFrom, $dateTo ); + + // settings vars and rendering + $processes = array(); + $processes = $this->getProcessArray($httpData->t, $this->userID ); + $this->setVar( 'statusValues', $this->getStatusArray( $httpData->t, $this->userID ) ); + $this->setVar( 'processValues', $processes ); + $this->setVar( 'categoryValues', $this->getCategoryArray() ); + $this->setVar( 'userValues', $this->getUserArray( $httpData->t, $this->userID ) ); + $this->setVar( 'allUsersValues', $this->getAllUsersArray( 'search' ) ); + $this->setVar( 'categoryTitle', G::LoadTranslation("ID_CATEGORY") ); + $this->setVar( 'processTitle', G::LoadTranslation("ID_PROCESS") ); + $this->setVar( 'statusTitle', G::LoadTranslation("ID_STATUS") ); + $this->setVar( 'searchTitle', G::LoadTranslation("ID_SEARCH") ); + $this->setVar( 'userTitle', G::LoadTranslation("ID_USER") ); + $this->setVar( 'fromTitle', G::LoadTranslation("ID_DELEGATE_DATE_FROM") ); + $this->setVar( 'toTitle', G::LoadTranslation("ID_DELEGATE_DATE_TO") ); + $this->setVar( 'filterTitle', G::LoadTranslation("ID_FILTER") ); + $this->setVar( 'arraySearch', $arraySearch ); + + $this->setVar( 'cases', $cases['data'] ); + $this->setVar( 'cases_count', $cases['totalCount'] ); + $this->setVar( 'title', $title ); + $this->setVar( 'appListStart', $this->appListLimit ); + $this->setVar( 'appListLimit', 10 ); + $this->setVar( 'listType', $httpData->t ); + + $this->render(); + } + public function getApps ($httpData) { $cases = $this->getAppsData( $httpData->t, $httpData->start, $httpData->limit ); @@ -227,7 +274,21 @@ class Home extends Controller $this->render(); } - public function getAppsData ($type, $start = null, $limit = null) + public function getAppsData ( + $type, + $start = null, + $limit = null, + $user = null, + $filter = null, + $search = null, + $process = null, + $status = null, + $dateFrom = null, + $dateTo = null, + $callback = null, + $dir = null, + $sort = "APP_CACHE_VIEW.APP_NUMBER", + $category = null) { require_once ("classes/model/AppNotes.php"); G::LoadClass( 'applications' ); @@ -240,10 +301,22 @@ class Home extends Controller $notesStart = 0; $notesLimit = 4; + switch ($user) { + case 'CURRENT_USER': + $user = $this->userID; + break; + case 'ALL': + $user = null; + break; + case null: + $user = $this->userID; + break; + default: + //$user = $this->userID; + break; + } - $cases = $apps->getAll( $this->userID, $start, $limit, $type ); - //g::pr($cases['data']); die; - + $cases = $apps->getAll( $user, $start, $limit, $type, $filter, $search, $process, $status, $type, $dateFrom, $dateTo, $callback, $dir, $sort, $category); // formating & complitting apps data with 'Notes' foreach ($cases['data'] as $i => $row) { @@ -312,5 +385,216 @@ class Home extends Controller $this->setView( $tpl ); $this->render(); } + + function getUserArray ($action, $userUid) + { + global $oAppCache; + $status = array (); + $users[] = array ("CURRENT_USER",G::LoadTranslation( "ID_CURRENT_USER" )); + $users[] = array ("ALL",G::LoadTranslation( "ID_ALL_USERS" )); + + //now get users, just for the Search action + switch ($action) { + case 'search_simple': + case 'search': + $cUsers = new Criteria( 'workflow' ); + $cUsers->clearSelectColumns(); + $cUsers->addSelectColumn( UsersPeer::USR_UID ); + $cUsers->addSelectColumn( UsersPeer::USR_FIRSTNAME ); + $cUsers->addSelectColumn( UsersPeer::USR_LASTNAME ); + $oDataset = UsersPeer::doSelectRS( $cUsers ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $users[] = array ($aRow['USR_UID'], htmlentities($aRow['USR_LASTNAME'] . ' ' . $aRow['USR_FIRSTNAME'], ENT_QUOTES, "UTF-8")); + $oDataset->next(); + } + break; + default: + return $users; + break; + } + return $users; + } + + function getCategoryArray () + { + global $oAppCache; + require_once 'classes/model/ProcessCategory.php'; + $category[] = array ("",G::LoadTranslation( "ID_ALL_CATEGORIES" ) + ); + + $criteria = new Criteria( 'workflow' ); + $criteria->addSelectColumn( ProcessCategoryPeer::CATEGORY_UID ); + $criteria->addSelectColumn( ProcessCategoryPeer::CATEGORY_NAME ); + $dataset = ProcessCategoryPeer::doSelectRS( $criteria ); + $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $dataset->next(); + + while ($row = $dataset->getRow()) { + $category[] = array ($row['CATEGORY_UID'],$row['CATEGORY_NAME']); + $dataset->next(); + } + return $category; + } + + function getAllUsersArray ($action) + { + global $oAppCache; + $status = array (); + $users[] = array ("CURRENT_USER",G::LoadTranslation( "ID_CURRENT_USER" ) + ); + $users[] = array ("",G::LoadTranslation( "ID_ALL_USERS" ) + ); + + if ($action == 'to_reassign') { + //now get users, just for the Search action + $cUsers = $oAppCache->getToReassignListCriteria(null); + $cUsers->addSelectColumn( AppCacheViewPeer::USR_UID ); + + if (g::MySQLSintaxis()) { + $cUsers->addGroupByColumn( AppCacheViewPeer::USR_UID ); + } + + $cUsers->addAscendingOrderByColumn( AppCacheViewPeer::APP_CURRENT_USER ); + $oDataset = AppCacheViewPeer::doSelectRS( $cUsers ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $users[] = array ($aRow['USR_UID'],$aRow['APP_CURRENT_USER']); + $oDataset->next(); + } + } + return $users; + } + + function getStatusArray ($action, $userUid) + { + global $oAppCache; + $status = array (); + $status[] = array ('',G::LoadTranslation( 'ID_ALL_STATUS' )); + //get the list based in the action provided + switch ($action) { + case 'sent': + $cStatus = $oAppCache->getSentListProcessCriteria( $userUid ); // a little slow + break; + case 'simple_search': + case 'search': + $cStatus = new Criteria( 'workflow' ); + $cStatus->clearSelectColumns(); + $cStatus->setDistinct(); + $cStatus->addSelectColumn( ApplicationPeer::APP_STATUS ); + $oDataset = ApplicationPeer::doSelectRS( $cStatus ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $status[] = array ($aRow['APP_STATUS'],G::LoadTranslation( 'ID_CASES_STATUS_' . $aRow['APP_STATUS'] ) + ); //here we can have a translation for the status ( the second param) + $oDataset->next(); + } + return $status; + break; + case 'selfservice': + $cStatus = $oAppCache->getUnassignedListCriteria( $userUid ); + break; + case 'paused': + $cStatus = $oAppCache->getPausedListCriteria( $userUid ); + break; + case 'to_revise': + $cStatus = $oAppCache->getToReviseListCriteria( $userUid ); + // $cStatus = $oAppCache->getPausedListCriteria($userUid); + break; + case 'to_reassign': + $cStatus = $oAppCache->getToReassignListCriteria($userUid); + break; + case 'todo': + case 'draft': + case 'gral': + // case 'to_revise' : + default: + return $status; + break; + } + + //get the status for this user in this action only for participated, unassigned, paused + // if ( $action != 'todo' && $action != 'draft' && $action != 'to_revise') { + if ($action != 'todo' && $action != 'draft') { + //$cStatus = new Criteria('workflow'); + $cStatus->clearSelectColumns(); + $cStatus->setDistinct(); + $cStatus->addSelectColumn( AppCacheViewPeer::APP_STATUS ); + $oDataset = AppCacheViewPeer::doSelectRS( $cStatus ); + $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $status[] = array ($aRow['APP_STATUS'],G::LoadTranslation( 'ID_CASES_STATUS_' . $aRow['APP_STATUS'] )); + //here we can have a translation for the status ( the second param) + $oDataset->next(); + } + } + return $status; + } + function getProcessArray($action, $userUid) + { + global $oAppCache; + + $processes = array(); + $processes[] = array("", G::LoadTranslation("ID_ALL_PROCESS")); + + switch ($action) { + case "simple_search": + case "search": + //In search action, the query to obtain all process is too slow, so we need to query directly to + //process and content tables, and for that reason we need the current language in AppCacheView. + G::loadClass("configuration"); + $oConf = new Configurations; + $oConf->loadConfig($x, "APP_CACHE_VIEW_ENGINE", "", "", "", ""); + $appCacheViewEngine = $oConf->aConfig; + $lang = isset($appCacheViewEngine["LANG"])? $appCacheViewEngine["LANG"] : "en"; + + $cProcess = new Criteria("workflow"); + $cProcess->clearSelectColumns(); + $cProcess->addSelectColumn(ProcessPeer::PRO_UID); + $cProcess->addSelectColumn(ContentPeer::CON_VALUE); + + $del = DBAdapter::getStringDelimiter(); + + $conds = array(); + $conds[] = array(ProcessPeer::PRO_UID, ContentPeer::CON_ID); + $conds[] = array(ContentPeer::CON_CATEGORY, $del . "PRO_TITLE" . $del); + $conds[] = array(ContentPeer::CON_LANG, $del . $lang . $del); + $cProcess->addJoinMC($conds, Criteria::LEFT_JOIN); + $cProcess->add(ProcessPeer::PRO_STATUS, "ACTIVE"); + $oDataset = ProcessPeer::doSelectRS($cProcess); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + $oDataset->next(); + while ($aRow = $oDataset->getRow()) { + $processes[] = array($aRow["PRO_UID"], $aRow["CON_VALUE"]); + $oDataset->next(); + } + + return ($processes); + break; + case "consolidated": + default: + $cProcess = $oAppCache->getToDoListCriteria($userUid); //fast enough + break; + } + + $cProcess->clearSelectColumns(); + $cProcess->setDistinct(); + $cProcess->addSelectColumn(AppCacheViewPeer::PRO_UID); + $cProcess->addSelectColumn(AppCacheViewPeer::APP_PRO_TITLE); + $oDataset = AppCacheViewPeer::doSelectRS($cProcess); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + + while ($aRow = $oDataset->getRow()) { + $processes[] = array($aRow["PRO_UID"], $aRow["APP_PRO_TITLE"]); + $oDataset->next(); + } + return ($processes); + } } diff --git a/workflow/engine/menus/simplified.php b/workflow/engine/menus/simplified.php index 46fa1a806..78e0552c6 100644 --- a/workflow/engine/menus/simplified.php +++ b/workflow/engine/menus/simplified.php @@ -12,5 +12,7 @@ if ($RBAC->userCanAccess("PM_CASES") == 1) { "/images/simplified/folder-grey3.png", null, null, null); $G_TMP_MENU->AddIdRawOption("S_NEW_CASE", "#", G::LoadTranslation("ID_NEW_CASE"), "/images/simplified/plus-set-grey.png", null, null, null); + $G_TMP_MENU->AddIdRawOption("S_ADVANCED_SEARCH", "home/appAdvancedSearch", G::LoadTranslation("ID_ADVANCEDSEARCH"), + "/images/simplified/advancedSearch.png", null, null, null); } diff --git a/workflow/engine/skinEngine/simplified/css/style.css b/workflow/engine/skinEngine/simplified/css/style.css index de69a9a51..2ed407717 100644 --- a/workflow/engine/skinEngine/simplified/css/style.css +++ b/workflow/engine/skinEngine/simplified/css/style.css @@ -37,6 +37,14 @@ pre { height: 40px; background-color: #252525; background-position: 0 0; + background: #007eb5; /* Old browsers */ + background: -moz-linear-gradient(top, #007eb5 0%, #003d5a 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#007eb5), color-stop(100%,#003d5a)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #007eb5 0%,#003d5a 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #007eb5 0%,#003d5a 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #007eb5 0%,#003d5a 100%); /* IE10+ */ + background: linear-gradient(to bottom, #007eb5 0%,#003d5a 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#007eb5', endColorstr='#003d5a',GradientType=0 ); /* IE6-9 */ /* background-image: url("/images/twitter_web_sprite_bgs.png"); background-repeat: repeat-x;*/ diff --git a/workflow/engine/skinEngine/simplified/css/topbar.css b/workflow/engine/skinEngine/simplified/css/topbar.css index 008e66135..474d9d998 100644 --- a/workflow/engine/skinEngine/simplified/css/topbar.css +++ b/workflow/engine/skinEngine/simplified/css/topbar.css @@ -592,7 +592,8 @@ div.topbar ul li ul li span { div#corpBar div.topbar-bg { background-color: #142F3C; background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#142F3C), to(#307190)); /* Webkit */ - background-image: -moz-linear-gradient(#142F3C, #1D4558); /* FF3.6 */ + background-image: -moz-linear-gradient(top, #0085bf 0%, #003954 100%); /* FF3.6 */ + /*background-image: -moz-linear-gradient(#677C89 , #1D4558); *//* FF3.6 */ /*erik: modified backgournd colors in topbar, but just for FF, we need todo for others; original: #00a0d1, #008db8 */ diff --git a/workflow/engine/skinEngine/simplified/templates/appListSearch.html b/workflow/engine/skinEngine/simplified/templates/appListSearch.html new file mode 100644 index 000000000..38cfaff7e --- /dev/null +++ b/workflow/engine/skinEngine/simplified/templates/appListSearch.html @@ -0,0 +1,353 @@ + + +
+ + + + + + + + + + + {literal} + + + + + + + +