]> gitweb.fluxo.info Git - semanticscuttle.git/commitdiff
add stats to tags relation and use them to display tags
authormensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f>
Tue, 22 Jan 2008 16:16:06 +0000 (16:16 +0000)
committermensonge <mensonge@b3834d28-1941-0410-a4f8-b48e95affb8f>
Tue, 22 Jan 2008 16:16:06 +0000 (16:16 +0000)
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@21 b3834d28-1941-0410-a4f8-b48e95affb8f

12 files changed:
admin.php [new file with mode: 0644]
alltags.php
locales/fr_FR/LC_MESSAGES/messages.mo
locales/fr_FR/LC_MESSAGES/messages.po
locales/messages.po
populartags.php
services/tag2tagservice.php
services/tagstatservice.php [new file with mode: 0644]
tables.sql
templates/sidebar.block.linked.php
templates/tags.tpl.php
tests/tag2TagTest.php

diff --git a/admin.php b/admin.php
new file mode 100644 (file)
index 0000000..81dde3c
--- /dev/null
+++ b/admin.php
@@ -0,0 +1,34 @@
+<?php
+/***************************************************************************
+Copyright (C) 2006 - 2007 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
+***************************************************************************/
+
+// Uncomment the following lines to execute the admin script. Don't forget to re-comment them after using.
+
+/* 
+require_once('header.inc.php');
+$tagstatservice   = & ServiceFactory :: getServiceInstance('TagStatService');
+$templateservice  = & ServiceFactory :: getServiceInstance('TemplateService');
+
+// Update the stats
+$tagstatservice->updateAllStat();
+
+echo "Admin script executed: OK!";
+*/
+?>
index b7844146085d8fc499ee74dd536a112d23904637..3805a3d16e6a86cefa895eae8737a30714d7def4 100644 (file)
@@ -75,6 +75,9 @@ if (isset($userid)) {
     $tplVars['cat_url'] = createURL('tags', '%2$s');
 }
 
+$tplVars['sidebar_blocks'] = array('linked');
+$tplVars['userid'] = $userid;
+
 $tplVars['subtitle'] = $pagetitle;
 $templateservice->loadTemplate('tags.tpl', $tplVars);
 
index c2d6b80318302dea3f1ed230127116d0a15d6753..c068266ec7a1559d42925a94a73832707778d04e 100644 (file)
Binary files a/locales/fr_FR/LC_MESSAGES/messages.mo and b/locales/fr_FR/LC_MESSAGES/messages.mo differ
index c3c1691594bce7d527b03a28980ff3f057b09ff9..5b1e1d5a49db497997d89e763306bf6c2d58d817 100644 (file)
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Scuttle\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-01-14 11:58+0100\n"
-"PO-Revision-Date: 2008-01-14 11:31+0100\n"
+"POT-Creation-Date: 2008-01-22 16:54+0100\n"
+"PO-Revision-Date: 2008-01-22 16:55+0100\n"
 "Last-Translator: BenjaminHKB <benjamin.huynh-kim-bang@loria.fr>\n"
 "Language-Team: fr-FR <toony.sf@chezouam.net>\n"
 "MIME-Version: 1.0\n"
@@ -19,7 +19,8 @@ msgstr ""
 "X-Poedit-Country: FRANCE\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: ../../../about.php:25 ../../../templates/toolbar.inc.php:23
+#: ../../../about.php:25
+#: ../../../templates/toolbar.inc.php:23
 msgid "About"
 msgstr "À propos"
 
@@ -27,7 +28,8 @@ msgstr "À propos"
 msgid "You are not allowed to delete this bookmark"
 msgstr "Vous ne pouvez pas supprimer ce signet."
 
-#: ../../../ajaxDelete.php:34 ../../../edit.php:78
+#: ../../../ajaxDelete.php:34
+#: ../../../edit.php:78
 msgid "Failed to delete bookmark"
 msgstr "Erreur dans la suppression du signet"
 
@@ -35,31 +37,36 @@ msgstr "Erreur dans la suppression du signet"
 msgid "All Tags"
 msgstr "Tous les tags"
 
-#: ../../../alltags.php:57 ../../../bookmarks.php:72
-#: ../../../populartags.php:58 ../../../profile.php:44 ../../../rss.php:62
-#: ../../../search.php:87 ../../../watch.php:34 ../../../watchlist.php:61
+#: ../../../alltags.php:57
+#: ../../../bookmarks.php:72
+#: ../../../populartags.php:58
+#: ../../../profile.php:44
+#: ../../../rss.php:62
+#: ../../../search.php:87
+#: ../../../watch.php:34
+#: ../../../watchlist.php:61
 #, php-format
 msgid "User with username %s was not found"
 msgstr "L'utilisateur %s n'a pas été trouvé."
 
-#: ../../../bookmarks.php:95 ../../../edit.php:44
+#: ../../../bookmarks.php:95
+#: ../../../edit.php:44
 msgid "Your bookmark must have a title and an address"
 msgstr "Votre signet doit avoir un titre et une adresse."
 
-#: ../../../bookmarks.php:115 ../../../edit.php:58
+#: ../../../bookmarks.php:115
+#: ../../../edit.php:58
 msgid "Bookmark saved"
 msgstr "Signet enregistré."
 
-#: ../../../bookmarks.php:123 ../../../import.php:99
+#: ../../../bookmarks.php:123
+#: ../../../import.php:99
 #: ../../../importNetscape.php:74
-msgid ""
-"There was an error saving your bookmark. Please try again or contact the "
-"administrator."
-msgstr ""
-"Il y a eu une erreur en enregistrant ce signet. Veuillez rééssayer ou "
-"contacter votre administrateur."
+msgid "There was an error saving your bookmark. Please try again or contact the administrator."
+msgstr "Il y a eu une erreur en enregistrant ce signet. Veuillez rééssayer ou contacter votre administrateur."
 
-#: ../../../bookmarks.php:161 ../../../templates/toolbar.inc.php:14
+#: ../../../bookmarks.php:161
+#: ../../../templates/toolbar.inc.php:14
 msgid "Add a Bookmark"
 msgstr "Ajouter un signet"
 
@@ -92,7 +99,8 @@ msgstr "Vous n'êtes pas autorisé à éditer ce signet."
 msgid "Error while saving your bookmark"
 msgstr "Erreur pendant l'enregistrement de votre signet."
 
-#: ../../../edit.php:88 ../../../templates/editprofile.tpl.php:49
+#: ../../../edit.php:88
+#: ../../../templates/editprofile.tpl.php:49
 msgid "Save Changes"
 msgstr "Enregister les modifications"
 
@@ -108,7 +116,8 @@ msgstr "Erreur SQL"
 msgid "Line"
 msgstr "Ligne"
 
-#: ../../../functions.inc.php:115 ../../../templates/importDelicious.tpl.php:8
+#: ../../../functions.inc.php:115
+#: ../../../templates/importDelicious.tpl.php:8
 #: ../../../templates/importNetscape.tpl.php:9
 msgid "File"
 msgstr "Fichier"
@@ -168,11 +177,13 @@ msgstr "Erreur XML: %s à la ligne %d"
 msgid "Import Bookmarks from del.icio.us"
 msgstr "Importer les signet depuis del.icio.us"
 
-#: ../../../import.php:86 ../../../importNetscape.php:64
+#: ../../../import.php:86
+#: ../../../importNetscape.php:64
 msgid "You have already submitted this bookmark."
 msgstr "Vous avez déjà enregistré ce signet."
 
-#: ../../../import.php:97 ../../../importNetscape.php:72
+#: ../../../import.php:97
+#: ../../../importNetscape.php:72
 #, fuzzy
 msgid "Bookmark imported."
 msgstr "Signets importés."
@@ -199,18 +210,21 @@ msgstr "Conservez, partagez et taggez vos liens favoris"
 msgid "Recent Bookmarks"
 msgstr "Signets récents"
 
