diff options
author | mensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2008-11-28 06:09:45 +0000 |
---|---|---|
committer | mensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f> | 2008-11-28 06:09:45 +0000 |
commit | e0949aa0adfdfee4f78733277ff43d850ef3582e (patch) | |
tree | 49685833ea28c0a6522933520ba526ffdb0cb77f | |
parent | 96dfa82af5d9fd27b87eeef0ba877b022845e240 (diff) | |
download | semanticscuttle-e0949aa0adfdfee4f78733277ff43d850ef3582e.tar.gz semanticscuttle-e0949aa0adfdfee4f78733277ff43d850ef3582e.tar.bz2 |
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
-rw-r--r-- | importStructure.php | 80 | ||||
-rw-r--r-- | services/bookmark2tagservice.php | 4 | ||||
-rw-r--r-- | services/tag2tagservice.php | 11 | ||||
-rw-r--r-- | services/tagservice.php | 9 | ||||
-rw-r--r-- | templates/importStructure.tpl.php | 42 |
5 files changed, 142 insertions, 4 deletions
diff --git a/importStructure.php b/importStructure.php new file mode 100644 index 0000000..eb3df86 --- /dev/null +++ b/importStructure.php @@ -0,0 +1,80 @@ +<? +/*************************************************************************** + Copyright (C) 2004 - 2006 Scuttle project + http://sourceforge.net/projects/scuttle/ + http://scuttle.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + ***************************************************************************/ + +require_once('header.inc.php'); + +/* Service creation: only useful services are created */ +$userservice =& ServiceFactory::getServiceInstance('UserService'); +$templateservice =& ServiceFactory::getServiceInstance('TemplateService'); +$tag2tagservice =& ServiceFactory::getServiceInstance('Tag2TagService'); + +/* Managing current logged user */ +$currentUser = $userservice->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."<br>\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 @@ +<?php +$this->includeTemplate($GLOBALS['top_include']); +?> + +<div id="bookmarks"> +<form id="import" enctype="multipart/form-data" + action="<?php echo $formaction; ?>" method="post"> +<table> + <tr valign="top"> + <th align="left"><?php echo T_('File'); ?></th> + <td><input type="hidden" name="MAX_FILE_SIZE" value="1024000" /> <input + type="file" name="userfile" size="50" /></td> + </tr> + <tr> + <td /> + <td><input type="submit" value="<?php echo T_('Import'); ?>" /></td> + </tr> +</table> +</form> + +<h3><?php echo T_('Instructions'); ?></h3> +<ol> + <li> + <p><?php echo T_('Create your structure into a simple text file and following this model:');?></p> + <ul> + <li>firstTagOfLevel1</li> + <li> firstTagOfLevel2 <i>(the line starts with two spaces)</i></li> + <li> secondTagOfLevel2</li> + <li> thirdTagOfLevel2</li> + <li>secondTagOfLevel1</li> + <li> fourthTagOfLevel2 <i>(included into secondTagOfLevel1)</i></li> + </ul> + </li> + <li> + <p><?php echo T_('Then import the file. The tags and their relations will be added to your profile.'); ?></p> + </li> +</ol> +</div> + +<?php +$this->includeTemplate($GLOBALS['bottom_include']); +?>
\ No newline at end of file |