diff --git a/src/modules/htmlUI/var/formmask/generic.inc.php b/src/modules/htmlUI/var/formmask/generic.inc.php index 4407b7aa2..38c4a9c69 100644 --- a/src/modules/htmlUI/var/formmask/generic.inc.php +++ b/src/modules/htmlUI/var/formmask/generic.inc.php @@ -6,7 +6,12 @@ $tmpAct = ''; if (isset($_REQUEST['act'])) { // Get everything up to the first dot - $tmpAct = substr($_REQUEST["act"], 0, strpos($_REQUEST["act"], '.')); + $tmpPos = strpos($_REQUEST["act"], '.'); + if ($tmpPos > 0) { + $tmpAct = substr($_REQUEST["act"], 0, $tmpPos); + } else { + $tmpAct = $_REQUEST["act"]; + } } $ui_fmask = array( @@ -489,7 +494,7 @@ $ui_fmask = array( UI_FILETYPE_WEBSTREAM => '##Webstream##', UI_FILETYPE_PLAYLIST => '##Playlist##' ), - 'attributes'=> array('onChange' => 'hpopup("'.UI_HANDLER.'?act='.$tmpAct.'.setFiletype&filetype=" + this.form.filetype.value)') + 'attributes'=> array('onChange' => 'location=\''.UI_HANDLER.'?act='.$tmpAct.'.setFiletype&filetype=\' + this.form.filetype.value') ), array( 'element' => 'limit', @@ -501,7 +506,7 @@ $ui_fmask = array( 50 => 50, 100 => 100 ), - 'attributes'=> array('onChange' => 'hpopup("'.UI_HANDLER.'?act='.$tmpAct.'.setLimit&limit=" + this.form.limit.value)') + 'attributes'=> array('onChange' => 'location=\''.UI_HANDLER.'?act='.$tmpAct.'.setLimit&limit=\'+ this.form.limit.value') ), /* do we need reset? array( diff --git a/src/modules/htmlUI/var/html/ui_handler.php b/src/modules/htmlUI/var/html/ui_handler.php index 7c2fca0ef..faf64b198 100644 --- a/src/modules/htmlUI/var/html/ui_handler.php +++ b/src/modules/htmlUI/var/html/ui_handler.php @@ -163,34 +163,58 @@ switch ($_REQUEST['act']) { case "BROWSE.refresh": $uiHandler->BROWSE->refresh($_REQUEST); + $NO_REDIRECT = true; + $_REQUEST["act"] = "BROWSE"; + include("ui_browser.php"); break; case "BROWSE.setCategory": $uiHandler->BROWSE->setCategory($_REQUEST); + $NO_REDIRECT = true; + $_REQUEST["act"] = "BROWSE"; + include("ui_browser.php"); break; case "BROWSE.setValue": $uiHandler->BROWSE->setValue($_REQUEST); + $NO_REDIRECT = true; + $_REQUEST["act"] = "BROWSE"; + include("ui_browser.php"); break; case "BROWSE.reorder": $uiHandler->BROWSE->reorder($_REQUEST['by']); + $NO_REDIRECT = true; + $_REQUEST["act"] = "BROWSE"; + include("ui_browser.php"); break; case "BROWSE.setDefaults": $uiHandler->BROWSE->setDefaults(TRUE); + $NO_REDIRECT = true; + $_REQUEST["act"] = "BROWSE"; + include("ui_browser.php"); break; case "BROWSE.setOffset": $uiHandler->BROWSE->setOffset($_REQUEST['page']); + $NO_REDIRECT = true; + $_REQUEST["act"] = "BROWSE"; + include("ui_browser.php"); break; case "BROWSE.setLimit": $uiHandler->BROWSE->setLimit($_REQUEST['limit']); + $NO_REDIRECT = true; + $_REQUEST["act"] = "BROWSE"; + include("ui_browser.php"); break; case "BROWSE.setFiletype": $uiHandler->BROWSE->setFiletype($_REQUEST['filetype']); + $NO_REDIRECT = true; + $_REQUEST["act"] = "BROWSE"; + include("ui_browser.php"); break; case "HUBBROWSE.setCategory": diff --git a/src/modules/storageServer/var/DataEngine.php b/src/modules/storageServer/var/DataEngine.php index 6eb3571d1..899c8f57d 100644 --- a/src/modules/storageServer/var/DataEngine.php +++ b/src/modules/storageServer/var/DataEngine.php @@ -1,6 +1,4 @@ $v) { - $whereArr[$i] = sprintf($v, "md$i", "md$i", "md$i", "md$i", "md$i"); - $lastTbl = ($i==0 ? "f" : "md".($i-1)); - $innerBlocks[] = "INNER JOIN ".$CC_CONFIG['mdataTable']." md$i ON md$i.gunid = $lastTbl.gunid\n"; - } - // query construcion: - $sql = "SELECT $fldsPart FROM ".$CC_CONFIG['filesTable']." f ".join("", $innerBlocks); - if ($browse) { - $sql .= "INNER JOIN ".$CC_CONFIG['mdataTable']." br". - "\n ON br.gunid = f.gunid AND br.objns='_L'". - " AND br.predicate='{$brFld}' AND br.predxml='T'"; - if (!is_null($brFldNs)) { - $sql .= " AND br.predns='{$brFldNs}'"; - } - $sql .= "\n"; - } - if (!is_null($fileCond)) { - $whereArr[] = " $fileCond"; - } - if (count($whereArr) > 0) { - $sql .= "WHERE\n".join(" AND\n", $whereArr); - } - if ($browse) { - $sql .= "\nORDER BY br.object"; - } - return $sql; - } - - - /** - * Method returning SQL query for search/browse with AND operator - * (using INTERSECT command) - * - * @param string $fldsPart - * Fields part of sql query - * @param array $whereArr - * Array of where-parts - * @param string $fileCond - * Condition for files table - * @param boolean $browse - * true if browse vals required instead of gunids - * @param string $brFldNs - * namespace prefix of category for browse - * @param string $brFld - * category for browse - * @return string - * query - */ - private function _makeAndSql($fldsPart, $whereArr, $fileCond, $browse, - $brFldNs=NULL, $brFld=NULL) - { - $sql = "(".join(") AND (", $whereArr).")"; - return $sql; - } - - /** - * Method returning SQL query for search/browse with OR operator - * - * @param string $fldsPart - * Fields part of sql query - * @param array $whereArr - * Array of where-parts - * @param string $fileCond - * Condition for files table - * @param boolean $browse - * True if browse vals required instead of gunids - * @param string $brFldNs - * Namespace prefix of category for browse - * @param string $brFld - * Category for browse - * @return string - * query - */ - private function _makeOrSql($fldsPart, $whereArr, $fileCond, $browse, - $brFldNs=NULL, $brFld=NULL) - { - $sql = "(".join(") OR (", $whereArr).")"; - return $sql; - } - - /** * Search in local metadata database. * @@ -234,29 +120,6 @@ class DataEngine { * @param int $offset * Starting point (0 means without offset) * @return array - * hash, fields: - * results : array with gunid strings - * cnt : integer - number of matching gunids - * of files have been found - */ - public function localSearch($cri, $limit=0, $offset=0) - { - $res = $this->_localGenSearch($cri, $limit, $offset); - // if (PEAR::isError($res)) return $res; - return $res; - } - - - /** - * Search in local metadata database, more general version. - * - * @param hash $criteria - * Search criteria see DataEngine class documentation - * @param int $limit - * Limit for result arrays (0 means unlimited) - * @param int $offset - * Starting point (0 means without offset) - * @return array * arrays of hashes, fields: * cnt : integer - number of matching gunids * of files have been found @@ -270,7 +133,7 @@ class DataEngine { * OR (in browse mode) * results: array of strings - browsed values */ - private function _localGenSearch($criteria, $limit=0, $offset=0) + public function localSearch($criteria, $limit=0, $offset=0) { global $CC_CONFIG, $CC_DBC; @@ -352,18 +215,20 @@ class DataEngine { } } - // the actual values to fetch + // Final query + $sql = "SELECT * " + . " FROM ".$CC_CONFIG["filesTable"] + . $whereClause; if ($orderby) { - $tmpSql = "SELECT * " - . " FROM ".$CC_CONFIG["filesTable"] - . $whereClause - . " ORDER BY ".join(",", $orderBySql); - $sql = $tmpSql; + $sql .= " ORDER BY ".join(",", $orderBySql); } - //$_SESSION["debug"] = $tmpSql; + $countRowsSql = "SELECT COUNT(*) " + . " FROM ".$CC_CONFIG["filesTable"] + . $whereClause; + $cnt = $CC_DBC->GetOne($countRowsSql); + // Get the number of results - $cnt = $this->_getNumRows($sql); if (PEAR::isError($cnt)) { return $cnt; } @@ -422,23 +287,11 @@ class DataEngine { return new PEAR_Error("DataEngine::browseCategory() -- could not map XML category to DB column."); } $sql = "SELECT DISTINCT $columnName FROM ".$CC_CONFIG["filesTable"]; -// $r = XML_Util::splitQualifiedName($category); -// $catNs = $r['namespace']; -// $cat = $r['localPart']; -// if (is_array($criteria) && count($criteria) > 0) { -// return $this->_browseCategory($criteria, $limit, $offset, $catNs, $cat); -// } -// $sqlCond = "m.predicate='$cat' AND m.objns='_L' AND m.predxml='T'"; -// if (!is_null($catNs)) { -// $sqlCond = "m.predns = '{$catNs}' AND $sqlCond"; -// } $limitPart = ($limit != 0 ? " LIMIT $limit" : '' ). ($offset != 0 ? " OFFSET $offset" : '' ); -// $sql = -// "SELECT DISTINCT m.object FROM ".$CC_CONFIG['mdataTable']." m\n". -// "WHERE $sqlCond"; - $_SESSION["debug"] = "DataEngine:: browse(): $sql"; - $cnt = $this->_getNumRows($sql); + $countRowsSql = "SELECT COUNT(DISTINCT $columnName) FROM ".$CC_CONFIG["filesTable"]; + + $cnt = $CC_DBC->GetOne($countRowsSql); if (PEAR::isError($cnt)) { return $cnt; } @@ -453,97 +306,6 @@ class DataEngine { } - /** - * Fetching the list of metadata values for a particular category. - * - * @param array $criteria - * @param int $limit - * @param int $offset - * @param string $brFldNs - * Namespace prefix of category for browse - * @param string $brFld - * Metadata category identifier for browse. - * @return array|PEAR_Error - */ - private function _browseCategory($criteria, $limit=0, $offset=0, - $brFldNs=NULL, $brFld=NULL) - { - global $CC_CONFIG, $CC_DBC; - - // Input values - $filetype = (isset($criteria['filetype']) ? $criteria['filetype'] : 'all'); - $filetype = strtolower($filetype); - if (!array_key_exists($filetype, $this->filetypes)) { - return PEAR::raiseError( - 'DataEngine::_browseCategory: unknown filetype in search criteria' - ); - } - $filetype = $this->filetypes[$filetype]; - $operator = (isset($criteria['operator']) ? $criteria['operator'] : 'and'); - $operator = strtolower($operator); - $conditions = (isset($criteria['conditions']) ? $criteria['conditions'] : array()); - - // Create the WHERE clause - this is the actual search part - $whereArr = $this->_makeWhereArr($conditions); - - $fldsPart = "DISTINCT br.object as txt"; - $fileCond = "(f.state='ready' OR f.state='edited')"; - if (!is_null($filetype)) { - $fileCond .= " AND f.ftype='$filetype'"; - } - if ($operator == 'and') { - $sql = $this->_makeAndSql($fldsPart, $whereArr, $fileCond, true, $brFldNs, $brFld); - } else { - $sql = $this->_makeOrSql($fldsPart, $whereArr, $fileCond, true, $brFldNs, $brFld); - } - - // Get the number of results - $cnt = $this->_getNumRows($sql); - if (PEAR::isError($cnt)) { - return $cnt; - } - - // Get actual results - $limitPart = ($limit != 0 ? " LIMIT $limit" : '' ). - ($offset != 0 ? " OFFSET $offset" : '' ); - $res = $CC_DBC->getAll($sql.$limitPart); - if (PEAR::isError($res)) { - return $res; - } - if (!is_array($res)) { - $res = array(); - } - $eres = array(); - foreach ($res as $it) { - $eres[] = $it['txt']; - } - return array('results'=>$eres, 'cnt'=>$cnt); - } - - - /** - * Get number of rows in query result - * - * @param string $query - * SQL query - * @return int - * Number of rows in query result - */ - private function _getNumRows($query) - { - global $CC_CONFIG, $CC_DBC; - $rh = $CC_DBC->query($query); - if (PEAR::isError($rh)) { - return $rh; - } - $cnt = $rh->numRows(); - if (PEAR::isError($cnt)) { - return $cnt; - } - $rh->free(); - return $cnt; - } - } // class DataEngine ?> \ No newline at end of file