-#: ../../../jsScuttle.php:22 ../../../templates/tag2tagadd.tpl.php:9
+#: ../../../jsScuttle.php:22
+#: ../../../templates/tag2tagadd.tpl.php:9
 #: ../../../templates/tag2tagdelete.tpl.php:8
 #: ../../../templates/tagdelete.tpl.php:6
 msgid "Are you sure?"
 msgstr "Etes-vous sûr ?"
 
-#: ../../../jsScuttle.php:22 ../../../templates/tag2tagdelete.tpl.php:10
+#: ../../../jsScuttle.php:22
+#: ../../../templates/tag2tagdelete.tpl.php:10
 #: ../../../templates/tagdelete.tpl.php:8
 msgid "Yes"
 msgstr "Oui"
 
-#: ../../../jsScuttle.php:22 ../../../templates/tag2tagdelete.tpl.php:11
+#: ../../../jsScuttle.php:22
+#: ../../../templates/tag2tagdelete.tpl.php:11
 #: ../../../templates/tagdelete.tpl.php:9
 msgid "No"
 msgstr "Non"
@@ -225,11 +239,10 @@ msgstr "Non Disponible"
 
 #: ../../../login.php:38
 msgid "The details you have entered are incorrect. Please try again."
-msgstr ""
-"Les informations que vous avez entrées sont incorrectes. Veuillez "
-"recommencer."
+msgstr "Les informations que vous avez entrées sont incorrectes. Veuillez recommencer."
 
-#: ../../../login.php:48 ../../../templates/login.tpl.php:26
+#: ../../../login.php:48
+#: ../../../templates/login.tpl.php:26
 #: ../../../templates/toolbar.inc.php:24
 msgid "Log In"
 msgstr "Se connecter"
@@ -239,11 +252,8 @@ msgid "You must enter your username."
 msgstr "Vous devez entrer votre nom d'utilisateur."
 
 #: ../../../password.php:35
-msgid ""
-"You must enter your <abbr title=\"electronic mail\">e-mail</abbr> address."
-msgstr ""
-"Vous <em>devez</em> saisir une <abbr title=\"adresse électronique\">E-mail</"
-"abbr>."
+msgid "You must enter your <abbr title=\"electronic mail\">e-mail</abbr> address."
+msgstr "Vous <em>devez</em> saisir une <abbr title=\"adresse électronique\">E-mail</abbr>."
 
 #: ../../../password.php:42
 msgid "No matches found for that username."
@@ -251,31 +261,20 @@ msgstr "Rien de trouvé pour ce nom d'utilisateur."
 
 #: ../../../password.php:45
 #, fuzzy
-msgid ""
-"No matches found for that combination of username and <abbr title="
-"\"electronic mail\">e-mail</abbr> address."
-msgstr ""
-"Nous n'avons rien trouvé pour cette combinaison de nom d'utilisateur et "
-"d'<abbr title=\"adresse mail\">e-mail</abbr>."
+msgid "No matches found for that combination of username and <abbr title=\"electronic mail\">e-mail</abbr> address."
+msgstr "Nous n'avons rien trouvé pour cette combinaison de nom d'utilisateur et d'<abbr title=\"adresse mail\">e-mail</abbr>."
 
 #: ../../../password.php:53
-msgid ""
-"There was an error while generating your new password. Please try again."
-msgstr ""
-"Il y a eu une erreur en enregistrant ce signet. Veuillez rééssayer ou "
-"contacter votre administrateur."
+msgid "There was an error while generating your new password. Please try again."
+msgstr "Il y a eu une erreur en enregistrant ce signet. Veuillez rééssayer ou contacter votre administrateur."
 
 #: ../../../password.php:57
 msgid "Your new password is:"
 msgstr "Votre nouveau mot de passe est:"
 
 #: ../../../password.php:57
-msgid ""
-"To keep your bookmarks secure, you should change this password in your "
-"profile the next time you log in."
-msgstr ""
-"Pour garder vos signets sûrs, vous devriez changer ce mot de passe dans "
-"votre profil lors de votre prochaine authentification."
+msgid "To keep your bookmarks secure, you should change this password in your profile the next time you log in."
+msgstr "Pour garder vos signets sûrs, vous devriez changer ce mot de passe dans votre profil lors de votre prochaine authentification."
 
 #: ../../../password.php:60
 #, php-format
@@ -291,14 +290,16 @@ msgstr "Nouveau mot de passe généré et envoyé à l'adresse %s"
 msgid "Forgotten Password"
 msgstr "Mot de passe oublié"
 
-#: ../../../populartags.php:49 ../../../templates/dynamictags.inc.php:101
+#: ../../../populartags.php:49
+#: ../../../templates/dynamictags.inc.php:101
 #: ../../../templates/sidebar.block.common.php:9
 #: ../../../templates/sidebar.block.popular.php:15
 #: ../../../templates/sidebar.block.recent.php:25
 msgid "Popular Tags"
 msgstr "Tags populaires"
 
-#: ../../../profile.php:52 ../../../watchlist.php:116
+#: ../../../profile.php:52
+#: ../../../watchlist.php:116
 msgid "Username was not specified"
 msgstr "Le nom d'utilisateur n'a pas été spécifié."
 
@@ -306,7 +307,8 @@ msgstr "Le nom d'utilisateur n'a pas été spécifié."
 msgid "My Profile"
 msgstr "Mon Profil"
 
-#: ../../../profile.php:60 ../../../templates/toolbar.inc.php:13
+#: ../../../profile.php:60
+#: ../../../templates/toolbar.inc.php:13
 msgid "Profile"
 msgstr "Profil"
 
@@ -324,8 +326,7 @@ msgstr "Adresse de courrier électronique invalide."
 
 #: ../../../profile.php:90
 msgid "An error occurred while saving your changes."
-msgstr ""
-"Une erreur s'est produite pendant l'enregistrement de vos modifications."
+msgstr "Une erreur s'est produite pendant l'enregistrement de vos modifications."
 
 #: ../../../profile.php:92
 msgid "Changes saved."
@@ -333,9 +334,7 @@ msgstr "Modifications enregistrées."
 
 #: ../../../register.php:33
 msgid "You <em>must</em> enter a username, password and e-mail address."
-msgstr ""
-"Vous <em>devez</em> saisir un nom d'utilisateur, un mot de passe, un nom et "
-"un <abbr title=\"adresse électronique\">e-mail</abbr>"
+msgstr "Vous <em>devez</em> saisir un nom d'utilisateur, un mot de passe, un nom et un <abbr title=\"adresse électronique\">e-mail</abbr>"
 
 #: ../../../register.php:37
 msgid "This username has been reserved, please make another choice."
@@ -361,7 +360,8 @@ msgstr "Votre inscription a bien été prise en compte !"
 msgid "Registration failed. Please try again."
 msgstr "Enregistrement raté. Veuillez rééssayer."
 
-#: ../../../register.php:66 ../../../templates/register.tpl.php:41
+#: ../../../register.php:66
+#: ../../../templates/register.tpl.php:41
 #: ../../../templates/toolbar.inc.php:25
 msgid "Register"
 msgstr "S'enregistrer"
@@ -371,7 +371,8 @@ msgstr "S'enregistrer"
 msgid "Recent bookmarks posted to %s"
 msgstr "Signets ajoutés récemment à %s"
 
-#: ../../../search.inc.php:13 ../../../search.inc.php:41
+#: ../../../search.inc.php:13
+#: ../../../search.inc.php:41
 msgid "Search"
 msgstr "Chercher"
 
@@ -395,15 +396,17 @@ msgstr "tous les signets"
 msgid "for"
 msgstr "pour"
 
-#: ../../../search.php:58 ../../../search.php:104
+#: ../../../search.php:58
+#: ../../../search.php:104
 msgid "Search Bookmarks"
 msgstr "Recherche de signets"
 
 #: ../../../search.php:64
 msgid "Search Results"
-msgstr "Résulats de recherche"
+msgstr "Résultats de recherche"
 
