diff --git a/plugins/ktcore/KTCorePlugin.php b/plugins/ktcore/KTCorePlugin.php index 4463575..289c5d0 100644 --- a/plugins/ktcore/KTCorePlugin.php +++ b/plugins/ktcore/KTCorePlugin.php @@ -158,6 +158,11 @@ class KTCorePlugin extends KTPlugin { $this->registerTrigger('edit', 'postValidate', 'SavedSearchSubscriptionTrigger', 'ktcore.search2.savedsearch.subscription.edit', KT_DIR . '/plugins/search2/Search2Triggers.php'); $this->registerTrigger('add', 'postValidate', 'SavedSearchSubscriptionTrigger', 'ktcore.search2.savedsearch.subscription.add', KT_DIR . '/plugins/search2/Search2Triggers.php'); $this->registerTrigger('discussion', 'postValidate', 'SavedSearchSubscriptionTrigger', 'ktcore.search2.savedsearch.subscription.discussion', KT_DIR . '/plugins/search2/Search2Triggers.php'); + + //Tag Cloud Triggers + $this->registerTrigger('add', 'postValidate', 'KTAddDocumentTrigger', 'ktcore.triggers.tagcloud.add', KT_DIR.'/plugins/tagcloud/TagCloudTriggers.php'); + $this->registerTrigger('edit', 'postValidate', 'KTEditDocumentTrigger', 'ktcore.triggers.tagcloud.edit', KT_DIR.'/plugins/tagcloud/TagCloudTriggers.php'); + // widgets $this->registerWidget('KTCoreHiddenWidget', 'ktcore.widgets.hidden', 'KTWidgets.php'); diff --git a/plugins/tagcloud/TagCloudPlugin.php b/plugins/tagcloud/TagCloudPlugin.php index 1cd9b26..038fe00 100644 --- a/plugins/tagcloud/TagCloudPlugin.php +++ b/plugins/tagcloud/TagCloudPlugin.php @@ -1,7 +1,7 @@ registerCriterion('TagCloudCriterion', 'ktcore.criteria.tagcloud', KT_LIB_DIR . '/browse/Criteria.inc'); $this->registerDashlet('TagCloudDashlet', 'ktcore.tagcloud.feed.dashlet', 'TagCloudDashlet.php'); $this->registerPage('TagCloudRedirection', 'TagCloudRedirectPage', __FILE__); - $this->registerTrigger('add', 'postValidate', 'KTAddDocumentTrigger', - 'ktcore.triggers.tagcloud.add'); - $this->registerTrigger('edit', 'postValidate', 'KTEditDocumentTrigger', - 'ktcore.triggers.tagcloud.edit'); + // Check if the tagcloud fielset entry exists, if not, create it if(!TagCloudPlugin::tagFieldsetExists()){ @@ -192,213 +189,4 @@ require_once(KT_LIB_DIR . '/templating/templating.inc.php'); $oPluginRegistry =& KTPluginRegistry::getSingleton(); $oPluginRegistry->registerPlugin('TagCloudPlugin', 'ktcore.tagcloud.plugin', __FILE__); -/** - * 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)); - } - } - } - } -} ?> diff --git a/plugins/tagcloud/TagCloudTriggers.php b/plugins/tagcloud/TagCloudTriggers.php new file mode 100644 index 0000000..47a8124 --- /dev/null +++ b/plugins/tagcloud/TagCloudTriggers.php @@ -0,0 +1,247 @@ +. + * + * 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)); + } + } + } + } +} +?> \ No newline at end of file