From e0949aa0adfdfee4f78733277ff43d850ef3582e Mon Sep 17 00:00:00 2001 From: mensonge Date: Fri, 28 Nov 2008 06:09:45 +0000 Subject: [PATCH] New Feature: possibility to import a structure of hierarchical tags from a file git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@179 b3834d28-1941-0410-a4f8-b48e95affb8f --- importStructure.php | 80 +++++++++++++++++++++++++++++++ services/bookmark2tagservice.php | 4 +- services/tag2tagservice.php | 11 +++++ services/tagservice.php | 9 +++- templates/importStructure.tpl.php | 42 ++++++++++++++++ 5 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 importStructure.php create mode 100644 templates/importStructure.tpl.php diff --git a/importStructure.php b/importStructure.php new file mode 100644 index 0000000..eb3df86 --- /dev/null +++ b/importStructure.php @@ -0,0 +1,80 @@ +getCurrentObjectUser(); + + +/* Managing all possible inputs */ +// First input is $_FILES + + +$tplVars = array(); +$tplVars['msg'] = ''; + +if ($userservice->isLoggedOn() && sizeof($_FILES) > 0 && $_FILES['userfile']['size'] > 0) { + $userinfo = $userservice->getCurrentObjectUser(); + + + // File handle + $html = file_get_contents($_FILES['userfile']['tmp_name']); + + // Create link array + preg_match_all('/(.*?)\n/', $html, $matches); + + //print_r($matches); die(); + + $fatherTag = ''; + $countNewLinks = 0; + foreach($matches[1] as $match) { + if($match == '') { + // do nothing because void line + }elseif(substr($match, 0, 2) == '//') { + // do nothing because commentary + } elseif(substr($match, 0, 2) == ' ') { + // add as child of previous tag + if($fatherTag != '') { + $tag2tagservice->addLinkedTags($fatherTag, $match, '>', $currentUser->getId()); + $countNewLinks++; + } else { + $tplVars['error'] = T_('Bad indentation'). ' '.$match; + } + } else{ + $fatherTag = $match; + } + } + $tplVars['msg'] = T_('New links between tags: ').$countNewLinks; + +} + +$templatename = 'importStructure.tpl'; +$tplVars['subtitle'] = T_('Import Structure'); +$tplVars['formaction'] = createURL('importStructure'); +$templateservice->loadTemplate($templatename, $tplVars); + +?> diff --git a/services/bookmark2tagservice.php b/services/bookmark2tagservice.php index 347df9c..7085d5f 100644 --- a/services/bookmark2tagservice.php +++ b/services/bookmark2tagservice.php @@ -41,8 +41,8 @@ class Bookmark2TagService { } } - //clean tags from strange characters - $tags = str_replace(array('"', '\'', '/'), "_", $tags); + $tagservice =& ServiceFactory::getServiceInstance('TagService'); + $tags = $tagservice->normalize($tags); $tags_count = is_array($tags)?count($tags):0; diff --git a/services/tag2tagservice.php b/services/tag2tagservice.php index 8c97606..4cce66d 100644 --- a/services/tag2tagservice.php +++ b/services/tag2tagservice.php @@ -16,11 +16,16 @@ class Tag2TagService { } function addLinkedTags($tag1, $tag2, $relationType, $uId) { + $tagservice =& ServiceFactory::getServiceInstance('TagService'); + $tag1 = $tagservice->normalize($tag1); + $tag2 = $tagservice->normalize($tag2); + if($tag1 == $tag2 || strlen($tag1) == 0 || strlen($tag2) == 0 || ($relationType != ">" && $relationType != "=") || ($this->existsLinkedTags($tag1, $tag2, $relationType, $uId))) { return false; } + $values = array('tag1' => $tag1, 'tag2' => $tag2, 'relationType'=> $relationType, 'uId'=> $uId); $query = 'INSERT INTO '. $this->getTableName() .' '. $this->db->sql_build_array('INSERT', $values); //die($query); @@ -214,11 +219,17 @@ class Tag2TagService { function existsLinkedTags($tag1, $tag2, $relationType, $uId) { + + //$tag1 = mysql_real_escape_string($tag1); + //$tag2 = mysql_real_escape_string($tag2); + $query = "SELECT tag1, tag2, relationType, uId FROM `". $this->getTableName() ."`"; $query.= " WHERE tag1 = '" .$tag1 ."'"; $query.= " AND tag2 = '".$tag2."'"; $query.= " AND relationType = '". $relationType ."'"; $query.= " AND uId = '".$uId."'"; + + //echo($query."
\n"); return $this->db->sql_numrows($this->db->sql_query($query)) > 0; } diff --git a/services/tagservice.php b/services/tagservice.php index 83349c6..504d13f 100644 --- a/services/tagservice.php +++ b/services/tagservice.php @@ -75,8 +75,13 @@ class TagService { $this->db->sql_query($query); return true; } - - + + /* normalize the input tags which could be a string or an array*/ + function normalize($tags) { + //clean tags from strange characters + $tags = str_replace(array('"', '\'', '/'), "_", $tags); + return $tags; + } function deleteAll() { $query = 'TRUNCATE TABLE `'. $this->getTableName() .'`'; diff --git a/templates/importStructure.tpl.php b/templates/importStructure.tpl.php new file mode 100644 index 0000000..9c54612 --- /dev/null +++ b/templates/importStructure.tpl.php @@ -0,0 +1,42 @@ +includeTemplate($GLOBALS['top_include']); +?> + +
+
+ + + + + + + + +
+
+
+ +

+
    +
  1. +

    +
      +
    • firstTagOfLevel1
    • +
    •     firstTagOfLevel2 (the line starts with two spaces)
    • +
    •     secondTagOfLevel2
    • +
    •     thirdTagOfLevel2
    • +
    • secondTagOfLevel1
    • +
    •     fourthTagOfLevel2 (included into secondTagOfLevel1)
    • +
    +
  2. +
  3. +

    +
  4. +
+
+ +includeTemplate($GLOBALS['bottom_include']); +?> \ No newline at end of file