-#: ../../../tag2tagadd.php:31 ../../../tag2tagdelete.php:31
+#: ../../../tag2tagadd.php:31
+#: ../../../tag2tagdelete.php:31
 msgid "Permission denied."
 msgstr "Permission non accordée."
 
@@ -452,21 +455,22 @@ msgstr "Tag renommé"
 msgid "Failed to rename the tag"
 msgstr "Erreur dans la suppression du tag"
 
-#: ../../../tagrename.php:57 ../../../templates/sidebar.block.tagactions.php:9
+#: ../../../tagrename.php:57
+#: ../../../templates/sidebar.block.tagactions.php:9
 msgid "Rename Tag"
 msgid_plural "Rename Tags"
 msgstr[0] "Renommer le tag"
 msgstr[1] "TRenommer les tags"
 
-#: ../../../tags.php:38 ../../../templates/editbookmark.tpl.php:44
+#: ../../../tags.php:38
+#: ../../../templates/editbookmark.tpl.php:44
 #: ../../../templates/toolbar.inc.php:11
 msgid "Tags"
 msgstr "Tags"
 
 #: ../../../users.php:33
-#, fuzzy
 msgid "Users"
-msgstr "Nom d'utilisateur"
+msgstr "Utilisateurs"
 
 #: ../../../watch.php:46
 msgid "User removed from your watchlist"
@@ -481,42 +485,28 @@ msgstr "Utilisateur ajouté à la liste des consultés."
 msgid "My Watchlist"
 msgstr "Liste des signets vus"
 
-#: ../../../watchlist.php:105 ../../../templates/toolbar.inc.php:12
+#: ../../../watchlist.php:105
+#: ../../../templates/toolbar.inc.php:12
 #, fuzzy
 msgid "Watchlist"
 msgstr "Liste des signets vus"
 
 #: ../../../templates/about.tpl.php:6
-msgid ""
-"<strong>Store</strong> all your favourite links in one place, accessible "
-"from anywhere."
-msgstr ""
-"<strong>Conservez</strong> tous vos signets au même endroit, accessibles de "
-"partout. "
+msgid "<strong>Store</strong> all your favourite links in one place, accessible from anywhere."
+msgstr "<strong>Conservez</strong> tous vos signets au même endroit, accessibles de partout. "
 
 #: ../../../templates/about.tpl.php:7
-msgid ""
-"<strong>Share</strong> your bookmarks with everyone, with friends on your "
-"watchlist or just keep them private."
-msgstr ""
-"<strong>Partagez</strong> vos signets avec tout le monde, avec les "
-"utilisateurs autorisés ou gardez-les pour vous."
+msgid "<strong>Share</strong> your bookmarks with everyone, with friends on your watchlist or just keep them private."
+msgstr "<strong>Partagez</strong> vos signets avec tout le monde, avec les utilisateurs autorisés ou gardez-les pour vous."
 
 #: ../../../templates/about.tpl.php:8
-msgid ""
-"<strong>Tag</strong> your bookmarks with as many labels as you want, instead "
-"of wrestling with folders."
-msgstr ""
-"<strong>Taggez</strong> vos signets avec autant de labels que vous le "
-"souhaitez au lieu de les hiérarchiser avec des dossiers."
+msgid "<strong>Tag</strong> your bookmarks with as many labels as you want, instead of wrestling with folders."
+msgstr "<strong>Taggez</strong> vos signets avec autant de labels que vous le souhaitez au lieu de les hiérarchiser avec des dossiers."
 
 #: ../../../templates/about.tpl.php:9
 #, php-format
-msgid ""
-"<strong><a href=\"register.php\">Register now</a></strong> to start using %s!"
-msgstr ""
-"<a href=\"register.php\">Enregistrez-vous maintenant</a> pour poster vos "
-"propres signets !"
+msgid "<strong><a href=\"register.php\">Register now</a></strong> to start using %s!"
+msgstr "<a href=\"register.php\">Enregistrez-vous maintenant</a> pour poster vos propres signets sur %s !"
 
 #: ../../../templates/about.tpl.php:12
 msgid "Geek Stuff"
@@ -524,33 +514,16 @@ msgstr "Pour les Geeks"
 
 #: ../../../templates/about.tpl.php:14
 #, php-format
-msgid ""
-"%s is based on <a href=\"http://sourceforge.net/projects/scuttle/\">an open-"
-"source project</a> licensed under the <a href=\"http://www.gnu.org/copyleft/"
-"gpl.html\"><acronym title=\"GNU's Not Unix\">GNU</acronym> General Public "
-"License</a>. This means you can host it on your own web server for free, "
-"whether it is on the Internet, a private network or just your own computer."
-msgstr ""
-"%s est basé sur <a href=\"http://sourceforge.net/projects/scuttle/\">un "
-"projet open-source</a>, sous la license <a href=\"http://www.gnu.org/"
-"copyleft/gpl.html\"><acronym title=\"GNU's Not Unix\">GNU</acronym> General "
-"Public License</a>. Vous pouvez donc héberger Scuttle sur votre propre "
-"serveur gratuitement, qu'il soit relié à Internet, dans un réseau privé ou "
-"juste sur votre ordinateur personnel."
+msgid "%s is based on <a href=\"http://sourceforge.net/projects/scuttle/\">an open-source project</a> licensed under the <a href=\"http://www.gnu.org/copyleft/gpl.html\"><acronym title=\"GNU's Not Unix\">GNU</acronym> General Public License</a>. This means you can host it on your own web server for free, whether it is on the Internet, a private network or just your own computer."
+msgstr "%s est basé sur <a href=\"http://sourceforge.net/projects/scuttle/\">un projet open-source</a>, sous la license <a href=\"http://www.gnu.org/copyleft/gpl.html\"><acronym title=\"GNU's Not Unix\">GNU</acronym> General Public License</a>. Vous pouvez donc héberger Scuttle sur votre propre serveur gratuitement, qu'il soit relié à Internet, dans un réseau privé ou juste sur votre ordinateur personnel."
 
 #: ../../../templates/about.tpl.php:15
 #, php-format
-msgid ""
-"%1$s supports most of the <a href=\"http://del.icio.us/doc/api\">del.icio.us "
-"<abbr title=\"Application Programming Interface\">API</abbr></a>. Almost all "
-"of the neat tools made for that system can be modified to work with %1$s "
-"instead. If you find a tool that won't let you change the API address, ask "
-"the creator to add this setting. You never know, they might just do it."
-msgstr ""
-"%1$s supporte la plupart de l'<a href=\"http://del.icio.us/doc/api\">del."
-"icio.us <abbr title=\"Application Programming Interface\">API</abbr></a>."
+msgid "%1$s supports most of the <a href=\"http://del.icio.us/doc/api\">del.icio.us <abbr title=\"Application Programming Interface\">API</abbr></a>. Almost all of the neat tools made for that system can be modified to work with %1$s instead. If you find a tool that won't let you change the API address, ask the creator to add this setting. You never know, they might just do it."
+msgstr "%1$s supporte la plupart de l'<a href=\"http://del.icio.us/doc/api\">del.icio.us <abbr title=\"Application Programming Interface\">API</abbr></a>."
 
-#: ../../../templates/bookmarks.tpl.php:17 ../../../templates/tags.tpl.php:7
+#: ../../../templates/bookmarks.tpl.php:17
+#: ../../../templates/tags.tpl.php:7
 #: ../../../templates/users.tpl.php:8
 msgid "Sort by:"
 msgstr "Classer par :"
@@ -657,11 +630,8 @@ msgid "Comma-separated"
 msgstr "Séparés par des virgules"
 
 #: ../../../templates/editbookmark.tpl.php:50
-msgid ""
-"Note: use \">\" to include one tag in another. e.g.: europe>france>paris"
-msgstr ""
-"Note: utiliser \">\" pour inclure un tag dans un autre. ex: "
-"europe>france>paris"
+msgid "Note: use \">\" to include one tag in another. e.g.: europe>france>paris"
+msgstr "Note: utiliser \">\" pour inclure un tag dans un autre. ex: europe>france>paris"
 
 #: ../../../templates/editbookmark.tpl.php:53
 #: ../../../templates/importDelicious.tpl.php:15
