diff options
Diffstat (limited to 'data')
22 files changed, 398 insertions, 260 deletions
| diff --git a/data/config.default.php b/data/config.default.php index 85b9ccb..b975fac 100644 --- a/data/config.default.php +++ b/data/config.default.php @@ -334,7 +334,7 @@ $index_sidebar_blocks = array(   * @var  string   * @link http://php.net/date   */ -$shortdate = 'd-m-Y'; +$shortdate = 'Y-m-d';  /**   * Format of long dates. diff --git a/data/locales/de_DE/LC_MESSAGES/messages.mo b/data/locales/de_DE/LC_MESSAGES/messages.moBinary files differ index 0b18fac..05778b7 100644 --- a/data/locales/de_DE/LC_MESSAGES/messages.mo +++ b/data/locales/de_DE/LC_MESSAGES/messages.mo diff --git a/data/locales/de_DE/LC_MESSAGES/messages.po b/data/locales/de_DE/LC_MESSAGES/messages.po index fdd27a5..a5c774f 100644 --- a/data/locales/de_DE/LC_MESSAGES/messages.po +++ b/data/locales/de_DE/LC_MESSAGES/messages.po @@ -604,7 +604,7 @@ msgid ""  "file to your computer"  msgstr ""  "Speichern Sie die resultierende <abbr title=\"Extensible Markup Language" -"\">XML</abbr-Datei lokal auf Ihrem Computer" +"\">XML</abbr>-Datei lokal auf Ihrem Computer"  #: data/templates/importDelicious.tpl.php:35  msgid "" diff --git a/data/templates/admin.tpl.php b/data/templates/admin.tpl.php index c8d47e8..50680f6 100644 --- a/data/templates/admin.tpl.php +++ b/data/templates/admin.tpl.php @@ -11,7 +11,7 @@ foreach($users as $user) {  	echo '<div class="link">';
  	echo '<a href="'.createURL('profile', $user->getUsername()).'">'.$user->getUsername().'</a>'; -	echo ' - <span title='. T_('Public/Shared/Private') .'>'. $user->getNbBookmarks('public') .' / '. $user->getNbBookmarks('shared') .' / '. $user->getNbBookmarks('private') .' '. T_('bookmark(s)') .'</span>';
 +	echo ' - <span title="'. T_('Public/Shared/Private') .'">'. $user->getNbBookmarks('public') .' / '. $user->getNbBookmarks('shared') .' / '. $user->getNbBookmarks('private') .' '. T_('bookmark(s)') .'</span>';
  	echo '</div>';
  	if($user->getUsername() != $currentUser->getUsername()) {
 diff --git a/data/templates/bookmarkcommondescriptionedit.tpl.php b/data/templates/bookmarkcommondescriptionedit.tpl.php index af5909a..807c58b 100644 --- a/data/templates/bookmarkcommondescriptionedit.tpl.php +++ b/data/templates/bookmarkcommondescriptionedit.tpl.php @@ -30,7 +30,8 @@ window.onload = function() {  	if(strlen($description['cdDatetime'])>0) {  	   echo T_('Last modification:').' '.$description['cdDatetime'].', ';  	   $lastUser = $userservice->getUser($description['uId']); -	   echo  '<a href="'.createURL('profile', $lastUser['username']).'">'.$lastUser['username'].'</a>'; +	   echo  '<a href="'.createURL('profile', $lastUser['username']).'">' +           . SemanticScuttle_Model_UserArray::getName($lastUser) . '</a>';  	}  	?>      </td> diff --git a/data/templates/bookmarklet.inc.php b/data/templates/bookmarklet.inc.php new file mode 100644 index 0000000..9867745 --- /dev/null +++ b/data/templates/bookmarklet.inc.php @@ -0,0 +1,117 @@ +<h3><?php echo T_('Bookmarklet'); ?></h3> +<p id="bookmarklet"></p> +<script type="text/javascript"> +//<![CDATA[ +var browser = navigator.appName; +jQuery(function($) { +if (browser == "Opera") { +    $('#bookmarklet').append( +        <?php echo json_encode( +            sprintf( +                T_("Click one of the following bookmarklets to add a button you can click whenever you want to add the page you are on to %s") . ':', +                $GLOBALS['sitename'] +            ) +        ); ?> +    ); +} else { +    $('#bookmarklet').append( +        <?php echo json_encode( +            sprintf( +                T_("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") . ':', +                $GLOBALS['sitename'] +            ) +        ); +        ?> +    ); +} +}); +//]]> +</script> +<script type="text/javascript"> +//<![CDATA[ +var selection = ''; +if (window.getSelection) { +    selection = 'window.getSelection()'; +} else if (document.getSelection) { +    selection = 'document.getSelection()'; +} else if (document.selection) { +    selection = 'document.selection.createRange().text'; +} +if (browser == "Opera") { +    $('#bookmarklet').append( +        '<ul>' +        + '<li>' +        + '<a class="bookmarklet" href="' +        + '<?php +$popupLink = 'javascript:' +    . "location.href='" +        . createURL('bookmarks', $GLOBALS['user']) +        . '?action=add' +        . "&address='+encodeURIComponent(document.location.href)+'" +        . "&title='+encodeURIComponent(document.title)+'" +        . "&description='+encodeURIComponent(SELECTION)" +        . ";"; +$link = 'opera:/button/' +    //Opera command +    . 'Go to page' +    //command parameter 1 +    . ',"' . rawurlencode($popupLink) . '"' +    //command parameter 2 +    . ',' +    //button title +    . ',"Post to ' . fixOperaButtonName($GLOBALS['sitename']) . '"' +    //button icon name +    . ',"Scuttle"'; +echo jsEscTitle(htmlspecialchars($link)); +?>'.replace('SELECTION', selection) +        + '"><?php echo jsEscTitle(sprintf(T_('Post to %s'), $GLOBALS['sitename'])); ?></a>' +        + '</li>' +        + '<li>' +        + '<a class="bookmarklet" href="' +        + '<?php +$popupLink = 'javascript:' +    . 'open(' +        . "'" . createURL('bookmarks', $GLOBALS['user']) +        . '?action=add' +        . '&popup=1' +        . "&address='+encodeURIComponent(document.location.href)+'" +        . "&title='+encodeURIComponent(document.title)+'" +        . "&description='+encodeURIComponent(SELECTION)" +        . "," +        . "'" . htmlspecialchars(jsEscTitle($GLOBALS['sitename'])) . "'," +        . "'modal=1,status=0,scrollbars=1,toolbar=0,resizable=1,width=790,height=465" +        . ",left='+(screen.width-790)/2+',top='+(screen.height-425)/2" +    . ");void 0"; +$link = 'opera:/button/' +    . 'Go to page' +    . ',"' . rawurlencode($popupLink) . '"' +    . ',' +    . ',"Post to ' . fixOperaButtonName($GLOBALS['sitename']) . ' (Pop-up)"' +    . ',"Scuttle"'; +echo jsEscTitle(htmlspecialchars($link)); +?>'.replace('SELECTION', selection) +        + '"><?php echo jsEscTitle(sprintf(T_('Post to %s (Pop-up)'), $GLOBALS['sitename'])); ?></a>' +        + '</li>' +        + '</ul>' +    ); +} else { +    $('#bookmarklet').append( +        '<ul>' +        + '<li><a class="bookmarklet" href="javascript:x=document;a=encodeURIComponent(x.location.href);t=encodeURIComponent(x.title);d=encodeURIComponent('+selection+');location.href=\'<?php echo createURL('bookmarks', $GLOBALS['user']); ?>?action=add&address=\'+a+\'&title=\'+t+\'&description=\'+d;void 0;"><?php echo jsEscTitle(sprintf(T_('Post to %s'), $GLOBALS['sitename'])); ?><\/a><\/li>' +        + '<li>' +        + '<a class="bookmarklet" href="' +        + 'javascript:x=document;' +        + 'a=encodeURIComponent(x.location.href);' +        + 't=encodeURIComponent(x.title);' +        + 'd=encodeURIComponent('+selection+');' +        + 'open(' +        + '\'<?php echo createURL('bookmarks', $GLOBALS['user']); ?>?action=add&popup=1&address=\'+a+\'&title=\'+t+\'&description=\'+d,\'<?php echo htmlspecialchars(jsEscTitleDouble($GLOBALS['sitename'])); ?>\',\'modal=1,status=0,scrollbars=1,toolbar=0,resizable=1,width=790,height=465,left=\'+(screen.width-790)/2+\',top=\'+(screen.height-425)/2' +        + ');void 0;">' +        + '<?php echo jsEscTitle(sprintf(T_('Post to %s (Pop-up)'), $GLOBALS['sitename'])); ?>' +        + '</a>' +        + '</li>' +        + '</ul>' +    ); +} +//]]> +</script> diff --git a/data/templates/bookmarks.tpl.php b/data/templates/bookmarks.tpl.php index e32d3c9..55d6a0f 100644 --- a/data/templates/bookmarks.tpl.php +++ b/data/templates/bookmarks.tpl.php @@ -62,12 +62,16 @@ if($currenttag!= '' && $cdservice->getLastTagDescription($currenttag)) {  }  //common tag description edit -if($userservice->isLoggedOn()) { -	if($currenttag!= '' && ($GLOBALS['enableCommonTagDescriptionEditedByAll'] || $currentUser->isAdmin())) { +if ($userservice->isLoggedOn()) { +	if ($currenttag != '' +        && ($GLOBALS['enableCommonTagDescriptionEditedByAll'] +            || $currentUser->isAdmin() +        ) +    ) {  		echo ' <a href="'. createURL('tagcommondescriptionedit', $currenttag).'" title="'.T_('Edit the common description of this tag').'">';  		echo !is_array($cDescription) || strlen($cDescription['cdDescription'])==0?T_('Edit the common description of this tag'):'';  		echo ' <img src="'.ROOT.'images/b_edit.png" /></a>'; -	} elseif(isset($hash)) { +	} else if (isset($hash)) {  		echo ' (<a href="'.createURL('bookmarkcommondescriptionedit', $hash).'" title="'.T_('Edit the common description of this bookmark').'">';  		echo T_('Edit the common description of this bookmark').'</a>)';  	} @@ -117,33 +121,33 @@ $votingSort  = 'voting_desc';  switch(getSortOrder()) {  case 'date_asc': -	$dateArrow = ' ↑'; +	$dateArrow = ' ↑';  	$dateSort  = 'date_desc';  	break;  case 'title_asc': -	$titleArrow = ' ↑'; +	$titleArrow = ' ↑';  	$titleSort  = 'title_desc';  	break;  case 'title_desc': -	$titleArrow = ' ↓'; +	$titleArrow = ' ↓';  	$titleSort  = 'title_asc';  	break;  case 'voting_asc': -	$votingArrow = ' ↑'; +	$votingArrow = ' ↑';  	$votingSort  = 'voting_desc';  	break;  case 'voting_desc': -	$votingArrow = ' ↓'; +	$votingArrow = ' ↓';  	$votingSort  = 'voting_asc';  	break;  case 'date_desc':  default: -	$dateArrow = ' ↓'; +	$dateArrow = ' ↓';  	$dateSort = 'date_asc';  	break;  } @@ -292,10 +296,9 @@ if ($currenttag!= '') {  			$edit = ' - <a href="' . createURL('edit', $row['bId']) . '">'                  . T_('Edit')                  . '</a>' -                . '<script type="text/javascript">' -                . 'document.write(" - <a href=\"#\" onclick=\"deleteBookmark(this, '. $row['bId'] .'); return false;\">' +                . ' <a href="#" onclick="deleteBookmark(this, '. $row['bId'] .'); return false;">'                  . T_('Delete') -                .'<\/a>");</script>'; +                .'</a>';  		}  		// Last update @@ -309,10 +312,11 @@ if ($currenttag!= '') {  			$copy .= T_('you');  		} else {  			$copy .= '<a href="' . createURL('bookmarks', $row['username']) . '">' -                . $row['username'] . '</a>'; +                . SemanticScuttle_Model_UserArray::getName($row) +                . '</a>';  		} -		// Udders! +		// others  		if (!isset($hash)) {  			$others = $otherCounts[$row['bAddress']];  			$ostart = '<a href="' . createURL('history', $row['bHash']) . '">'; @@ -390,7 +394,7 @@ if ($currenttag!= '') {  		echo '  <div' . $adminBgClass . '>' . "\n";  		echo '   <div class="link">' -            . '<a href="'. $address .'"'. $rel .' class="taggedlink" target="_blank">' +            . '<a href="'. htmlspecialchars($address) .'"'. $rel .' class="taggedlink">'              . filter($row['bTitle'])              . '</a>' . $adminStar . "</div>\n";  		if ($row['bDescription'] == '') { diff --git a/data/templates/dynamictags.inc.php b/data/templates/dynamictags.inc.php index b18565b..8cf07c1 100644 --- a/data/templates/dynamictags.inc.php +++ b/data/templates/dynamictags.inc.php @@ -36,28 +36,40 @@ $allPopularTagsCount   = count($allPopularTags);  // function printing the cloud -function writeTagsProposition($tagsCloud, $title) { -	echo 'document.write(\'<div class="collapsible">\');'; -	echo 'document.write(\'<h3>'. $title .'<\/h3>\');'; -	echo 'document.write(\'<p id="popularTags" class="tags">\');'; +function writeTagsProposition($tagsCloud, $title) +{ +    static $id = 0; +    ++$id; + +    echo <<<JS +    $('.edit-tagclouds') +        .append( +'<div class="collapsible" id="edit-tagcloud-$id">' ++ '  <h3>$title</h3>' ++ '  <p class="popularTags tags"></p>' ++ '</div>'); +JS;  	$taglist = ''; -	foreach(array_keys($tagsCloud) as $key) { -	    $row =& $tagsCloud[$key]; +	foreach (array_keys($tagsCloud) as $key) { +	    $row = $tagsCloud[$key];  	    $entries = T_ngettext('bookmark', 'bookmarks', $row['bCount']); -	    $taglist .= '<span title="'. $row['bCount'] .' '. $entries .'" style="font-size:'. $row['size'] .'" onclick="addTag(this)">'. filter($row['tag']) .'<\/span> '; +	    $taglist .= '<span' +            . ' title="'. $row['bCount'] . ' ' . $entries . '"' +            . ' style="font-size:' . $row['size'] . '"' +            . ' onclick="addTag(this)">' +            . filter($row['tag']) +            . '</span> ';  	} - -	echo 'document.write(\''. $taglist .'\');'; -	echo 'document.write(\'<\/p>\');'; -	echo 'document.write(\'<\/div>\');'; -	 +    echo '$(\'#edit-tagcloud-' . $id . ' p\').append(' +        . json_encode($taglist) +        . ");\n";  }  if ($allPopularTagsCount > 0 || $userPopularTagsCount > 0 ) { ?> -  <script type="text/javascript"> +//<![CDATA[  Array.prototype.contains = function (ele) {      for (var i = 0; i < this.length; i++) {          if (this[i] == ele) { @@ -87,20 +99,26 @@ function addonload(addition) {      }  } -addonload( -    function () { -        var taglist = document.getElementById('tags'); -        var tags = taglist.value.split(', '); +jQuery(function($) { +<?php +if ($userPopularTagsCount > 0) { +	writeTagsProposition($userPopularTagsCloud, T_('Popular Tags')); +} +if ($allPopularTagsCount > 0) { +	writeTagsProposition($allPopularTagsCloud, T_('Popular Tags From All Users')); +} +?> +        var taglist = $('#tags'); +        var tags = taglist.val().split(', '); -        var populartags = document.getElementById('popularTags').getElementsByTagName('span'); +        var populartags = $('.edit-tagclouds span');          for (var i = 0; i < populartags.length; i++) {              if (tags.contains(populartags[i].innerHTML)) {                  populartags[i].className = 'selected';              }          } -    } -); +});  function addTag(ele) {      var thisTag = ele.innerHTML; @@ -122,20 +140,9 @@ function addTag(ele) {      document.getElementById('tags').focus();  } - -<?php -if( $userPopularTagsCount > 0) { -	writeTagsProposition($userPopularTagsCloud, T_('Popular Tags')); -} -if( $allPopularTagsCount > 0) { -	writeTagsProposition($allPopularTagsCloud, T_('Popular Tags From All Users')); -} - - -?> - +//]]>  </script> - +<div class="edit-tagclouds"></div>  <?php  }  ?> diff --git a/data/templates/editbookmark.tpl.php b/data/templates/editbookmark.tpl.php index 25524b9..8b71230 100644 --- a/data/templates/editbookmark.tpl.php +++ b/data/templates/editbookmark.tpl.php @@ -16,33 +16,41 @@ switch ($row['bStatus']) {          break;  } -$this->includeTemplate("dojo.inc"); -  function jsEscTitle($title)  {      return addcslashes($title, "'");  } -?> - - +function jsEscTitleDouble($title) +{ +    return addcslashes(addcslashes($title, "'"), "'\\"); +} +function fixOperaButtonName($name) { +    //yes, opera has problems with double quotes in button names +    return str_replace('"', "''", $name); +} -<script type="text/javascript"> -//window.onload = function() { -//    document.getElementById("address").focus(); -//} -</script> +if (is_array($row['tags'])) { +    $row['tags'] = implode(', ', $row['tags']); +} +$ajaxUrl = ROOT . 'ajax/' +    . ( +        ($GLOBALS['adminsAreAdvisedTagsFromOtherAdmins'] && $currentUser->isAdmin()) +            ? 'getadmintags' +            : 'getcontacttags' +    ) . '.php'; +?>  <form action="<?php echo $formaction; ?>" method="post">  <table>  <tr>      <th align="left"><?php echo T_('Address'); ?></th>      <td><input type="text" id="address" name="address" size="75" maxlength="65535" value="<?php echo filter($row['bAddress'], 'xml'); ?>" onblur="useAddress(this)" /></td> -    <td>← <?php echo T_('Required'); ?></td> +    <td>← <?php echo T_('Required'); ?></td>  </tr>  <tr>      <th align="left"><?php echo T_('Title'); ?></th>      <td><input type="text" id="titleField" name="title" size="75" maxlength="255" value="<?php echo filter($row['bTitle'], 'xml'); ?>" onkeypress="this.style.backgroundImage = 'none';" /></td> -    <td>← <?php echo T_('Required'); ?></td> +    <td>← <?php echo T_('Required'); ?></td>  </tr>  <tr>      <th align="left"> @@ -50,7 +58,7 @@ function jsEscTitle($title)      <a onclick="var nz = document.getElementById('privateNoteZone'); nz.style.display='';this.style.display='none';"><?php echo T_("Add Note"); ?></a>      </th>      <td><textarea name="description" id="description" rows="5" cols="63" ><?php echo filter($row['bDescription'], 'xml'); ?></textarea></td> -    <td>← <?php echo T_('You can use anchors to delimite attributes. for example: [publisher]blah[/publisher] '); ?> +    <td>← <?php echo T_('You can use anchors to delimite attributes. for example: [publisher]blah[/publisher] '); ?>      <?php if(count($GLOBALS['descriptionAnchors'])>0): ?>      <br /><br />      <?php echo T_('Suggested anchors: '); ?> @@ -67,19 +75,19 @@ function jsEscTitle($title)  <tr id="privateNoteZone" <?php if(strlen($row['bPrivateNote'])==0):?>style="display:none"<?php endif; ?>>      <th align="left"><?php echo T_('Private Note'); ?></th>      <td><textarea name="privateNote" id="privateNote" rows="1" cols="63" ><?php echo filter($row['bPrivateNote'], 'xml'); ?></textarea></td> -    <td>← <?php echo T_('Just visible by you and your contacts.'); ?> +    <td>← <?php echo T_('Just visible by you and your contacts.'); ?>      </td>  </tr>  <tr>      <th align="left"><?php echo T_('Tags'); ?></th>      <td class="scuttletheme"> -    <span dojoType="dojo.data.ItemFileReadStore" jsId="memberTagStore" url="<?php echo ROOT?>ajax/<?php echo ($GLOBALS['adminsAreAdvisedTagsFromOtherAdmins'] && $currentUser->isAdmin())?'getadmintags':'getcontacttags'?>.php"></span> -    <input type="text" dojoType="js.MultiComboBox" id="tags" name="tags" size="75" value="<?php echo filter(implode(', ', $row['tags']), 'xml'); ?>" store="memberTagStore" delimiter="," searchAttr="tag" hasDownArrow="false" queryExpr="*${0}*" autoComplete="false" highlightMatch="all"/></td> -    <td>← <?php echo T_('Comma-separated'); ?></td> +     <input type="text" id="tags" name="tags" size="75" value="<?php echo filter($row['tags'], 'xml'); ?>"/> +    </td> +    <td>← <?php echo T_('Comma-separated'); ?></td>  </tr>  <tr>      <th></th> -    <td align="right"><small><?php echo T_('Note: use ">" to include one tag in another. e.g.: europe>france>paris')?></small></td> +    <td align="right"><small><?php echo htmlspecialchars(T_('Note: use ">" to include one tag in another. e.g.: europe>france>paris'))?></small></td>  </tr>  <tr>      <th></th> @@ -124,65 +132,83 @@ function jsEscTitle($title)          ?>      </td>      <td></td> -</tr> -</table> +  </tr> + </table>  </form> -<?php -// Dynamic tag selection -$this->includeTemplate('dynamictags.inc'); +<link href="<?php echo ROOT ?>js/jquery-ui-1.8.11/themes/base/jquery.ui.all.css" rel="stylesheet" type="text/css"/> -// Bookmarklets and import links -if (empty($_REQUEST['popup']) && (!isset($showdelete) || !$showdelete)) { -?> - -<h3><?php echo T_('Bookmarklet'); ?></h3> +<script type="text/javascript" src="<?php echo ROOT ?>js/jquery-ui-1.8.11/jquery.ui.core.js"></script> +<script type="text/javascript" src="<?php echo ROOT ?>js/jquery-ui-1.8.11/jquery.ui.widget.js"></script> +<script type="text/javascript" src="<?php echo ROOT ?>js/jquery-ui-1.8.11/jquery.ui.position.js"></script> +<script type="text/javascript" src="<?php echo ROOT ?>js/jquery-ui-1.8.11/jquery.ui.autocomplete.js"></script>  <script type="text/javascript">  //<![CDATA[ -var browser=navigator.appName; -if (browser == "Opera") { -    document.write('<p>' + -        <?php echo json_encode( -            sprintf( -                T_("Click one of the following bookmarklets to add a button you can click whenever you want to add the page you are on to %s"), -                $GLOBALS['sitename'] -            ) -        ); ?> + ':</p>' -    ); -} else { -    document.write('<p>' + -        <?php echo json_encode( -            sprintf( -                T_("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"), -                $GLOBALS['sitename'] -            ) -        ); -        ?> + ':</p>' -    ); -} -var selection = ''; -if (window.getSelection) { -    selection = 'window.getSelection()'; -} else if (document.getSelection) { -    selection = 'document.getSelection()'; -} else if (document.selection) { -    selection = 'document.selection.createRange().text'; -} -document.write('<ul>'); -if (browser == "Opera") +jQuery(document).ready(function() { +    function split(val)      { -    document.write('<li><a class="bookmarklet" href="opera:/button/Go%20to%20page,%20%22javascript:x=document;a=encodeURIComponent(x.location.href);t=encodeURIComponent(x.title);d=encodeURIComponent('+selection+');location.href=\'<?php echo createURL('bookmarks', $GLOBALS['user']); ?>?action=add&address=\'+a+\'&title=\'+t+\'&description=\'+d;void 0%22;,,%22Post%20to%20<?php echo jsEscTitle($GLOBALS['sitename']); ?>%22,%22Scuttle%22"><?php echo jsEscTitle(sprintf(T_('Post to %s'), $GLOBALS['sitename'])); ?><\/a><\/li>'); -    document.write('<li><a class="bookmarklet" href="opera:/button/Go%20to%20page,%20%22javascript:x=document;a=encodeURIComponent(x.location.href);t=encodeURIComponent(x.title);d=encodeURIComponent('+selection+');open(\'<?php echo createURL('bookmarks', $GLOBALS['user']); ?>?action=add&popup=1&address=\'+a+\'&title=\'+t+\'&description=\'+d,\'<?php echo jsEscTitle($GLOBALS['sitename']); ?>\',\'modal=1,status=0,scrollbars=1,toolbar=0,resizable=1,width=790,height=465,left=\'+(screen.width-790)/2+\',top=\'+(screen.height-425)/2);void 0;%22,,%22Post%20to%20<?php echo urlencode($GLOBALS['sitename']); ?>%20(Pop-up)%22,%22Scuttle%22"><?php echo jsEscTitle(sprintf(T_('Post to %s (Pop-up)'), $GLOBALS['sitename'])); ?><\/a><\/li>'); +        return val.split(/[,=><]\s*/);      } -else + +    function extractLast(term)      { -    document.write('<li><a class="bookmarklet" href="javascript:x=document;a=encodeURIComponent(x.location.href);t=encodeURIComponent(x.title);d=encodeURIComponent('+selection+');location.href=\'<?php echo createURL('bookmarks', $GLOBALS['user']); ?>?action=add&address=\'+a+\'&title=\'+t+\'&description=\'+d;void 0;"><?php echo jsEscTitle(sprintf(T_('Post to %s'), $GLOBALS['sitename'])); ?><\/a><\/li>'); -    document.write('<li><a class="bookmarklet" href="javascript:x=document;a=encodeURIComponent(x.location.href);t=encodeURIComponent(x.title);d=encodeURIComponent('+selection+');open(\'<?php echo createURL('bookmarks', $GLOBALS['user']); ?>?action=add&popup=1&address=\'+a+\'&title=\'+t+\'&description=\'+d,\'<?php echo jsEscTitle($GLOBALS['sitename']); ?>\',\'modal=1,status=0,scrollbars=1,toolbar=0,resizable=1,width=790,height=465,left=\'+(screen.width-790)/2+\',top=\'+(screen.height-425)/2);void 0;"><?php echo jsEscTitle(sprintf(T_('Post to %s (Pop-up)'), $GLOBALS['sitename'])); ?><\/a><\/li>'); +        return split(term).pop();      } -document.write('<\/ul>'); +    //var availableTags = ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"]; + +    jQuery("input#tags").autocomplete({ +        autoFocus: true, +        minLength: 1, + +        source: function(request, response) { +            // delegate back to autocomplete, but extract the last term +            var term = extractLast(request.term); +            if (term.length < this.options.minLength) { +                return; +            } +            response( +                /* +                $.ui.autocomplete.filter( +                    availableTags, extractLast(request.term) +                ) +                */ +                $.getJSON( +                    "<?php echo $ajaxUrl; ?>", +                    { beginsWith: term }, +                    response +                ) +            ); +        }, + +        focus: function() { +            // prevent value inserted on focus +            return false; +        }, +        select: function(event, ui) { +            var terms = split(this.value); +            // remove the current input +            terms.pop(); +            // add the selected item +            terms.push(ui.item.value); +            // add placeholder to get the comma-and-space at the end +            terms.push(""); +            this.value = terms.join(", "); +            return false; +        } +    }); +});  //]]>  </script> +<?php +// Dynamic tag selection +$this->includeTemplate('dynamictags.inc'); + +// Bookmarklets and import links +if (empty($_REQUEST['popup']) && (!isset($showdelete) || !$showdelete)) { + +$this->includeTemplate('bookmarklet.inc.php'); +?>  <h3><?php echo T_('Import'); ?></h3>  <ul>      <li><a href="<?php echo createURL('importNetscape'); ?>"><?php echo T_('Import bookmarks from bookmark file'); ?></a> (<?php echo T_('Internet Explorer, Mozilla Firefox and Netscape'); ?>)</li> diff --git a/data/templates/editprofile.tpl.php b/data/templates/editprofile.tpl.php index b55d250..2a3c3b8 100644 --- a/data/templates/editprofile.tpl.php +++ b/data/templates/editprofile.tpl.php @@ -3,9 +3,7 @@ $this->includeTemplate($GLOBALS['top_include']);  ?>  <form action="<?php echo $formaction; ?>" method="post"> -<input type="hidden" name="token" value="<?php echo $token; ?>"> - -</table> +<input type="hidden" name="token" value="<?php echo $token; ?>"/>  <h3><?php echo T_('Account Details'); ?></h3> @@ -28,7 +26,7 @@ $this->includeTemplate($GLOBALS['top_include']);  <tr>      <th align="left"><?php echo T_('E-mail'); ?></th>      <td><input type="text" name="pMail" size="75" value="<?php echo filter($objectUser->getEmail(), 'xml'); ?>" /></td> -    <td>← <?php echo T_('Required'); ?></td> +    <td>← <?php echo T_('Required'); ?></td>  </tr>  </table> @@ -58,7 +56,7 @@ $this->includeTemplate($GLOBALS['top_include']);      <th align="left"><?php echo T_('Export bookmarks'); ?></th>      <td>  	<a href="../api/export_html.php"><?php echo T_('HTML file (for browsers)')?></a> / -	<a href="../api/posts/all"><?php echo T_('XML file (like del.icio.us)')?></a> /  +	<a href="../api/posts_all.php"><?php echo T_('XML file (like del.icio.us)')?></a> /   	<a href="../api/export_csv.php"><?php echo T_('CSV file (for spreadsheet tools)')?></a>      </td>  </tr> diff --git a/data/templates/sidebar.block.linked.php b/data/templates/sidebar.block.linked.php index 9e91f93..9aa3cc0 100644 --- a/data/templates/sidebar.block.linked.php +++ b/data/templates/sidebar.block.linked.php @@ -1,4 +1,11 @@  <?php +/* + * Used in: + * - populartags.php + * - bookmarks.php + * - alltags.php + * - tags.php + */  /* Service creation: only useful services are created */  $tag2tagservice =SemanticScuttle_Service_Factory::get('Tag2Tag'); @@ -8,98 +15,52 @@ require_once('sidebar.linkedtags.inc.php');  $user = isset($user)?$user:'';  $userid = isset($userid)?$userid:0;  $currenttag = isset($currenttag)?$currenttag:''; -$summarizeLinkedTags = isset($summarizeLinkedTags)?$summarizeLinkedTags:false; - +//$summarizeLinkedTags = isset($summarizeLinkedTags)?$summarizeLinkedTags:false;  $logged_on_userid = $userservice->getCurrentUserId(); -if ($logged_on_userid === false) { -	$logged_on_userid = NULL; -} - -$explodedTags = array(); -if (strlen($currenttag)>0) { -	$explodedTags = explode('+', $currenttag); -} else { -	if($summarizeLinkedTags == true) { -		$orphewTags = $tag2tagservice->getOrphewTags('>', $userid, 4, "nb"); -	} else { -		$orphewTags = $tag2tagservice->getOrphewTags('>', $userid); -	} - -	foreach($orphewTags as $orphewTag) { -		$explodedTags[] = $orphewTag['tag']; -	} -} - +$editingMode = $logged_on_userid !== false;  ?> - +<h2><?php echo T_('Linked Tags'); ?></h2> +<div id="related">  <?php -if(($logged_on_userid != null) && ($userid === $logged_on_userid)) { -	$editingMode = true; -} else { -	$editingMode = false; -} - -$this->includeTemplate("dojo.inc"); -?> - -<?php if(count($explodedTags)>0 || $editingMode):?> - -<h2><?php - - -echo T_('Linked Tags').' '; -//if($userid != null) { -$cUser = $userservice->getUser($userid); -//echo '<small><a href="'.createURL('alltags', $cUser['username']).'">('.T_('all tags').')</a></small>'; -//} -?></h2> -<?php //endif?> - -<div id="related"> <?php -if($editingMode) { +if ($editingMode) {  	echo '<p style="margin-bottom: 13px;text-align:center;">';  	echo ' (<a href="'. createURL('tag2tagadd','') .'" rel="tag">'.T_('Add new link').'</a>) ';  	echo ' (<a href="'. createURL('tag2tagdelete','') .'" rel="tag">'.T_('Delete link').'</a>)';  	echo '</p>';  } - -if(strlen($user)==0) { -	$cat_url = createURL('tags', '%2$s'); -} - -$stopList = array(); -foreach($explodedTags as $explodedTag) { -	if(!in_array($explodedTag, $stopList)) { - - - -		// fathers tag -		$fatherTags = $tag2tagservice->getLinkedTags($explodedTag, '>', $userid, true); -		if(count($fatherTags)>0) { -			foreach($fatherTags as $fatherTag) { -				echo '<a href="'. sprintf($cat_url, filter($user, 'url'), filter($fatherTag, 'url')) .'" rel="tag">('. filter($fatherTag) .')</a> '; -			} -		} -		/* -		 $displayLinkedTags = displayLinkedTags($explodedTag, '>', $userid, $cat_url, $user, $editingMode, null, 1); -		 echo $displayLinkedTags['output']; -		 if(is_array($displayLinkedTags['stopList'])) { -		 $stopList = array_merge($stopList, $displayLinkedTags['stopList']); -		 }*/ -		echo '<div dojoType="dojo.data.ItemFileReadStore" url="'.ROOT.'ajax/getlinkedtags.php?tag='.filter($explodedTag, 'url').'&uId='.$userid.'" jsid="linkedTagStore" ></div>'; -		echo '<div dojoType="dijit.Tree" store="linkedTagStore" labelAttr="name" >'; -		echo '<script type="dojo/method" event="onClick" args="item">'; -		$returnUrl = sprintf($cat_url, filter($user, 'url'), filter('', 'url')); -		echo 'window.location = "'.$returnUrl.'"+item.name'; -		echo '</script>'; -		echo '<script type="dojo/method" event="getLabelClass" args="item">'; -		echo 'return \'treeTag\';'; -		echo '</script>'; -		echo '</div>'; -	} - -} -?> </div> - -<?php endif?> +?> + <div id="related-content"></div> + <script type="text/javascript">//<![CDATA[ +jQuery("#related-content") +.jstree({ +    "themes" : { +        "theme": "default", +        "dots": false, +        "icons": true, +        "url": '<?php echo ROOT_JS ?>themes/default/style.css' +    }, +    "json_data" : { +        "ajax" : { +            "url": function(node) { +                //-1 is root +                parentparam = ""; +                if (node == -1 ) { +                    node = <?php echo json_encode($currenttag); ?>; +                    parentparam = "&parent=true"; +                } else if (node.attr('rel')) { +                    node = node.attr('rel'); +                } else { +                    return; +                } + +                return "<?php echo ROOT ?>ajax/getlinkedtags.php?tag=" + node +                    + parentparam; +            } +        } +    }, +    plugins : [ "themes", "json_data"] +}); +//]]> + </script> +</div>
\ No newline at end of file diff --git a/data/templates/sidebar.block.menu.php b/data/templates/sidebar.block.menu.php index ee82997..94a9fa2 100644 --- a/data/templates/sidebar.block.menu.php +++ b/data/templates/sidebar.block.menu.php @@ -65,13 +65,13 @@ if (sizeof($menuTags) > 0 || ($userid != 0 && $userid === $logged_on_userid)) {  <?php $cUser = $userservice->getUser($userid); ?>  <?php if($userid>0): ?>  <?php if($userid==$logged_on_userid): ?> -<p style="text-align:right"><a href="<?php echo createURL('alltags', $cUser['username']); ?>" title="<?php echo T_('See all your tags')?>"><?php echo T_('all your tags'); ?></a> →</p> +<p style="text-align:right"><a href="<?php echo createURL('alltags', $cUser['username']); ?>" title="<?php echo T_('See all your tags')?>"><?php echo T_('all your tags'); ?></a> →</p>  <?php else: ?> -<p style="text-align:right"><a href="<?php echo createURL('alltags', $cUser['username']); ?>" title="<?php echo T_('See all tags from this user')?>"><?php echo T_('all tags from this user'); ?></a> →</p> +<p style="text-align:right"><a href="<?php echo createURL('alltags', $cUser['username']); ?>" title="<?php echo T_('See all tags from this user')?>"><?php echo T_('all tags from this user'); ?></a> →</p>  <?php endif; ?>  <?php else : ?> -<p style="text-align:right"><a href="<?php echo createURL('populartags', $cUser['username']); ?>" title="<?php echo T_('See popular tags')?>"><?php echo T_('Popular Tags'); ?></a> →</p> +<p style="text-align:right"><a href="<?php echo createURL('populartags', $cUser['username']); ?>" title="<?php echo T_('See popular tags')?>"><?php echo T_('Popular Tags'); ?></a> →</p>  <?php endif; ?>  </div> diff --git a/data/templates/sidebar.block.menu2.php b/data/templates/sidebar.block.menu2.php index 5f06b40..1c177a5 100644 --- a/data/templates/sidebar.block.menu2.php +++ b/data/templates/sidebar.block.menu2.php @@ -1,7 +1,4 @@  <?php -/* Service creation: only useful services are created */ -$tag2tagservice =SemanticScuttle_Service_Factory::get('Tag2Tag'); -  require_once('sidebar.linkedtags.inc.php');  /* Manage input */ @@ -15,44 +12,60 @@ if ($logged_on_userid === false) {  } -$cat_url = createURL('tags', '%2$s'); +$cat_url = createURL('tags', '%s');  $menu2Tags = $GLOBALS['menu2Tags']; -if (sizeOf($menu2Tags) > 0) { -	$this->includeTemplate("dojo.inc"); -	?> +if (count($menu2Tags) > 0) { +?>  <h2><?php echo T_('Featured Menu Tags');?></h2>  <div id="maintagsmenu"  <?php echo 'title="'.T_('This menu is composed of keywords (tags) organized by admins.').'"'?>> - + <ul>  <?php -foreach($menu2Tags as $menu2Tag) { - -	echo '<div dojoType="dojo.data.ItemFileReadStore" url="'.ROOT.'ajax/getadminlinkedtags.php?tag='.filter($menu2Tag, 'url').'" jsid="linkedTagStore" ></div>'; -	echo '<div dojoType="dijit.Tree" store="linkedTagStore" labelAttr="name" >'; -	echo '<script type="dojo/method" event="onClick" args="item">'; -	$returnUrl = sprintf($cat_url, filter($user, 'url'), filter('', 'url')); -	echo 'window.location = "'.$returnUrl.'"+item.name'; -	echo '</script>'; -	//echo '<script type="dojo/method" event="getLabel" args="item">'; -	//echo 'return item.name + "...";'; -	//echo '</script>'; -	//echo '<script type="dojo/method" event="onMouseOver" args="item">'; -	//echo 'i = item.relatedTarget;'; -	//echo 'if(i.innerHTML.charAt(i.innerHTML)=="a") alert(i.innerHTML)'; -	//echo '</script>'; -	//echo '<script type="dojo/method" event="getLabelClass" args="item">'; -	//echo 'return \'treeTag\';'; -	//echo '</script>'; -	echo '</div>'; +//this is unneeded and replaced by the ajax tree anyway. we keep it for +// non-js browsers +foreach ($menu2Tags as $menu2Tag) { +    echo '  <li>' +        . sprintf( +            '<a href="%s">%s</a>', +            sprintf($cat_url, $menu2Tag), +            $menu2Tag +        ) +        . '</li>' . "\n";  }  ?> + </ul>  </div> - - +<script type="text/javascript"> +jQuery("#maintagsmenu") +.jstree({ +    "themes" : { +        "theme": "default", +        "dots": false, +        "icons": true, +        "url": '<?php echo ROOT_JS ?>themes/default/style.css' +    }, +    "json_data" : { +        "ajax" : { +            "url": function(node) { +                //-1 is root +                if (node == -1 ) { +                    node = ""; +                } else if (node.attr('rel')) { +                    node = node.attr('rel'); +                } else { +                    return; +                } +                return "<?php echo ROOT ?>ajax/getadminlinkedtags.php?tag=" + node; +            } +        } +    }, +    plugins : [ "themes", "json_data"] +}); +</script>  <?php  }  ?> diff --git a/data/templates/sidebar.block.recent.php b/data/templates/sidebar.block.recent.php index e34f820..1ffeb4d 100644 --- a/data/templates/sidebar.block.recent.php +++ b/data/templates/sidebar.block.recent.php @@ -31,7 +31,7 @@ if ($recentTags && count($recentTags) > 0) {      }      echo $contents ."</p>\n";      ?> -    <p style="text-align:right"><a href="<?php echo createURL('populartags'); ?>"><?php echo T_('Popular Tags'); ?></a> →</p> +    <p style="text-align:right"><a href="<?php echo createURL('populartags'); ?>"><?php echo T_('Popular Tags'); ?></a> →</p>  </div>  <?php diff --git a/data/templates/sidebar.block.search.php b/data/templates/sidebar.block.search.php index f4e6b42..d3cd8a5 100644 --- a/data/templates/sidebar.block.search.php +++ b/data/templates/sidebar.block.search.php @@ -34,7 +34,7 @@ foreach ($lastSearches as $row) {      echo  '<a href="'          . htmlspecialchars(createURL('search', $range.'/'.$row['shTerms']))          . '">'; -    echo $row['shTerms']; +    echo htmlspecialchars($row['shTerms']);      echo '</a>';      echo ' <span title="'          . T_('Number of bookmarks for this query') diff --git a/data/templates/sidebar.block.users.php b/data/templates/sidebar.block.users.php index 3ad18bc..58fdfb7 100644 --- a/data/templates/sidebar.block.users.php +++ b/data/templates/sidebar.block.users.php @@ -18,7 +18,7 @@ if ($lastUsers && count($lastUsers) > 0) {  foreach ($lastUsers as $row) {      echo '<tr><td>';      echo  '<a href="'.createURL('profile', $row['username']).'">'; -    echo $row['username']; +    echo SemanticScuttle_Model_UserArray::getName($row);      echo '</a>';      echo ' (<a href="'.createURL('bookmarks', $row['username']).'">'.T_('bookmarks').'</a>)';      echo '</td></tr>'; @@ -27,7 +27,7 @@ foreach ($lastUsers as $row) {  ?>  </table> -<p style="text-align:right"><a href="<?php echo createURL('users'); ?>" title="<?php echo T_('See all users')?>"><?php echo T_('All users'); ?></a> →</p> +<p style="text-align:right"><a href="<?php echo createURL('users'); ?>" title="<?php echo T_('See all users')?>"><?php echo T_('All users'); ?></a> →</p>  </div>  <?php  } diff --git a/data/templates/sidebar.block.watchlist.php b/data/templates/sidebar.block.watchlist.php index 07b7f15..3af9c5a 100644 --- a/data/templates/sidebar.block.watchlist.php +++ b/data/templates/sidebar.block.watchlist.php @@ -16,7 +16,7 @@ foreach($watching as $watchuser) {  ?>  <?php if(count($closeContacts)>0):?> -<h2 title="<?php echo T_('Close contacts are mutual contacts');?>"><?php echo ' ↔ '. T_('Close contacts'); ?></h2> +<h2 title="<?php echo T_('Close contacts are mutual contacts');?>"><?php echo ' ↔ '. T_('Close contacts'); ?></h2>  <div id="watching">      <ul>      <?php foreach($closeContacts as $watchuser): ?> @@ -27,7 +27,7 @@ foreach($watching as $watchuser) {  <?php endif; ?> -<h2><?php echo ' → '. T_('Watching'); ?></h2> +<h2><?php echo ' → '. T_('Watching'); ?></h2>  <div id="watching">      <ul>          <?php if($userservice->isLoggedOn() && $currentUser->getUsername() == $user): ?>             @@ -41,7 +41,7 @@ foreach($watching as $watchuser) {      <?php foreach($watching as $watchuser): ?>          <li><a href="<?php echo createURL('bookmarks', $watchuser); ?>"><?php echo $watchuser; ?></a>          <?php if($userservice->isLoggedOn() && $currentUser->getUsername() == $user): ?> -         - <a href="<?php echo createUrl('watch','?contact='.$watchuser); ?>" title="<?php echo T_('Remove this contact'); ?>">x<a/> +         - <a href="<?php echo createUrl('watch','?contact='.$watchuser); ?>" title="<?php echo T_('Remove this contact'); ?>">x</a>          </li>          <?php endif; ?>        <?php endforeach; ?> @@ -49,7 +49,7 @@ foreach($watching as $watchuser) {      </ul>  </div> -<h2><?php echo ' ← '. T_('Watched By'); ?></h2> +<h2><?php echo ' ← '. T_('Watched By'); ?></h2>  <div id="watching">      <ul>      <?php foreach($watchedBy as $watchuser): ?> diff --git a/data/templates/tag2tagadd.tpl.php b/data/templates/tag2tagadd.tpl.php index fcbd372..9482007 100644 --- a/data/templates/tag2tagadd.tpl.php +++ b/data/templates/tag2tagadd.tpl.php @@ -4,7 +4,7 @@ $this->includeTemplate($GLOBALS['top_include']);  <form action="<?php echo $formaction; ?>" method="post"> -<p align=right" style="float:right"> +<p align="right" style="float:right">  <small style="text-align:right"><?php echo T_('Note: use "=" to make synonym two tags. e.g.: france=frenchcountry')?></small><br/>  <small style="text-align:right"><?php echo T_('Note: use ">" to include one tag in another. e.g.: europe>france>paris')?></small><br/>  </p> diff --git a/data/templates/tagcommondescriptionedit.tpl.php b/data/templates/tagcommondescriptionedit.tpl.php index d3a006a..f938f93 100644 --- a/data/templates/tagcommondescriptionedit.tpl.php +++ b/data/templates/tagcommondescriptionedit.tpl.php @@ -20,7 +20,8 @@ window.onload = function() {  	if(strlen($description['cdDatetime'])>0) {  	   echo T_('Last modification:').' '.$description['cdDatetime'].', ';  	   $lastUser = $userservice->getUser($description['uId']); -	   echo  '<a href="'.createURL('profile', $lastUser['username']).'">'.$lastUser['username'].'</a>'; +	   echo  '<a href="' . createURL('profile', $lastUser['username']) . '">' +           . SemanticScuttle_Model_UserArray::getName($lastUser) . '</a>';  	}  	?>      </td> diff --git a/data/templates/tagrename.tpl.php b/data/templates/tagrename.tpl.php index ea8b516..894b964 100644 --- a/data/templates/tagrename.tpl.php +++ b/data/templates/tagrename.tpl.php @@ -11,12 +11,12 @@ window.onload = function() {  <tr>      <th align="left"><?php echo T_('Old'); ?></th>      <td><input type="text" name="old" id="old" value="<?php echo $old; ?>" /></td> -    <td>← <?php echo T_('Required'); ?></td> +    <td>← <?php echo T_('Required'); ?></td>  </tr>  <tr>      <th align="left"><?php echo T_('New'); ?></th>      <td><input type="text" name="new" id="new" value="" /></td> -    <td>← <?php echo T_('Required'); ?></td> +    <td>← <?php echo T_('Required'); ?></td>  </tr>  <tr>      <td></td> diff --git a/data/templates/top.inc.php b/data/templates/top.inc.php index b1ffa14..bdd4b1a 100644 --- a/data/templates/top.inc.php +++ b/data/templates/top.inc.php @@ -1,7 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?>  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">   <head> -  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +  <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />    <title><?php echo filter($GLOBALS['sitename'] .(isset($pagetitle) ? ' » ' . $pagetitle : '')); ?></title>    <link rel="icon" type="image/png" href="<?php echo ROOT ?>icon.png" />    <link rel="stylesheet" type="text/css" href="<?php echo ROOT ?>scuttle.css" /> @@ -17,17 +18,19 @@ if (isset($rsschannels)) {  }  ?> -  <link rel="stylesheet" type="text/css" -	href="http://ajax.googleapis.com/ajax/libs/dojo/1.2/dijit/themes/nihilo/nihilo.css" /> -  <?php if (isset($loadjs)) :?> +<?php if (DEBUG_MODE) : ?> +  <script type="text/javascript" src="<?php echo ROOT_JS ?>jquery-1.4.2.js"></script> +  <script type="text/javascript" src="<?php echo ROOT_JS ?>jquery.jstree.js"></script> +<?php else: ?> +  <script type="text/javascript" src="<?php echo ROOT_JS ?>jquery-1.4.2.min.js"></script> +  <script type="text/javascript" src="<?php echo ROOT_JS ?>jquery.jstree.min.js"></script> +<?php endif ?>    <script type="text/javascript" src="<?php echo ROOT ?>jsScuttle.php"></script>  <?php endif ?>   </head> - - <body class="nihilo"> -<!-- the class is used by Dojo widgets --> + <body>  <?php  $headerstyle = ''; diff --git a/data/templates/users.tpl.php b/data/templates/users.tpl.php index c209f94..fa92bef 100644 --- a/data/templates/users.tpl.php +++ b/data/templates/users.tpl.php @@ -14,7 +14,14 @@ if ($users && count($users) > 0) {  <?php  $contents = '<';  foreach ($users as $row) { -    echo  '<li><strong>'.$row['username'].'</strong> (<a href="'.createURL('profile', $row['username']).'">'.T_('profile').'</a> '.T_('created in').' '.date('M Y',strtotime($row['uDatetime'])).') : <a href="'.createURL('bookmarks', $row['username']).'">'.T_('bookmarks').'</a></li>'; +    echo  '<li><strong>' +        . SemanticScuttle_Model_UserArray::getName($row) . '</strong>' +        . ' (<a href="' . createURL('profile', $row['username']) . '">' +        . T_('profile') . '</a> ' +        . T_('created in') . ' ' +        . date('M Y', strtotime($row['uDatetime'])) . ')' +        . ' : <a href="' . createURL('bookmarks', $row['username']).'">' +        . T_('bookmarks') . '</a></li>';  }  ?>  </ul> | 
