strtotime($b[datetime])) ? -1 : 1;'; $compare = create_function('$a,$b', $code); usort($aFTransactions, $compare); for($i=0; $i<4; $i++){ $aFTransactions_new[] = $aFTransactions[$i]; } $aFTransactions = $aFTransactions_new; if($aFData){ $aFData['itemType'] = 'folder'; // create mime info $aFData['mimeTypeFName'] = 'Folder'; $aFData['mimeTypeIcon'] = KTrss::getFolderIcon(); $aFolder[] = $aFData; $aFolder[] = $aFTransactions; $aFolderBox[] = $aFolder; } if (PEAR::isError($aFData)) { return false; } if ($aFolder){ return $aFolder; } } function rss_sanitize($str, $do_amp=true) { $result = str_replace("\\\"","\"",str_replace('\\\'','\'',htmlentities($str,ENT_NOQUOTES, 'UTF-8'))); if ($do_amp) { $result = str_replace('&','&',$result); } return $result; } // Takes in an array as a parameter and returns rss2.0 compatible xml function arrayToXML($aItems){ // Build path to host $aPath = explode('/', trim($_SERVER['PHP_SELF'])); global $default; $hostPath = "http" . ($default->sslEnabled ? "s" : "") . "://".$_SERVER['HTTP_HOST']."/".$aPath[1]."/"; $feed = "\n"; $feed .= "\n". "\n" . "".APP_NAME." RSS\n" . "(c) 2007 The Jam Warehouse Software (Pty) Ltd. All Rights Reserved\n" . "".$hostPath."\n" . "KT-RSS\n" . "\n". "".APP_NAME." RSS\n". "140\n". "28". "".$hostPath."knowledgeTree/\n". "".$hostPath."resources/graphics/ktlogo_rss.png\n". "\n"; foreach($aItems as $aItems){ if($aItems[0][itemType] == 'folder'){ $sTypeSelect = 'folder.transactions&fFolderId'; }elseif($aItems[0][itemType] == 'document'){ $sTypeSelect = 'document.transactionhistory&fDocumentId'; } $feed .= "\n" . "".KTrss::rss_sanitize($aItems[0][0][name],false)."\n" . "".$hostPath."action.php?kt_path_info=ktcore.actions.".$sTypeSelect."=".$aItems[0][0]['id']."\n" . "\n" . "<table border='0' width='90%'>\n". "<tr>\n". "<td width='5%' height='16px'>" . "<a href='".$hostPath."action.php?kt_path_info=ktcore.actions.".$sTypeSelect."=".$aItems[0][0][id]."' ><img src='".$aItems[0][mimeTypeIcon]."' align='left' height='16px' width='16px' alt='' border='0' /></a>" . "</td>\n". "<td align='left'> ".$aItems[0][mimeTypeFName]."</td>\n". "</tr>\n". "<tr>\n". "<td colspan='2'>\n". ucfirst($aItems[0]['itemType'])." Information (ID: ".$aItems[0][0][id].")</>\n". "<hr>\n". "<table width='95%'>\n". "<tr>\n". "<td>Filename: ".KTrss::rss_sanitize($aItems[0][0][filename] )."</td>\n". "<td>\n". "</tr>\n". "<tr>\n". "<td>Author: ".$aItems[0][0][author]."</td>\n". "<td>\n". "</tr>\n". "<tr>\n". "<td>Owner: ";if($aItems[0][0][owner]){$feed .= $aItems[0][0][owner];}else{$feed .= "None";} $feed .= "</td>\n". "<td></td>\n". "</tr>\n". "<tr>\n";if($aItems[0][0][type]){ $feed .= "<td>Document type: ".$aItems[0][0][type]."</td>\n". "<td></td>\n";} $feed .= "</tr>\n". "<tr>\n". "<td>Workflow status: ";if($aItems[0][0][workflow_status]){$feed .= $aItems[0][0][workflow_status];}else{$feed .= "No Workflow";} $feed .= "</td>\n". "<td></td>\n". "</tr>\n". "</table><br>\n". "Transaction Summary (Last 3)\n". "<hr>\n". "<table width='100%'>\n"; foreach($aItems[1] as $item){ $feed .= "<tr>\n". "<td>".$item[type]." name:</td>\n". "<td>".KTrss::rss_sanitize($item[name] )."</td>\n". "</tr>\n". "<tr>\n". "<td>Path:</td>\n". "<td>".KTrss::rss_sanitize($item[fullpath] )."</td>\n". "</tr>\n". "<tr>\n". "<td>Transaction:</td>\n". "<td>".$item[transaction_name]."</td>\n". "</tr>\n". "<tr>\n". "<td>Comment:</td>\n". "<td>".KTrss::rss_sanitize($item[comment] )."</td>\n". "</tr>\n". "<tr>\n";if($item[version]){ $feed .= "<td>Version:</td>\n". "<td>".$item[version]."</td>\n";} $feed .= "</tr>\n". "<tr>\n". "<td>Date:</td>\n". "<td>".$item[datetime]."</td>\n". "</tr>\n". "<tr>\n". "<td>User:</td>\n". "<td>".$item[user_name]."</td>\n". "</tr>\n". "<tr>\n". "<td colspan='2'><hr width='100' align='left'></td>\n". "</tr>\n";} $feed .= "</table>\n". "</td>\n". "</tr>\n". "</table>". "\n". "\n"; } $feed .= "\n" . "\n"; return $feed; } // Takes in an array as a parameter and returns rss2.0 compatible xml function errorToXML($sError){ // Build path to host $aPath = explode('/', trim($_SERVER['PHP_SELF'])); global $default; $hostPath = "http" . ($default->sslEnabled ? "s" : "") . "://".$_SERVER['HTTP_HOST']."/".$aPath[1]."/"; $feed = "\n"; $feed .= "\n". "\n" . "".APP_NAME." RSS\n" . "(c) 2007 The Jam Warehouse Software (Pty) Ltd. All Rights Reserved\n" . "".$hostPath."\n" . "KT-RSS\n" . "\n". "".APP_NAME." RSS\n". "140\n". "28". "".$hostPath."knowledgeTree/\n". "".$hostPath."resources/graphics/ktlogo_rss.png\n". "\n"; $feed .= "\n". "Feed load error\n" . "".$sError."\n". "\n"; $feed .= "\n" . "\n"; return $feed; } // Delete feed function function deleteFeed($iFeedId){ $res = DBUtil::autoDelete('plugin_rss', $iFeedId); } // Get title for external feed function getExternalFeedTitle($iFeedId){ $sQuery = "SELECT title FROM plugin_rss WHERE id = ?"; $aParams = array($iFeedId); $sFeedTitle = DBUtil::getOneResultKey(array($sQuery, $aParams), 'title'); if (PEAR::isError($sFeedTitle)) { // XXX: log error return false; } if ($sFeedTitle) { return $sFeedTitle; } } // Get url for external feed function getExternalFeedUrl($iFeedId){ $sQuery = "SELECT url FROM plugin_rss WHERE id = ?"; $aParams = array($iFeedId); $sFeedUrl = DBUtil::getOneResultKey(array($sQuery, $aParams), 'url'); if (PEAR::isError($sFeedUrl)) { // XXX: log error return false; } if ($sFeedUrl) { return $sFeedUrl; } } // Update external feed data function updateFeed($iFeedId, $sFeedTitle, $sFeedUrl){ $sQuery = "UPDATE plugin_rss SET title=?, url=? WHERE id=?"; $aParams = array($sFeedTitle, $sFeedUrl, $iFeedId); $res = DBUtil::runQuery(array($sQuery, $aParams)); return $res; } // Create new external feed function createFeed($sFeedTitle, $sFeedUrl, $iUserId){ $aParams = array( 'user_id' => $iUserId, 'url' => $sFeedUrl, 'title' => $sFeedTitle, ); $res = DBUtil::autoInsert('plugin_rss', $aParams); return $res; } // Function to validate that a user has permissions for a specific document function validateDocumentPermissions($iUserId, $iDocumentId){ // check if user id is in session. If not, set it if(!isset($_SESSION["userID"])){ $_SESSION['userID'] = $iUserId; } // get document object $oDocument =& Document::get($iDocumentId); if (PEAR::isError($oDocument)) { return false; } // check permissions for document if(Permission::userHasDocumentReadPermission($oDocument)){ return true; }else{ return false; } } // Function to validate that a user has permissions for a specific folder function validateFolderPermissions($iUserId, $iFolderId){ // check if user id is in session. If not, set it if(!isset($_SESSION["userID"])){ $_SESSION['userID'] = $iUserId; } // get folder object $oFolder = Folder::get($iFolderId); if (PEAR::isError($oFolder)) { return false; } // check permissions for folder if(Permission::userHasFolderReadPermission($oFolder)){ return true; }else{ return false; } } // get icon link for rss function getRssLinkIcon(){ // built server path global $default; $sHostPath = "http" . ($default->sslEnabled ? "s" : "") . "://".$_SERVER['HTTP_HOST']."/".$GLOBALS['KTRootUrl']."/"; // create image $icon = "RSS"; return $icon; } // get rss link for a document/folder function getRssLink($iItemId, $sItemType){ $item = strToLower($sItemType); if($item == 'folder'){ $sItemParameter = '?folderId'; }else if($item == 'document'){ $sItemParameter = '?docId'; } // built server path global $default; $sHostPath = "http" . ($default->sslEnabled ? "s" : "") . "://" . $_SERVER['HTTP_HOST']; // build link $sLink = $sHostPath.KTBrowseUtil::buildBaseUrl('rss').$sItemParameter.'='.$iItemId; return $sLink; } // get rss icon link function getImageLink($iItemId, $sItemType){ return "".KTrss::getRssLinkIcon().""; } // get the mime type id for a document function getDocumentMimeTypeId($iUserId, $iDocumentId){ if(!isset($_SESSION["userID"])){ $_SESSION['userID'] = $iUserId; } // get document object $oDocument =& Document::get($iDocumentId); $docMime = $oDocument->getMimeTypeID(); return $docMime; } // get mime information for a document function getMimeTypeInfo($iUserId, $iDocumentId){ global $default; $mimeinfo['typeId'] = KTrss::getDocumentMimeTypeId($iUserId, $iDocumentId); // mime type id $mimeinfo['typeName'] = KTMime::getMimeTypeName($mimeinfo['typeId']); // mime type name $mimeinfo['typeFName'] = KTMime::getFriendlyNameForString($mimeinfo['typeName']); // mime type friendly name $mimeinfo['typeIcon'] = "http" . ($default->sslEnabled ? "s" : "") . "://".$_SERVER['HTTP_HOST']."/".$GLOBALS['KTRootUrl']."/resources/mimetypes/".KTMime::getIconPath($mimeinfo['typeId']).".png"; //icon path return $mimeinfo; } // get the default folder icon function getFolderIcon(){ global $default; return $mimeinfo['typeIcon'] = "http" . ($default->sslEnabled ? "s" : "") . "://".$_SERVER['HTTP_HOST']."/".$GLOBALS['KTRootUrl']."/thirdparty/icon-theme/16x16/mimetypes/x-directory-normal.png"; //icon path } // get a document information function getDocumentData($iUserId, $iDocumentId){ if(!isset($_SESSION["userID"])){ $_SESSION['userID'] = $iUserId; } // get document object $oDocument =& Document::get($iDocumentId); $cv = $oDocument->getContentVersionId(); $mv = $oDocument->getMetadataVersionId(); $sQuery = "SELECT dcv.document_id AS id, dmver.name AS name, dcv.filename AS filename, c.name AS author, o.name AS owner, dtl.name AS type, dwfs.name AS workflow_status " . "FROM documents AS d LEFT JOIN document_content_version AS dcv ON d.id = dcv.document_id " . "LEFT JOIN users AS o ON d.owner_id = o.id " . "LEFT JOIN users AS c ON d.creator_id = c.id " . "LEFT JOIN document_metadata_version AS dmv ON d.id = dmv.document_id " . "LEFT JOIN document_types_lookup AS dtl ON dmv.document_type_id = dtl.id " . "LEFT JOIN document_metadata_version AS dmver ON d.id = dmver.document_id " . "LEFT JOIN workflow_states AS dwfs ON dmver.workflow_state_id = dwfs.id " . "WHERE d.id = ? " . "AND dmver.id = ? " . "AND dcv.id = ? " . "LIMIT 1"; $aParams = array($iDocumentId, $mv, $cv); $aDocumentData = DBUtil::getResultArray(array($sQuery, $aParams)); if($aDocumentData){ return $aDocumentData; } } // get a folder information function getFolderData($iFolderId){ $sQuery = "SELECT f.id AS id, f.name AS name, f.name AS filename, c.name AS author, o.name AS owner, f.description AS description " . "FROM folders AS f " . "LEFT JOIN users AS o ON f.owner_id = o.id " . "LEFT JOIN users AS c ON f.creator_id = c.id " . "WHERE f.id = ? " . "LIMIT 1"; $aParams = array($iFolderId); $aFolderData = DBUtil::getResultArray(array($sQuery, $aParams)); if($aFolderData){ return $aFolderData; } } // get a listing of the latest 3 transactions for a document function getDocumentTransactions($iDocumentId){ $sQuery = "SELECT DT.datetime AS datetime, 'Document' AS type, DMV.name, D.full_path AS fullpath, DTT.name AS transaction_name, U.name AS user_name, DT.version AS version, DT.comment AS comment " . "FROM document_transactions AS DT INNER JOIN users AS U ON DT.user_id = U.id " . "INNER JOIN document_transaction_types_lookup AS DTT ON DTT.namespace = DT.transaction_namespace " . "LEFT JOIN document_metadata_version AS DMV ON DT.document_id = DMV.document_id " . "LEFT JOIN documents AS D ON DT.document_id = D.id " . "WHERE DT.document_id = ? " . "ORDER BY DT.datetime DESC " . "LIMIT 4"; $aParams = array($iDocumentId); $aDocumentTransactions = DBUtil::getResultArray(array($sQuery, $aParams)); if($aDocumentTransactions){ return $aDocumentTransactions; } } // Get a listing of the latest 3 transactions for a folder function getFolderTransactions($iFolderId){ $sQuery = "SELECT FT.datetime AS datetime, 'Folder' AS type, F.name, F.full_path AS fullpath, DTT.name AS transaction_name, U.name AS user_name, FT.comment AS comment " . "FROM folder_transactions AS FT LEFT JOIN users AS U ON FT.user_id = U.id " . "LEFT JOIN document_transaction_types_lookup AS DTT ON DTT.namespace = FT.transaction_namespace " . "LEFT JOIN folders AS F ON FT.folder_id = F.id " . "WHERE FT.folder_id = ? " . "ORDER BY FT.datetime DESC " . "LIMIT 4"; $aParams = array($iFolderId); $aFolderTransactions = DBUtil::getResultArray(array($sQuery, $aParams)); if($iFolderId){ return $aFolderTransactions; } } } ?>