@@ -695,13 +665,8 @@ msgstr "Bookmarklet"
 
 #: ../../../templates/editbookmark.tpl.php:98
 #, php-format
-msgid ""
-"Drag one of the following bookmarklets to your browser's bookmarks and click "
-"it whenever you want to add the page you are on to %s"
-msgstr ""
-"Déplacez l'un des 'bookmarklet' suivants dans les marques-pages de votre "
-"navigateur et cliquez dessus chaque fois que vous souhaitez ajouter un "
-"signet pour la page courante dans %s "
+msgid "Drag one of the following bookmarklets to your browser's bookmarks and click it whenever you want to add the page you are on to %s"
+msgstr "Déplacez l'un des 'bookmarklet' suivants dans les marques-pages de votre navigateur et cliquez dessus chaque fois que vous souhaitez ajouter un signet pour la page courante dans %s "
 
 #: ../../../templates/editbookmark.tpl.php:110
 #, php-format
@@ -736,8 +701,10 @@ msgid "Account Details"
 msgstr "Détail du compte"
 
 #: ../../../templates/editprofile.tpl.php:11
-#: ../../../templates/login.tpl.php:15 ../../../templates/password.tpl.php:10
-#: ../../../templates/profile.tpl.php:7 ../../../templates/register.tpl.php:16
+#: ../../../templates/login.tpl.php:15
+#: ../../../templates/password.tpl.php:10
+#: ../../../templates/profile.tpl.php:7
+#: ../../../templates/register.tpl.php:16
 msgid "Username"
 msgstr "Nom d'utilisateur"
 
@@ -797,28 +764,16 @@ msgid "Instructions"
 msgstr "Instructions"
 
 #: ../../../templates/importDelicious.tpl.php:33
-msgid ""
-"Log in to the <a href=\"http://del.icio.us/api/posts/all\">export page at "
-"del.icio.us</a>"
-msgstr ""
-"Se connecter à la <a href=\"http://del.icio.us/api/posts/all\">page d'export "
-"de del.icio.us</a>"
+msgid "Log in to the <a href=\"http://del.icio.us/api/posts/all\">export page at del.icio.us</a>"
+msgstr "Se connecter à la <a href=\"http://del.icio.us/api/posts/all\">page d'export de del.icio.us</a>"
 
 #: ../../../templates/importDelicious.tpl.php:34
-msgid ""
-"Save the resulting <abbr title=\"Extensible Markup Language\">XML</abbr> "
-"file to your computer"
-msgstr ""
-"Enregistrer le fichier <abbr title=\"Extensible Markup Language\">XML</abbr> "
-"résultant sur votre ordinateur"
+msgid "Save the resulting <abbr title=\"Extensible Markup Language\">XML</abbr> file to your computer"
+msgstr "Enregistrer le fichier <abbr title=\"Extensible Markup Language\">XML</abbr> résultant sur votre ordinateur"
 
 #: ../../../templates/importDelicious.tpl.php:35
-msgid ""
-"Click <kbd>Browse...</kbd> to find this file on your computer. The maximum "
-"size the file can be is 1MB"
-msgstr ""
-"Cliquez sur <kbd>Parcourir...</kbd> pour trouver le fichier sur votre "
-"ordinateur. La taille maximale du fichier ne peut excèder 1Mo"
+msgid "Click <kbd>Browse...</kbd> to find this file on your computer. The maximum size the file can be is 1MB"
+msgstr "Cliquez sur <kbd>Parcourir...</kbd> pour trouver le fichier sur votre ordinateur. La taille maximale du fichier ne peut excèder 1Mo"
 
 #: ../../../templates/importDelicious.tpl.php:36
 #: ../../../templates/importNetscape.tpl.php:43
@@ -827,48 +782,31 @@ msgstr "Selectionnez la vision par défaut à appliquer à vos signets importés
 
 #: ../../../templates/importDelicious.tpl.php:37
 #: ../../../templates/importNetscape.tpl.php:44
-msgid ""
-"Click <kbd>Import</kbd> to start importing the bookmarks; it may take a "
-"minute"
-msgstr ""
-"Cliquez sur <kbd>Importer</kbd> pour débuter l'import des signets; cette "
-"opération peut prendre quelques minutes"
+msgid "Click <kbd>Import</kbd> to start importing the bookmarks; it may take a minute"
+msgstr "Cliquez sur <kbd>Importer</kbd> pour débuter l'import des signets; cette opération peut prendre quelques minutes"
 
 #: ../../../templates/importNetscape.tpl.php:35
 msgid "Export your bookmarks from your browser to a file"
 msgstr "Exporter vos signets dans un fichier depuis votre navigateur"
 
 #: ../../../templates/importNetscape.tpl.php:37
-msgid ""
-"Internet Explorer: <kbd>File &gt; Import and Export... &gt; Export Favorites"
-msgstr ""
-"Internet Explorer: <kbd>Ficher &gt; Importer et Exporter... &gt; Exporter "
-"les favoris"
+msgid "Internet Explorer: <kbd>File &gt; Import and Export... &gt; Export Favorites"
+msgstr "Internet Explorer: <kbd>Ficher &gt; Importer et Exporter... &gt; Exporter les favoris"
 
 #: ../../../templates/importNetscape.tpl.php:38
-msgid ""
-"Mozilla Firefox: <kbd>Bookmarks &gt; Manage Bookmarks... &gt; File &gt; "
-"Export..."
-msgstr ""
-"Mozilla Firefox: <kbd>Marques-pages &gt; Gérer les marques-pages... &gt; "
-"Fichier &gt; Exporter..."
+msgid "Mozilla Firefox: <kbd>Bookmarks &gt; Manage Bookmarks... &gt; File &gt; Export..."
+msgstr "Mozilla Firefox: <kbd>Marques-pages &gt; Gérer les marques-pages... &gt; Fichier &gt; Exporter..."
 
 #: ../../../templates/importNetscape.tpl.php:39
-msgid ""
-"Netscape: <kbd>Bookmarks &gt; Manage Bookmarks... &gt; Tools &gt; Export..."
-msgstr ""
-"Netscape: <kbd>Marques-pages &gt; Gérer les marques-pages... &gt; Outils "
-"&gt; Exporter..."
+msgid "Netscape: <kbd>Bookmarks &gt; Manage Bookmarks... &gt; Tools &gt; Export..."
+msgstr "Netscape: <kbd>Marques-pages &gt; Gérer les marques-pages... &gt; Outils &gt; Exporter..."
 
 #: ../../../templates/importNetscape.tpl.php:42
-msgid ""
-"Click <kbd>Browse...</kbd> to find the saved bookmark file on your computer. "
-"The maximum size the file can be is 1MB"
-msgstr ""
-"Cliquez sur <kbd>Parcourir...</kbd> pour trouver le fichier sur votre "
-"ordinateur. La taille maximale du fichier ne peut excèder 1Mo"
+msgid "Click <kbd>Browse...</kbd> to find the saved bookmark file on your computer. The maximum size the file can be is 1MB"
+msgstr "Cliquez sur <kbd>Parcourir...</kbd> pour trouver le fichier sur votre ordinateur. La taille maximale du fichier ne peut excèder 1Mo"
 
-#: ../../../templates/login.tpl.php:20 ../../../templates/register.tpl.php:21
+#: ../../../templates/login.tpl.php:20
+#: ../../../templates/register.tpl.php:21
 msgid "Password"
 msgstr "Mot de passe"
 
@@ -882,14 +820,8 @@ msgstr "Avez-vous oublié votre mot de passe ?"
 
 #: ../../../templates/password.tpl.php:5
 #, php-format
