. * * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. * * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the "Powered by * KnowledgeTree" logo and retain the original copyright notice. If the display of the * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices * must display the words "Powered by KnowledgeTree" and retain the original * copyright notice. * Contributor( s): ______________________________________ * */ /** * Trigger for document add (postValidate) * */ class KTAddDocumentTrigger { var $aInfo = null; /** * function to set the info for the trigger * * @param array $aInfo */ function setInfo(&$aInfo) { $this->aInfo =& $aInfo; } /** * postValidate method for trigger * * @return unknown */ function postValidate() { global $default; $oDocument =& $this->aInfo['document']; $aMeta = & $this->aInfo['aOptions']; $iDocId = $oDocument->getID(); // get tag id from document_fields table where name = Tag $sQuery = 'SELECT df.id AS id FROM document_fields AS df ' . 'WHERE df.name = \'Tag\''; $sTags = DBUtil::getOneResultKey(array($sQuery), 'id'); if (PEAR::isError($sTags)) { // XXX: log error return false; } $tagString = ''; // add tags if ($sTags) { if (count($aMeta['metadata']) > 0) { foreach($aMeta['metadata'] as $aMetaData) { $oProxy = $aMetaData[0]; if($oProxy->iId == $sTags) { $tagString = $aMetaData[1]; } } } if($tagString != ''){ $words_table = KTUtil::getTableName('tag_words'); $tagString = str_replace(' ', '', $tagString); $tags = explode(',',$tagString); $aTagIds = array(); foreach($tags as $sTag) { $sTag=strtolower(trim($sTag)); $res = DBUtil::getOneResult(array("SELECT id FROM $words_table WHERE tag = ?", array($sTag))); if (PEAR::isError($res)) { return $res; } if (is_null($res)) { $id = & DBUtil::autoInsert($words_table, array('tag'=>$sTag)); $aTagIds[$sTag] = $id; } else { $aTagIds[$sTag] = $res['id']; } } $doc_tags = KTUtil::getTableName('document_tags'); foreach($aTagIds as $sTag=>$tagid) { DBUtil::autoInsert($doc_tags, array( 'document_id'=>$iDocId, 'tag_id'=>$tagid), array('noid'=>true)); } } } } } /** * Trigger for document edit (postValidate) * */ class KTEditDocumentTrigger { var $aInfo = null; /** * function to set the info for the trigger * * @param array $aInfo */ function setInfo(&$aInfo) { $this->aInfo =& $aInfo; } /** * postValidate method for trigger * * @return unknown */ function postValidate() { global $default; $oDocument =& $this->aInfo['document']; $aMeta = & $this->aInfo['aOptions']; // get document id $iDocId = $oDocument->getID(); // get all tags that are linked to the document $sQuery = 'SELECT tw.id FROM tag_words AS tw, document_tags AS dt, documents AS d ' . 'WHERE dt.tag_id = tw.id ' . 'AND dt.document_id = d.id ' . 'AND d.id = ?'; $aParams = array($iDocId); $aTagId = DBUtil::getResultArray(array($sQuery, $aParams)); if (PEAR::isError($aTagId)) { // XXX: log error return false; } // if there are any related tags proceed if ($aTagId) { // delete all entries from document_tags table for the document $sQuery = 'DELETE FROM document_tags ' . 'WHERE document_id = ?'; $aParams = array($iDocId); $removed = DBUtil::runQuery(array($sQuery, $aParams)); if (PEAR::isError($removed)) { // XXX: log error return false; } } // proceed to add the tags as per normaly $sQuery = 'SELECT df.id AS id FROM document_fields AS df ' . 'WHERE df.name = \'Tag\''; $sTags = DBUtil::getOneResultKey(array($sQuery), 'id'); if (PEAR::isError($sTags)) { // XXX: log error return false; } $tagString = ''; if ($sTags) { // it is actually correct using $aMeta. It is different to the add trigger above... if (count($aMeta) > 0) { foreach($aMeta as $aMetaData) { $oProxy = $aMetaData[0]; if($oProxy->iId == $sTags) { $tagString = $aMetaData[1]; break; } } } if($tagString != ''){ $words_table = KTUtil::getTableName('tag_words'); $tagString = str_replace(' ', ' ', $tagString); $tags = explode(',',$tagString); $aTagIds = array(); foreach($tags as $sTag) { $sTag=strtolower(trim($sTag)); $res = DBUtil::getOneResult(array("SELECT id FROM $words_table WHERE tag = ?", array($sTag))); if (PEAR::isError($res)) { return $res; } if (is_null($res)) { $id = & DBUtil::autoInsert($words_table, array('tag'=>$sTag)); $aTagIds[$sTag] = $id; } else { $aTagIds[$sTag] = $res['id']; } } $doc_tags = KTUtil::getTableName('document_tags'); foreach($aTagIds as $sTag=>$tagid) { DBUtil::autoInsert($doc_tags, array( 'document_id'=>$iDocId, 'tag_id'=>$tagid), array('noid'=>true)); } } } } } ?>