-msgid ""
-"If you have forgotten your password, %s can generate a new one. Enter the "
-"username and e-mail address of your account into the form below and we will "
-"e-mail your new password to you."
-msgstr ""
-"Si vous avez oublié votre mot de passe, %s peut en générer un nouveau. "
-"Entrez le nom d'utilisateur et l'adresse email de votre compte dans le "
-"formulaire ci-dessous et nous vous enverrons un nouveau mot de passe."
+msgid "If you have forgotten your password, %s can generate a new one. Enter the username and e-mail address of your account into the form below and we will e-mail your new password to you."
+msgstr "Si vous avez oublié votre mot de passe, %s peut en générer un nouveau. Entrez le nom d'utilisateur et l'adresse email de votre compte dans le formulaire ci-dessous et nous vous enverrons un nouveau mot de passe."
 
 #: ../../../templates/password.tpl.php:19
 msgid "Generate Password"
@@ -912,21 +844,21 @@ msgstr "Consultés"
 
 #: ../../../templates/register.tpl.php:11
 #, php-format
-msgid ""
-"Sign up here to create a free %s account. All the information requested "
-"below is required"
-msgstr ""
-"Enregistrez-vous ici pour créer un compte gratuit %s. Toutes les "
-"informations requises ci-dessous sont nécessaires."
+msgid "Sign up here to create a free %s account. All the information requested below is required"
+msgstr "Enregistrez-vous ici pour créer un compte gratuit %s. Toutes les informations requises ci-dessous sont nécessaires."
 
 #: ../../../templates/register.tpl.php:33
 msgid "Antispam question"
 msgstr "Question antispam"
 
-#: ../../../templates/sidebar.block.linked.php:63
+#: ../../../templates/sidebar.block.linked.php:72
 msgid "Linked Tags"
 msgstr "Tags structurés"
 
+#: ../../../templates/sidebar.block.linked.php:75
+msgid "plus"
+msgstr "plus"
+
 #: ../../../templates/sidebar.block.recent.php:15
 msgid "Recent Tags"
 msgstr "Tags récents"
@@ -954,14 +886,12 @@ msgid "Add to Watchlist"
 msgstr "Ajouter à la liste des consultés"
 
 #: ../../../templates/tag2tagadd.tpl.php:7
-#, fuzzy
 msgid "Create new link:"
 msgstr "Créer un nouveau lien"
 
 #: ../../../templates/tag2tagadd.tpl.php:11
-#, fuzzy
 msgid "Create"
-msgstr "Privée"
+msgstr "Créer"
 
 #: ../../../templates/tag2tagadd.tpl.php:12
 #: ../../../templates/tagrename.tpl.php:25
@@ -977,16 +907,17 @@ msgid "New"
 msgstr "Nouvaeu"
 
 #: ../../../templates/tagrename.tpl.php:24
-#, fuzzy
 msgid "Rename"
-msgstr "Nom d'utilisateur"
+msgstr "Renommer"
 
-#: ../../../templates/tags.tpl.php:8 ../../../templates/users.tpl.php:9
+#: ../../../templates/tags.tpl.php:8
+#: ../../../templates/users.tpl.php:9
 #, fuzzy
 msgid "Alphabet"
 msgstr "Alphabet"
 
-#: ../../../templates/tags.tpl.php:9 ../../../templates/users.tpl.php:10
+#: ../../../templates/tags.tpl.php:9
+#: ../../../templates/users.tpl.php:10
 msgid "Popularity"
 msgstr "Popularité"
 
@@ -1010,17 +941,16 @@ msgstr "Créé en "
 msgid "bookmarks"
 msgstr "signets"
 
+#~ msgid "edit"
+#~ msgstr "éditer"
 #~ msgid "Failed to delete the bookmark"
 #~ msgstr "Erreur dans la suppression du signet"
-
 #~ msgid "User with username %s not was not found"
 #~ msgstr "L'utilisateur %s n'a pas été trouvé."
-
 #~ msgid "%s Bookmarks"
 #~ msgstr "Signets de %s"
-
 #~ msgid "<abbr title=\"Electronic mail\">E-mail</abbr>"
 #~ msgstr "<abbr title=\"Adresse électronique\">E-mail</abbr>"
-
 #~ msgid "No bookmarks found"
 #~ msgstr "Pas de signets trouvés"
+
index f32110bbb41b72df12fce4649aff586ccd0d65e5..a5301eb47973e40c6b06e99331a6843262d4c8d0 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-01-14 11:58+0100\n"
+"POT-Creation-Date: 2008-01-22 16:54+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -853,10 +853,14 @@ msgstr ""
 msgid "Antispam question"
 msgstr ""
 
-#: ../../../templates/sidebar.block.linked.php:63
+#: ../../../templates/sidebar.block.linked.php:72
 msgid "Linked Tags"
 msgstr ""
 
+#: ../../../templates/sidebar.block.linked.php:75
+msgid "plus"
+msgstr ""
+
 #: ../../../templates/sidebar.block.recent.php:15
 msgid "Recent Tags"
 msgstr ""
index daef205e493f964afd947e9d7a5acf42af4e10f5..6bed82d503422ddcdc97cb7bfcb46ef78a0f82af 100644 (file)
@@ -76,6 +76,8 @@ if (isset($userid)) {
     $tplVars['cat_url'] = createURL('tags', '%2$s');
 }
 
+$tplVars['sidebar_blocks'] = array('linked');
+
 $tplVars['subtitle'] = $pagetitle;
 $templateservice->loadTemplate('tags.tpl', $tplVars);
 
index 7ceb8da8ad67d8441bc02e9939717d6d7f3372be..14d57b3e70ee0624fc1b500be9688b1ff5baff09 100644 (file)
@@ -28,17 +28,35 @@ class Tag2TagService {
                 return false;
         }
        $this->db->sql_transaction('commit');
+
+       // Update stats
+       $tsts =& ServiceFactory::getServiceInstance('TagStatService');
+       $tsts->updateStat($tag1, $relationType, $uId);
+
        return true;
     }
 
-    function getLinkedTags($tag1, $relationType, $uId = -1) {
+    // Return the target linked tags. If inverseRelation is true, return the source linked tags.
+    function getLinkedTags($tag, $relationType, $uId = null, $inverseRelation = false) {
        // Set up the SQL query.
-        $query = "SELECT DISTINCT tag2 as 'tag' FROM `". $this->getTableName() ."`";
-       $query.= " WHERE tag1 = '" .$tag1 ."'";
+       if($inverseRelation) {
+           $queriedTag = "tag1";
+           $givenTag = "tag2";
+       } else {
+           $queriedTag = "tag2";
+           $givenTag = "tag1"; 
+       }
+
+        $query = "SELECT DISTINCT ". $queriedTag ." as 'tag'";
+       $query.= " FROM `". $this->getTableName() ."`";
+       $query.= " WHERE 1=1";
+       if($tag !=null) {
+           $query.= " AND ". $givenTag ." = '". $tag ."'";
+       }
        if($relationType) {
            $query.= " AND relationType = '". $relationType ."'";
        }
-       if($uId>0) {
+       if($uId != null) {
            $query.= " AND uId = '".$uId."'";
        }
 
@@ -88,9 +106,14 @@ class Tag2TagService {
        return $output;
     }
 
-    function getOrphewTags($relationType, $uId = 0) {
-       $query = "SELECT DISTINCT tag1 as tag FROM `". $this->getTableName() ."`";
-       $query.= " WHERE tag1 <> ALL";
+    function getOrphewTags($relationType, $uId = 0, $limit = null, $orderBy = null) {
+       $query = "SELECT DISTINCT tts.tag1 as tag";
+       $query.= " FROM `". $this->getTableName() ."` tts";
+       if($orderBy != null) {
+          $tsts =& ServiceFactory::getServiceInstance('TagStatService');
+          $query.= ", ".$tsts->getTableName() ." tsts";
+       }
+       $query.= " WHERE tts.tag1 <> ALL";
        $query.= " (SELECT DISTINCT tag2 FROM `". $this->getTableName() ."`";
        $query.= " WHERE relationType = '".$relationType."'";
        if($uId > 0) {
@@ -98,12 +121,41 @@ class Tag2TagService {
        }
        $query.= ")";
        if($uId > 0) {
-           $query.= " AND uId = '".$uId."'";
+           $query.= " AND tts.uId = '".$uId."'";
        }
 
-       //die($query);
+       switch($orderBy) {
+         case "nb":
+           $query.= " AND tts.tag1 = tsts.tag1";
+           $query.= " AND tsts.relationType = '".$relationType."'";
+           if($uId > 0) {
+               $query.= " AND tsts.uId = ".$uId;
+           }
+           $query.= " ORDER BY tsts.nb DESC";
+           break;
+         case "depth": // by nb of descendants
+           $query.= " AND tts.tag1 = tsts.tag1";
+           $query.= " AND tsts.relationType = '".$relationType."'";
+           if($uId > 0) {
+               $query.= " AND tsts.uId = ".$uId;
+           }
+           $query.= " ORDER BY tsts.depth DESC";
+           break;
+         case "nbupdate":
+           $query.= " AND tts.tag1 = tsts.tag1";
+           $query.= " AND tsts.relationType = '".$relationType."'";
+           if($uId > 0) {
+               $query.= " AND tsts.uId = ".$uId;
+           }
+           $query.= " ORDER BY tsts.nbupdate DESC";
+           break;
+       }
 
-        if (! ($dbresult =& $this->db->sql_query_limit($query, $limit)) ){
+       if($limit != null) {
+           $query.= " LIMIT 0,".$limit;
+       }
+
+        if (! ($dbresult =& $this->db->sql_query($query)) ){
             message_die(GENERAL_ERROR, 'Could not get linked tags', '', __LINE__, __FILE__, $query, $this->db);
             return false;
         }
@@ -117,7 +169,7 @@ class Tag2TagService {
        $query.= " AND relationType = '". $relationType ."'";
        $query.= " AND uId = '".$uId."'";
 
-        return $this->db->sql_numrows($dbresult) > 0;
+        return $this->db->sql_numrows($this->db->sql_query($query)) > 0;
     }
 
     function removeLinkedTags($tag1, $tag2, $relationType, $uId) {
@@ -132,12 +184,19 @@ class Tag2TagService {
             return false;
         }
 
+       // Update stats
+       $tsts =& ServiceFactory::getServiceInstance('TagStatService');
+       $tsts->updateStat($tag1, $relationType, $uId);
+
         return true;
     }
 
     function deleteAll() {
        $query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
        $this->db->sql_query($query);
+
+       $tsts =& ServiceFactory::getServiceInstance('TagStatService');
+       $tsts->deleteAll();
     }
 
     // Properties
diff --git a/services/tagstatservice.php b/services/tagstatservice.php
new file mode 100644 (file)
index 0000000..fa416f4
--- /dev/null
@@ -0,0 +1,181 @@
+<?php
+class TagStatService {
+    var $db;
+    var $tablename;
+
+    function &getInstance(&$db) {
+        static $instance;
+        if (!isset($instance))
+            $instance =& new TagStatService($db);
+        return $instance;
+    }
+
+    function TagStatService(&$db) {
+        $this->db =& $db;
+        $this->tablename = $GLOBALS['tableprefix'] .'tagsstats';
+    }
+
+    function getNbChildren($tag1, $relationType, $uId) {
+       $tts =& ServiceFactory::getServiceInstance('Tag2TagService');
+       $query = "SELECT tag1, relationType, uId FROM `". $tts->getTableName() ."`";
+       $query.= " WHERE tag1 = '" .$tag1 ."'";
+       $query.= " AND relationType = '". $relationType ."'";
+       $query.= " AND uId = '".$uId."'";
+
+        return $this->db->sql_numrows($this->db->sql_query($query));
+    }
+
+    function getNbDescendants($tag1, $relationType, $uId) {
+       $query = "SELECT nb FROM `". $this->getTableName() ."`";
+       $query.= " WHERE tag1 = '" .$tag1 ."'";
+       $query.= " AND relationType = '". $relationType ."'";
+       $query.= " AND uId = '".$uId."'";
+
+       $dbresults =& $this->db->sql_query($query);
+       $row = $this->db->sql_fetchrow($dbresults);
+       if($row['nb'] == null) {
+           return 0;
+       } else {
+           return (int) $row['nb'];
+       }
+    }
+
+    function getMaxDepth($tag1, $relationType, $uId) {
+       $query = "SELECT depth FROM `". $this->getTableName() ."`";
+       $query.= " WHERE tag1 = '" .$tag1 ."'";
+       $query.= " AND relationType = '". $relationType ."'";
+       $query.= " AND uId = '".$uId."'";
+
+       $dbresults =& $this->db->sql_query($query);
+       $row = $this->db->sql_fetchrow($dbresults);
+       if($row['depth'] == null) {
+           return 0;
+       } else {
+           return (int) $row['depth'];
+       };
+    }
+
+    function getNbUpdate($tag1, $relationType, $uId) {
+       $query = "SELECT nbupdate FROM `". $this->getTableName() ."`";
+       $query.= " WHERE tag1 = '" .$tag1 ."'";
+       $query.= " AND relationType = '". $relationType ."'";
+       $query.= " AND uId = '".$uId."'";
+
+       $dbresults =& $this->db->sql_query($query);
+       $row = $this->db->sql_fetchrow($dbresults);
+       if($row['nbupdate'] == null) {
+           return 0;
+       } else {
+           return (int) $row['nbupdate'];
+       }
+    }
+
+    function existStat($tag1, $relationType, $uId) {
+       $query = "SELECT tag1, relationType, uId FROM `". $this->getTableName() ."`";
+       $query.= " WHERE tag1 = '" .$tag1 ."'";
+       $query.= " AND relationType = '". $relationType ."'";
+       $query.= " AND uId = '".$uId."'";
+
+        return $this->db->sql_numrows($this->db->sql_query($query))>0; 
+    }
+
+    function createStat($tag1, $relationType, $uId) {
+       $query = "INSERT INTO `". $this->getTableName() ."`";
+       $query.= "(tag1, relationType, uId)";
+       $query.= " VALUES ('".$tag1."','".$relationType."','".$uId."')";
+       $this->db->sql_query($query);
+    }
+
+    function updateStat($tag1, $relationType, $uId=null, $stoplist=array()) {
+       if(in_array($tag1, $stoplist)) {
+           return false;
+       }
+
+       $tts =& ServiceFactory::getServiceInstance('Tag2TagService');
+       $linkedTags = $tts->getLinkedTags($tag1, $relationType, $uId);
+       $nbDescendants = 0;
+       $maxDepth = 0;
+       foreach($linkedTags as $linkedTag) {
+           $nbDescendants+= 1 + $this->getNbDescendants($linkedTag, $relationType, $uId);
+           $maxDepth = max($maxDepth, 1 + $this->getMaxDepth($linkedTag, $relationType, $uId));
+       }
+       $this->setNbDescendants($tag1, $relationType, $uId, $nbDescendants);
+       $this->setMaxDepth($tag1, $relationType, $uId, $maxDepth);
+       $this->increaseNbUpdate($tag1, $relationType, $uId);
+
+       // propagation to the precedent tags
+       $linkedTags = $tts->getLinkedTags($tag1, $relationType, $uId, true);
+       $stoplist[] = $tag1;
+       foreach($linkedTags as $linkedTag) {
+           $this->updateStat($linkedTag, $relationType, $uId, $stoplist);
+       }
+    }
+
+    function updateAllStat() {
+       $tts =& ServiceFactory::getServiceInstance('Tag2TagService');
+
+       $query = "SELECT tag1, uId FROM `". $tts->getTableName() ."`";
+       $query.= " WHERE relationType = '>'";
+
+//die($query);
+
+        if (! ($dbresult =& $this->db->sql_query($query)) ){
+            message_die(GENERAL_ERROR, 'Could not update stats', '', __LINE__, __FILE__, $query, $this->db);
+            return false;
+        }
+
+        $rowset = $this->db->sql_fetchrowset($dbresult);
+       foreach($rowset as $row) {
+           $this->updateStat($row['tag1'], '>', $row['uId']);
+       }
+    }
+
+    function setNbDescendants($tag1, $relationType, $uId, $nb) {
+       if(!$this->existStat($tag1, $relationType, $uId)) {
+           $this->createStat($tag1, $relationType, $uId);
+       }
+       $query = "UPDATE `". $this->getTableName() ."`";
+       $query.= " SET nb = ". $nb;
+       $query.= " WHERE tag1 = '" .$tag1 ."'";
+       $query.= " AND relationType = '". $relationType ."'";
+       $query.= " AND uId = '".$uId."'";
+       $this->db->sql_query($query);   
+    }
+
+    function setMaxDepth($tag1, $relationType, $uId, $depth) {
+       if(!$this->existStat($tag1, $relationType, $uId)) {
+           $this->createStat($tag1, $relationType, $uId);
+       }
+       $query = "UPDATE `". $this->getTableName() ."`";
+       $query.= " SET depth = ". $depth;
+       $query.= " WHERE tag1 = '" .$tag1 ."'";
+       $query.= " AND relationType = '". $relationType ."'";
+       $query.= " AND uId = '".$uId."'";
+       $this->db->sql_query($query);   
+    }
+
+    function increaseNbUpdate($tag1, $relationType, $uId) {
+       if(!$this->existStat($tag1, $relationType, $uId)) {
+           $this->createStat($tag1, $relationType, $uId);
+       }
+       $query = "UPDATE `". $this->getTableName() ."`";
+       $query.= " SET nbupdate = nbupdate + 1";
+       $query.= " WHERE tag1 = '" .$tag1 ."'";
+       $query.= " AND relationType = '". $relationType ."'";
+       $query.= " AND uId = '".$uId."'";
+
+       //die($query);
+       
+       $this->db->sql_query($query);
+    }
+
+    function deleteAll() {
+       $query = 'TRUNCATE TABLE `'. $this->getTableName() .'`';
+       $this->db->sql_query($query);
+    }
+
+    // Properties
+    function getTableName()       { return $this->tablename; }
+    function setTableName($value) { $this->tablename = $value; }
+}
+?>
index 19685076a6a92bdf16121905fad0d848fd524919..3dd7bab6475b39d3dde5932ebdf3b5f97822f394 100644 (file)
@@ -82,3 +82,21 @@ CREATE TABLE `sc_tags2tags` (
   PRIMARY KEY (`ttId`),
   UNIQUE KEY `sc_tags2tags_tag1_tag2_uId` (`tag1`,`tag2`,`relationType`,`uId`)
 );
+
+-- --------------------------------------------------------
+
+-- 
+-- Table structure for table `sc_tagsstats`
+-- 
+
+CREATE TABLE `sc_tagsstats` (
+  `tstId` int(11) NOT NULL auto_increment,
+  `tag1` varchar(32) NOT NULL default '',
+  `relationType` varchar(32) NOT NULL default '',
+  `uId` int(11) NOT NULL default '0',
+  `nb` int(11) NOT NULL default '0',
+  `depth` int(11) NOT NULL default '0',
+  `nbupdate` int(11) NOT NULL default '0',
+  PRIMARY KEY (`tstId`),
+  UNIQUE KEY `sc_tagsstats_tag1_type_uId` (`tag1`,`relationType`,`uId`)
+);
index 5a891eaeca9ee9a9d2a3f630e337241c578c1c71..7bbde810db26de602ccbad306d1da01e1e88d03a 100644 (file)
@@ -4,11 +4,14 @@ $userservice =& ServiceFactory::getServiceInstance('UserService');
 
 function displayLinkedTags($tag, $linkType, $uId, $cat_url, $user, $editingMode =false, $precedentTag =null, $level=0, $stopList=array()) {
     $tag2tagservice =& ServiceFactory::getServiceInstance('Tag2TagService');
+    $tagstatservice =& ServiceFactory::getServiceInstance('TagStatService');
 
     $output = '';
     $output.= '<tr>';
     $output.= '<td></td>';
     $output.= '<td>'. str_repeat('&nbsp;', $level*2) .'<a href="'. sprintf($cat_url, filter($user, 'url'), filter($tag, 'url')) .'" rel="tag">'. filter($tag) .'</a>';
+    //$output.= ' - '. $tagstatservice->getMaxDepth($tag, $linkType, $uId);
+
     if($editingMode) {
        $output.= ' (';
        $output.= '<a href="'.createURL('tag2tagadd', $tag).'">add</a>';
@@ -22,7 +25,7 @@ function displayLinkedTags($tag, $linkType, $uId, $cat_url, $user, $editingMode
     $output.= '</tr>';
 
     if(!in_array($tag, $stopList)) {
-       $linkedTags = $tag2tagservice->getLinkedTags($tag, '>', $userid, $level);
+       $linkedTags = $tag2tagservice->getLinkedTags($tag, '>', $userid);
        $precedentTag = $tag;
        $stopList[] = $tag;
        $level = $level + 1;
@@ -33,7 +36,6 @@ function displayLinkedTags($tag, $linkType, $uId, $cat_url, $user, $editingMode
     return $output;
 }
 
-
 $logged_on_userid = $userservice->getCurrentUserId();
 if ($logged_on_userid === false) {
     $logged_on_userid = NULL;
@@ -43,7 +45,12 @@ $explodedTags = array();
 if ($currenttag) {
     $explodedTags = explode('+', $currenttag);
 } else {
-    $orphewTags = $tag2tagservice->getOrphewTags('>', $userid);
+    if($userid != null) {
+        $orphewTags = $tag2tagservice->getOrphewTags('>', $userid);
+    } else {
+       $orphewTags = $tag2tagservice->getOrphewTags('>', $userid, 4, "nb");
+    }
+
     foreach($orphewTags as $orphewTag) {
        $explodedTags[] = $orphewTag['tag'];
     }
@@ -60,7 +67,17 @@ if(count($explodedTags) > 0) {
     if ($displayLinkedZone) {
 ?>
 
-<h2><?php echo T_('Linked Tags'); ?></h2>
+<h2>
+<?php
+    echo T_('Linked Tags').' ';
+    //if($userid != null) {
+       $cUser = $userservice->getUser($userid);
+       echo '<a href="'.createURL('alltags', $cUser['username']).'">('.T_('plus').')</a>';
+    //}
+?>
+</h2>
+
+
 <div id="linked">
     <table>
     <?php
index 7266170d3021d2a9bb17dfef0baa41a80174b24f..d5de1763354021004afdc1188ee5c3c07ce2774b 100644 (file)
@@ -23,5 +23,6 @@ echo $contents ."\n";
 
 <?php
 }
+$this->includeTemplate('sidebar.tpl');
 $this->includeTemplate($GLOBALS['bottom_include']);
-?>
\ No newline at end of file
+?>
index 3a8466facae411ddeddee18b0baf5bcf6d2d03df..7b84ac66b68ff5c3d00aed72e429805640597535 100644 (file)
@@ -26,6 +26,8 @@ class Tag2TagTest extends PHPUnit_Framework_TestCase
        $this->ts->deleteAll();
        $this->tts =& ServiceFactory::getServiceInstance('Tag2TagService');
        $this->tts->deleteAll(); 
+       $this->tsts =& ServiceFactory::getServiceInstance('TagStatService');
+       $this->tsts->deleteAll();
     }
  
     public function testManipulateTag2TagRelations()
@@ -58,9 +60,11 @@ class Tag2TagTest extends PHPUnit_Framework_TestCase
        $this->assertSame('a', $orphewTags[0]['tag']);
        $this->assertSame('f', $orphewTags[1]['tag']);
        $orphewTags = $tts->getOrphewTags('>');
-       $this->assertEquals(2, sizeof($orphewTags));
+       $this->assertEquals(1, sizeof($orphewTags));
        $this->assertSame('f', $orphewTags[0]['tag']);
        
+       $linkedTags = $tts->getLinkedTags('a', '>');
+       $this->assertSame(array('b', 'c', 'd'), $linkedTags);
        $linkedTags = $tts->getLinkedTags('a', '>', 1);
        $this->assertSame(array('b', 'c'), $linkedTags);
        $tts->removeLinkedTags('a', 'b', '>', 1);
@@ -69,8 +73,48 @@ class Tag2TagTest extends PHPUnit_Framework_TestCase
        $tts->removeLinkedTags('a', 'c', '>', 1);
        $linkedTags = $tts->getLinkedTags('a', '>', 1);
        $this->assertEquals(0, sizeof($linkedTags));
-       $linkedTags = $tts->getLinkedTags('a', '>');
-       $this->assertSame(array('b', 'c', 'd'), $linkedTags);
+    }
+
+    /* Test function that select the best tags to display? */
+    public function testViewTag2TagRelations()
+    {
+       $tts = $this->tts;
+
+       $tts->addLinkedTags('a', 'b', '>', 1);
+       $tts->addLinkedTags('c', 'd', '>', 1);
+       $tts->addLinkedTags('d', 'e', '>', 1);
+       $tts->addLinkedTags('f', 'g', '>', 1);
+       $tts->addLinkedTags('f', 'h', '>', 1);
+       $tts->addLinkedTags('f', 'i', '>', 1);
+
+       $orphewTags = $tts->getOrphewTags('>', 1);
+       $this->assertEquals(3, sizeof($orphewTags));
+       $this->assertSame('a', $orphewTags[0]['tag']);
+       $this->assertSame('c', $orphewTags[1]['tag']);
+       $this->assertSame('f', $orphewTags[2]['tag']);
+
+       // with limit
+       $orphewTags = $tts->getOrphewTags('>', 1, 2);
+       $this->assertEquals(2, sizeof($orphewTags));
+       $this->assertSame('a', $orphewTags[0]['tag']);
+       $this->assertSame('c', $orphewTags[1]['tag']);
+
+       // with sorting
+       $orphewTags = $tts->getOrphewTags('>', 1, 2, 'nb'); // nb descendants
+       $this->assertEquals(2, sizeof($orphewTags));
+       $this->assertSame('f', $orphewTags[0]['tag']);
+       $this->assertSame('c', $orphewTags[1]['tag']);
+
+       $orphewTags = $tts->getOrphewTags('>', 1, 1, 'depth');
+       $this->assertEquals(1, sizeof($orphewTags));
+       $this->assertSame('c', $orphewTags[0]['tag']);
+
+       $orphewTags = $tts->getOrphewTags('>', 1, null, 'nbupdate');
+       $this->assertEquals(3, sizeof($orphewTags));
+       $this->assertSame('f', $orphewTags[0]['tag']);
+       $this->assertSame('c', $orphewTags[1]['tag']);
+       $this->assertSame('a', $orphewTags[2]['tag']);
+
     }
 
    public function testAddLinkedTagsThroughBookmarking()
@@ -97,6 +141,7 @@ class Tag2TagTest extends PHPUnit_Framework_TestCase
        $this->assertEquals(1, sizeof($linkedTags));
        $this->assertSame('c', $linkedTags[0]['tag']);
        $this->assertTrue($tts->existsLinkedTags('d', 'e', '>', 1));
+       $this->assertFalse($tts->existsLinkedTags('e', 'd', '>', 1));
     }
 
     public function testSearchThroughLinkedTags()
@@ -140,5 +185,96 @@ class Tag2TagTest extends PHPUnit_Framework_TestCase
 
     }
 
+    public function testStatsBetweenTags()
+    {
+       $tsts = $this->tsts;
+       $tts = $this->tts;
+
+       // basic functions
+       $this->assertFalse($tsts->existStat('a', '>', 10));
+       $tsts->setNbDescendants('a', '>', 10, 2);
+       $this->assertSame(2, $tsts->getNbDescendants('a', '>', 10));
+       $tsts->setMaxDepth('a', '>', 10, 3);
+       $this->assertSame(3, $tsts->getMaxDepth('a', '>', 10));
+       $this->assertTrue($tsts->existStat('a', '>', 10));
+       $this->assertFalse($tsts->existStat('a', '>', 20));
+       $tsts->increaseNbUpdate('a', '>', 10);
+       $this->assertSame(1, $tsts->getNbUpdate('a', '>', 10));
+
+       $tsts->deleteAll();
+
+       // no structure
+       $nbC = $tsts->getNbChildren('a', '>', 1);
+       $nbD = $tsts->getNbDescendants('a', '>', 1);
+       $maxDepth = $tsts->getMaxDepth('a', '>', 1);
+       $this->assertSame(0, $nbC);
+       $this->assertSame(0, $nbD);
+       $this->assertSame(0, $maxDepth);
+
+       // simple case
+       $tts->addLinkedTags('b', 'c', '>', 1);
+       $tts->addLinkedTags('a', 'd', '>', 1);
+       $tts->addLinkedTags('a', 'b', '>', 1);
+       $tts->addLinkedTags('b', 'e', '>', 1);
+
+       $this->assertSame(3, $tsts->getNbUpdate('a', '>', '1'));
+       $this->assertSame(2, $tsts->getNbUpdate('b', '>', '1'));
+       $this->assertSame(0, $tsts->getNbUpdate('c', '>', '1'));
+       $this->assertSame(0, $tsts->getNbUpdate('d', '>', '1'));
+       $this->assertSame(0, $tsts->getNbUpdate('e', '>', '1'));
+
+
+       $nbC = $tsts->getNbChildren('a', '>', 1);
+       $nbD = $tsts->getNbDescendants('a', '>', 1);
+       $maxDepth = $tsts->getMaxDepth('a', '>', 1);
+       $this->assertSame(2, $nbC);
+       $this->assertSame(4, $nbD);
+       $this->assertSame(2, $maxDepth);
+
+       $nbC = $tsts->getNbChildren('b', '>', 1);
+       $nbD = $tsts->getNbDescendants('b', '>', 1);
+       $maxDepth = $tsts->getMaxDepth('b', '>', 1);
+       $this->assertSame(2, $nbC);
+       $this->assertSame(2, $nbD);
+       $this->assertSame(1, $maxDepth);        
+
+       $nbC = $tsts->getNbChildren('c', '>', 1);
+       $nbD = $tsts->getNbDescendants('c', '>', 1);
+       $maxDepth = $tsts->getMaxDepth('c', '>', 1);
+       $this->assertSame(0, $nbC);
+       $this->assertSame(0, $nbD);
+       $this->assertSame(0, $maxDepth);
+
+       $nbC = $tsts->getNbChildren('d', '>', 1);
+       $nbD = $tsts->getNbDescendants('d', '>', 1);
+       $maxDepth = $tsts->getMaxDepth('d', '>', 1);
+       $this->assertSame(0, $nbC);
+       $this->assertSame(0, $nbD);
+       $this->assertSame(0, $maxDepth);
+
+       // deletion
+       $tts->removeLinkedTags('b', 'e', '>', 1);
+
+       $nbC = $tsts->getNbChildren('b', '>', 1);
+       $nbD = $tsts->getNbDescendants('b', '>', 1);
+       $maxDepth = $tsts->getMaxDepth('b', '>', 1);
+       $this->assertSame(1, $nbC);
+       $this->assertSame(1, $nbD);
+       $this->assertSame(1, $maxDepth);
+
+       $nbC = $tsts->getNbChildren('a', '>', 1);
+       $nbD = $tsts->getNbDescendants('a', '>', 1);
+       $maxDepth = $tsts->getMaxDepth('a', '>', 1);
+       $this->assertSame(2, $nbC);
+       $this->assertSame(3, $nbD);
+       $this->assertSame(2, $maxDepth);
+
+
+       // advanced case with fore loop
+       //$tts->addLinkedTags('d', 'c', '>', 1);
+
+       // advanced case with back loop
+       //$tts->addLinkedTags('e', 'a', '>', 1);
+    }
 }
 ?>