diff options
-rw-r--r-- | data/config.php.dist | 283 | ||||
-rw-r--r-- | data/templates/bookmarks.tpl.php | 878 | ||||
-rw-r--r-- | tests/BookmarkTest.php | 2829 |
3 files changed, 2029 insertions, 1961 deletions
diff --git a/data/config.php.dist b/data/config.php.dist index 0f849e2..a8d84a6 100644 --- a/data/config.php.dist +++ b/data/config.php.dist @@ -1,145 +1,138 @@ -<?php -/** - * Configuration for SemanticScuttle. - * - * Copy this file to config.inc.php and adjust it. - * - * See config.default.inc.php for more options. - */ - -/** - * Array for defaults. - * - * @var array - */ -$defaults = array(); - -/** - * The name of this site. - * - * @var string - */ -$sitename = 'SemanticScuttle'; - -/** - * The welcome message on the homepage. - * - * @var string - */ -$welcomeMessage = 'Welcome to SemanticScuttle! Social bookmarking for small communities.'; - -/** - * Translation from locales/ folder. - * - * Examples: de_DE, en_GB, fr_FR - * - * @var string - */ -$locale = 'en_GB'; - -/** - * Use clean urls without .php filenames. - * Requires mod_rewrite (for Apache) to be active. - * - * @var boolean - */ -$cleanurls = false; - -/** - * Show debug messages. - * This setting is recommended when setting up SemanticScuttle, - * and when hacking on it. - * - * @var boolean - */ -$debugMode = true; - - -/*************************************************** - * Database configuration - */ - -/** - * Database driver - * - * available: - * mysql4, mysqli, mysql, oracle, postgres, sqlite, db2, firebird, - * mssql, mssq-odbc - * - * @var string - */ -$dbtype = 'mysql4'; -/** - * Database username - * - * @var string - */ -$dbuser = 'username'; - -/** - * Database password - * - * @var string - */ -$dbpass = 'password'; - -/** - * Name of database - * - * @var string - */ -$dbname = 'scuttle'; - -/** - * Database hostname/IP - * - * @var string - */ -$dbhost = '127.0.0.1'; - - -/*************************************************** - * Users - */ - -/** - * Contact address for the site administrator. - * Used as the FROM address in password retrieval e-mails. - * - * @var string - */ -$adminemail = 'admin@example.org'; - -/** - * Array of user names who have admin rights - * - * Example: - * <code> - * $admin_users = array('adminnickname', 'user1nick', 'user2nick'); - * </code> - * - * @var array - */ -$admin_users = array(); - - -/*************************************************** - * Bookmarks - */ - -/** - * Default privacy setting for bookmarks. - * 0 - Public - * 1 - Shared with Watchlist - * 2 - Private - * - * @var integer - */ -$defaults['privacy'] = 0; - - -/** -* You have completed the basic configuration! -* More options can be found in config.default.php. -*/ -?> +<?php
+/**
+ * Configuration for SemanticScuttle.
+ *
+ * Copy this file to config.inc.php and adjust it.
+ *
+ * See config.default.inc.php for more options.
+ */
+
+/**
+ * The name of this site.
+ *
+ * @var string
+ */
+$sitename = 'SemanticScuttle';
+
+/**
+ * The welcome message on the homepage.
+ *
+ * @var string
+ */
+$welcomeMessage = 'Welcome to SemanticScuttle! Social bookmarking for small communities.';
+
+/**
+ * Translation from locales/ folder.
+ *
+ * Examples: de_DE, en_GB, fr_FR
+ *
+ * @var string
+ */
+$locale = 'en_GB';
+
+/**
+ * Use clean urls without .php filenames.
+ * Requires mod_rewrite (for Apache) to be active.
+ *
+ * @var boolean
+ */
+$cleanurls = false;
+
+/**
+ * Show debug messages.
+ * This setting is recommended when setting up SemanticScuttle,
+ * and when hacking on it.
+ *
+ * @var boolean
+ */
+$debugMode = true;
+
+
+/***************************************************
+ * Database configuration
+ */
+
+/**
+ * Database driver
+ *
+ * available:
+ * mysql4, mysqli, mysql, oracle, postgres, sqlite, db2, firebird,
+ * mssql, mssq-odbc
+ *
+ * @var string
+ */
+$dbtype = 'mysql4';
+/**
+ * Database username
+ *
+ * @var string
+ */
+$dbuser = 'username';
+
+/**
+ * Database password
+ *
+ * @var string
+ */
+$dbpass = 'password';
+
+/**
+ * Name of database
+ *
+ * @var string
+ */
+$dbname = 'scuttle';
+
+/**
+ * Database hostname/IP
+ *
+ * @var string
+ */
+$dbhost = '127.0.0.1';
+
+
+/***************************************************
+ * Users
+ */
+
+/**
+ * Contact address for the site administrator.
+ * Used as the FROM address in password retrieval e-mails.
+ *
+ * @var string
+ */
+$adminemail = 'admin@example.org';
+
+/**
+ * Array of user names who have admin rights
+ *
+ * Example:
+ * <code>
+ * $admin_users = array('adminnickname', 'user1nick', 'user2nick');
+ * </code>
+ *
+ * @var array
+ */
+$admin_users = array();
+
+
+/***************************************************
+ * Bookmarks
+ */
+
+/**
+ * Default privacy setting for bookmarks.
+ * 0 - Public
+ * 1 - Shared with Watchlist
+ * 2 - Private
+ *
+ * @var integer
+ */
+$defaults['privacy'] = 0;
+
+
+/**
+* You have completed the basic configuration!
+* More options can be found in config.default.php.
+*/
+?>
diff --git a/data/templates/bookmarks.tpl.php b/data/templates/bookmarks.tpl.php index 44dfe90..b241a71 100644 --- a/data/templates/bookmarks.tpl.php +++ b/data/templates/bookmarks.tpl.php @@ -1,439 +1,439 @@ -<?php -/** - * Show a list of bookmarks. - * - * SemanticScuttle - your social bookmark manager. - * - * PHP version 5. - * - * @category Bookmarking - * @package SemanticScuttle - * @subcategory Templates - * @author Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net> - * @author Christian Weiske <cweiske@cweiske.de> - * @author Eric Dane <ericdane@users.sourceforge.net> - * @license GPL http://www.gnu.org/licenses/gpl.html - * @link http://sourceforge.net/projects/semanticscuttle - */ - -/* Service creation: only useful services are created */ -$bookmarkservice = SemanticScuttle_Service_Factory::get('Bookmark'); -$tagservice = SemanticScuttle_Service_Factory::get('Tag'); -$cdservice = SemanticScuttle_Service_Factory::get('CommonDescription'); - - -$pageName = isset($pageName) ? $pageName : ''; -$user = isset($user) ? $user : ''; -$currenttag = isset($currenttag) ? $currenttag : ''; - - -$this->includeTemplate($GLOBALS['top_include']); - -include('search.menu.php'); -?> - -<?php if($pageName == PAGE_INDEX && $GLOBALS['welcomeMessage']):?> -<p id="welcome"><?php echo $GLOBALS['welcomeMessage'];?></p> -<?php endif?> - - -<?php if($GLOBALS['enableAdminColors']!=false && isset($userid) && $userservice->isAdmin($userid) && $pageName != PAGE_WATCHLIST) : ?> -<div style="width:70%;text-align:center;"> -<img src="<?php echo ROOT ?>images/logo_24.gif" width="12px"/> <?php echo T_('Bookmarks on this page are managed by an admin user.'); ?><img src="<?php echo ROOT ?>images/logo_24.gif" width="12px"/> -</div> -<?php endif?> - - -<?php -// common tag description -if(($currenttag!= '' && $GLOBALS['enableCommonTagDescription']) -|| (isset($hash) && $GLOBALS['enableCommonBookmarkDescription'])):?> - - -<p class="commondescription"><?php -$cDescription = ''; -if($currenttag!= '' && $cdservice->getLastTagDescription($currenttag)) { - $cDescription = $cdservice->getLastTagDescription($currenttag); - echo nl2br(filter($cDescription['cdDescription'])); -} elseif(isset($hash) && $cdservice->getLastBookmarkDescription($hash)) { - $cDescription = $cdservice->getLastBookmarkDescription($hash); - echo nl2br(filter($cDescription['cdTitle'])). "<br/>"; - echo nl2br(filter($cDescription['cdDescription'])). "<br/>"; -} - -//common tag description edit -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)) { - 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>)'; - } -} -?></p> -<?php endif ?> - - -<?php -/* personal tag description */ -if($currenttag!= '' && $user!='') { - $userObject = $userservice->getUserByUsername($user); - if($tagservice->getDescription($currenttag, $userObject['uId'])) { ?> - -<p class="commondescription"><?php -$pDescription = $tagservice->getDescription($currenttag, $userObject['uId']); -echo nl2br(filter($pDescription['tDescription'])); - -//personal tag description edit -if($userservice->isLoggedOn()) { - if($currenttag!= '') { - echo ' <a href="'. createURL('tagedit', $currenttag).'" title="'.T_('Edit your personal description of this tag').'" >'; - echo strlen($pDescription['tDescription'])==0?T_('Edit your personal description of this tag'):''; - echo ' <img src="'.ROOT.'images/b_edit.png" /></a>'; - } -} -?></p> - -<?php - } -} -?> - -<?php if (count($bookmarks) > 0) { ?> -<script type="text/javascript"> -window.onload = playerLoad; -</script> - -<p id="sort"><?php echo $total.' '.T_("bookmark(s)"); ?> - <?php echo T_("Sort by:"); ?> - <?php -$titleArrow = ''; -$dateArrow = ''; -$votingArrow = ''; -$dateSort = 'date_desc'; -$titleSort = 'title_asc'; -$votingSort = 'voting_desc'; - -switch(getSortOrder()) { -case 'date_asc': - $dateArrow = ' ↑'; - $dateSort = 'date_desc'; - break; - -case 'title_asc': - $titleArrow = ' ↑'; - $titleSort = 'title_desc'; - break; - -case 'title_desc': - $titleArrow = ' ↓'; - $titleSort = 'title_asc'; - break; - -case 'voting_asc': - $votingArrow = ' ↑'; - $votingSort = 'voting_desc'; - break; - -case 'voting_desc': - $votingArrow = ' ↓'; - $votingSort = 'voting_asc'; - break; - -case 'date_desc': -default: - $dateArrow = ' ↓'; - $dateSort = 'date_asc'; - break; -} -?> - <a href="?sort=<?php echo $dateSort ?>"><?php echo T_("Date").$dateArrow; ?></a> - <span>/</span> - <a href="?sort=<?php echo $titleSort ?>"><?php echo T_("Title").$titleArrow; ?></a> - <span>/</span> -<?php if ($GLOBALS['enableVoting']) { ?> - <a href="?sort=<?php echo $votingSort ?>"><?php echo T_("Voting").$votingArrow; ?></a> - <span>/</span> -<?php } ?> - -<?php -if ($currenttag!= '') { - if ($user!= '') { - echo ' - '; - echo '<a href="'. createURL('tags', $currenttag) .'">'; - echo T_('Bookmarks from other users for this tag').'</a>'; - //echo T_(' for these tags'); - } else if ($userservice->isLoggedOn()){ - echo ' - '; - echo '<a href="'. createURL('bookmarks', $currentUser->getUsername().'/'.$currenttag) .'">'; - echo T_('Only your bookmarks for this tag').'</a>'; - //echo T_(' for these tags'); - } -} -?></p> - -<?php - // PAGINATION - - // Ordering - $sortOrder = ''; - if (GET_SORT != '') { - $sortOrder = 'sort=' . getSortOrder(); - } - - $sortAmp = (($sortOrder) ? '&'. $sortOrder : ''); - $sortQue = (($sortOrder) ? '?'. $sortOrder : ''); - - // Previous - $perpage = getPerPageCount($currentUser); - if (!$page || $page < 2) { - $page = 1; - $start = 0; - $bfirst = '<span class="disable">'. T_('First') .'</span>'; - $bprev = '<span class="disable">'. T_('Previous') .'</span>'; - } else { - $prev = $page - 1; - $prev = 'page='. $prev; - $start = ($page - 1) * $perpage; - $bfirst= '<a href="'. sprintf($nav_url, $user, $currenttag, '') . $sortQue .'">'. T_('First') .'</a>'; - $bprev = '<a href="'. sprintf($nav_url, $user, $currenttag, '?') . $prev . $sortAmp .'">'. T_('Previous') .'</a>'; - } - - // Next - $next = $page + 1; - $totalpages = ceil($total / $perpage); - if (count($bookmarks) < $perpage || $perpage * $page == $total) { - $bnext = '<span class="disable">'. T_('Next') .'</span>'; - $blast = '<span class="disable">'. T_('Last') ."</span>\n"; - } else { - $bnext = '<a href="'. sprintf($nav_url, $user, $currenttag, '?page=') . $next . $sortAmp .'">'. T_('Next') .'</a>'; - $blast = '<a href="'. sprintf($nav_url, $user, $currenttag, '?page=') . $totalpages . $sortAmp .'">'. T_('Last') ."</a>\n"; - } - - // RSS - $brss = ''; - $size = count($rsschannels); - for ($i = 0; $i < $size; $i++) { - $brss = '<a style="background:#FFFFFF" href="'. htmlspecialchars($rsschannels[$i][1]) . '"' - . ' title="' . htmlspecialchars($rsschannels[$i][0]) . '">' - . '<img src="' . ROOT . 'images/rss.gif" width="16" height="16" alt="' . htmlspecialchars($rsschannels[$i][0]) .'"/>' - . '</a>'; - } - - $pagesBanner = '<p class="paging">'. $bfirst .'<span> / </span>'. $bprev .'<span> / </span>'. $bnext .'<span> / </span>'. $blast .'<span> / </span>'. sprintf(T_('Page %d of %d'), $page, $totalpages) ." ". $brss ." </p>\n"; - - if (getPerPageCount($currentUser) > 10) { - echo $pagesBanner; // display a page banner if too many bookmarks to manage - } - - -?> - - - -<ol<?php echo ($start > 0 ? ' start="'. ++$start .'"' : ''); ?> id="bookmarks"> -<?php - $addresses = array(); - foreach ($bookmarks as $key => &$row) { - $addresses[$row['bId']] = $row['bAddress']; - } - $otherCounts = $bookmarkservice->countOthers($addresses); - if ($userservice->isLoggedOn()) { - $existence = $bookmarkservice->bookmarksExist( - $addresses, $currentUser->getId() - ); - } - - if ($userservice->isLoggedOn()) { - $watchedNames = $userservice->getWatchNames( - $currentUser->getId(), true - ); - } else { - $watchedNames = null; - } - - foreach ($bookmarks as $key => &$row) { - switch ($row['bStatus']) { - case 0: - $access = ' public'; - break; - case 1: - $access = ' shared'; - break; - case 2: - $access = ' private'; - break; - } - - $cats = ''; - $tagsForCopy = ''; - $tags = $row['tags']; - foreach ($tags as $tkey => &$tag) { - $tagcaturl = sprintf( - $cat_url, - filter($row['username'], 'url'), - filter($tag, 'url') - ); - $cats .= sprintf( - '<a href="%s" rel="tag">%s</a>, ', - $tagcaturl, filter($tag) - ); - $tagsForCopy .= $tag . ','; - } - $cats = substr($cats, 0, -2); - if ($cats != '') { - $cats = T_('Tags:') . ' ' . $cats; - } - - // Edit and delete links - $edit = ''; - if ($bookmarkservice->editAllowed($row)) { - $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;\">' - . T_('Delete') - .'<\/a>");</script>'; - } - - // Last update - $update = ' <small title="'. T_('Last update') .'">('. date($GLOBALS['shortdate'], strtotime($row['bModified'])). ') </small>'; - - // User attribution - $copy = ' ' . T_('by') . ' '; - if ($userservice->isLoggedOn() - && $currentUser->getUsername() == $row['username'] - ) { - $copy .= T_('you'); - } else { - $copy .= '<a href="' . createURL('bookmarks', $row['username']) . '">' - . $row['username'] . '</a>'; - } - - // Udders! - if (!isset($hash)) { - $others = $otherCounts[$row['bAddress']]; - $ostart = '<a href="' . createURL('history', $row['bHash']) . '">'; - $oend = '</a>'; - switch ($others) { - case 0: - break; - case 1: - $copy .= sprintf(T_(' and %s1 other%s'), $ostart, $oend); - break; - default: - $copy .= sprintf(T_(' and %2$s%1$s others%3$s'), $others, $ostart, $oend); - } - } - - // Copy link - if ($userservice->isLoggedOn() - && ($currentUser->getId() != $row['uId']) - && !$existence[$row['bAddress']] - ) { - $copy .= ' - <a href="' - . createURL( - 'bookmarks', - $currentUser->getUsername() - . '?action=add&copyOf=' . $row['bId']) - . '" title="'.T_('Copy this bookmark to YOUR bookmarks.').'">' - . T_('Copy') - . '</a>'; - } - - // Nofollow option - $rel = ''; - if ($GLOBALS['nofollow']) { - $rel = ' rel="nofollow"'; - } - - $address = filter($row['bAddress']); - $oaddress = $address; - // Redirection option - if ($GLOBALS['useredir']) { - $address = $GLOBALS['url_redir'] . $address; - } - - // Admin specific design - if ($userservice->isAdmin($row['username']) && $GLOBALS['enableAdminColors']) { - $adminBgClass = ' class="adminBackground"'; - $adminStar = ' <img src="'. ROOT .'images/logo_24.gif" width="12px" title="'. T_('This bookmark is certified by an admin user.') .'" />'; - } else { - $adminBgClass = ''; - $adminStar = ''; - } - - // Private Note (just visible by the owner and his/her contacts) - if ($watchedNames !== null - && ($currentUser->getId() == $row['uId'] - || in_array($row['username'], $watchedNames) - ) - ) { - $privateNoteField = $row['bPrivateNote']; - } else { - $privateNoteField = ''; - } - - if ($GLOBALS['enableVoting'] && $GLOBALS['hideBelowVoting'] !== null - && $row['bVoting'] < $GLOBALS['hideBelowVoting'] - ) { - $access .= ' below-threshold'; - } - - // Output - echo ' <li class="xfolkentry'. $access .'">'."\n"; - include 'bookmarks-thumbnail.inc.tpl.php'; - include 'bookmarks-vote.inc.tpl.php'; - - echo ' <div' . $adminBgClass . '>' . "\n"; - - echo ' <div class="link">' - . '<a href="'. $address .'"'. $rel .' class="taggedlink" target="_blank">' - . filter($row['bTitle']) - . '</a>' . $adminStar . "</div>\n"; - if ($row['bDescription'] == '') { - $bkDescription = $GLOBALS['blankDescription']; - } else { - // Improve description display (anchors, links, ...) - $bkDescription = preg_replace('|\[\/.*?\]|', '', filter($row['bDescription'])); // remove final anchor - $bkDescription = preg_replace('|\[(.*?)\]|', ' <span class="anchorBookmark">$1</span> ยป ', $bkDescription); // highlight starting anchor - $bkDescription = preg_replace('@((http|https|ftp)://.*?)( |\r|$)@', '<a href="$1" rel="nofollow">$1</a>$3', $bkDescription); // make url clickable - - } - echo ' <div class="description">'. nl2br($bkDescription) ."</div>\n"; - echo ' <div class="address">' . shortenString($oaddress) . "</div>\n"; - - echo ' <div class="meta">' - . $cats . "\n" - . $copy . "\n" - . $edit . "\n" - . $update . "\n" - . " </div>\n"; - echo $privateNoteField != '' - ? ' <div class="privateNote" title="'. T_('Private Note on this bookmark') .'">'.$privateNoteField."</div>\n" - : ''; - echo ' '; - include 'bookmarks-vote-horizontal.inc.tpl.php'; - echo " </div>\n"; - - echo " </li>\n"; - } - ?> - -</ol> - - <?php - if(getPerPageCount($currentUser)>7) { - echo '<p class="backToTop"><a href="#header" title="'.T_('Come back to the top of this page.').'">'.T_('Top of the page').'</a></p>'; - } - echo $pagesBanner; // display previous and next links pages + RSS link - - -} else { - echo '<p class="error">'.T_('No bookmarks available').'</p>'; -} -$this->includeTemplate('sidebar.tpl'); -$this->includeTemplate($GLOBALS['bottom_include']); -?> +<?php
+/**
+ * Show a list of bookmarks.
+ *
+ * SemanticScuttle - your social bookmark manager.
+ *
+ * PHP version 5.
+ *
+ * @category Bookmarking
+ * @package SemanticScuttle
+ * @subcategory Templates
+ * @author Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net>
+ * @author Christian Weiske <cweiske@cweiske.de>
+ * @author Eric Dane <ericdane@users.sourceforge.net>
+ * @license GPL http://www.gnu.org/licenses/gpl.html
+ * @link http://sourceforge.net/projects/semanticscuttle
+ */
+
+/* Service creation: only useful services are created */
+$bookmarkservice = SemanticScuttle_Service_Factory::get('Bookmark');
+$tagservice = SemanticScuttle_Service_Factory::get('Tag');
+$cdservice = SemanticScuttle_Service_Factory::get('CommonDescription');
+
+
+$pageName = isset($pageName) ? $pageName : '';
+$user = isset($user) ? $user : '';
+$currenttag = isset($currenttag) ? $currenttag : '';
+
+
+$this->includeTemplate($GLOBALS['top_include']);
+
+include('search.menu.php');
+?>
+
+<?php if($pageName == PAGE_INDEX && $GLOBALS['welcomeMessage']):?>
+<p id="welcome"><?php echo $GLOBALS['welcomeMessage'];?></p>
+<?php endif?>
+
+
+<?php if($GLOBALS['enableAdminColors']!=false && isset($userid) && $userservice->isAdmin($userid) && $pageName != PAGE_WATCHLIST) : ?>
+<div style="width:70%;text-align:center;">
+<img src="<?php echo ROOT ?>images/logo_24.gif" width="12px"/> <?php echo T_('Bookmarks on this page are managed by an admin user.'); ?><img src="<?php echo ROOT ?>images/logo_24.gif" width="12px"/>
+</div>
+<?php endif?>
+
+
+<?php
+// common tag description
+if(($currenttag!= '' && $GLOBALS['enableCommonTagDescription'])
+|| (isset($hash) && $GLOBALS['enableCommonBookmarkDescription'])):?>
+
+
+<p class="commondescription"><?php
+$cDescription = '';
+if($currenttag!= '' && $cdservice->getLastTagDescription($currenttag)) {
+ $cDescription = $cdservice->getLastTagDescription($currenttag);
+ echo nl2br(filter($cDescription['cdDescription']));
+} elseif(isset($hash) && $cdservice->getLastBookmarkDescription($hash)) {
+ $cDescription = $cdservice->getLastBookmarkDescription($hash);
+ echo nl2br(filter($cDescription['cdTitle'])). "<br/>";
+ echo nl2br(filter($cDescription['cdDescription'])). "<br/>";
+}
+
+//common tag description edit
+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)) {
+ 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>)';
+ }
+}
+?></p>
+<?php endif ?>
+
+
+<?php
+/* personal tag description */
+if($currenttag!= '' && $user!='') {
+ $userObject = $userservice->getUserByUsername($user);
+ if($tagservice->getDescription($currenttag, $userObject['uId'])) { ?>
+
+<p class="commondescription"><?php
+$pDescription = $tagservice->getDescription($currenttag, $userObject['uId']);
+echo nl2br(filter($pDescription['tDescription']));
+
+//personal tag description edit
+if($userservice->isLoggedOn()) {
+ if($currenttag!= '') {
+ echo ' <a href="'. createURL('tagedit', $currenttag).'" title="'.T_('Edit your personal description of this tag').'" >';
+ echo strlen($pDescription['tDescription'])==0?T_('Edit your personal description of this tag'):'';
+ echo ' <img src="'.ROOT.'images/b_edit.png" /></a>';
+ }
+}
+?></p>
+
+<?php
+ }
+}
+?>
+
+<?php if (count($bookmarks) > 0) { ?>
+<script type="text/javascript">
+window.onload = playerLoad;
+</script>
+
+<p id="sort"><?php echo $total.' '.T_("bookmark(s)"); ?> - <?php echo T_("Sort by:"); ?>
+ <?php
+$titleArrow = '';
+$dateArrow = '';
+$votingArrow = '';
+$dateSort = 'date_desc';
+$titleSort = 'title_asc';
+$votingSort = 'voting_desc';
+
+switch(getSortOrder()) {
+case 'date_asc':
+ $dateArrow = ' ↑';
+ $dateSort = 'date_desc';
+ break;
+
+case 'title_asc':
+ $titleArrow = ' ↑';
+ $titleSort = 'title_desc';
+ break;
+
+case 'title_desc':
+ $titleArrow = ' ↓';
+ $titleSort = 'title_asc';
+ break;
+
+case 'voting_asc':
+ $votingArrow = ' ↑';
+ $votingSort = 'voting_desc';
+ break;
+
+case 'voting_desc':
+ $votingArrow = ' ↓';
+ $votingSort = 'voting_asc';
+ break;
+
+case 'date_desc':
+default:
+ $dateArrow = ' ↓';
+ $dateSort = 'date_asc';
+ break;
+}
+?>
+ <a href="?sort=<?php echo $dateSort ?>"><?php echo T_("Date").$dateArrow; ?></a>
+ <span>/</span>
+ <a href="?sort=<?php echo $titleSort ?>"><?php echo T_("Title").$titleArrow; ?></a>
+ <span>/</span>
+<?php if ($GLOBALS['enableVoting']) { ?>
+ <a href="?sort=<?php echo $votingSort ?>"><?php echo T_("Voting").$votingArrow; ?></a>
+ <span>/</span>
+<?php } ?>
+
+<?php
+if ($currenttag!= '') {
+ if ($user!= '') {
+ echo ' - ';
+ echo '<a href="'. createURL('tags', $currenttag) .'">';
+ echo T_('Bookmarks from other users for this tag').'</a>';
+ //echo T_(' for these tags');
+ } else if ($userservice->isLoggedOn()){
+ echo ' - ';
+ echo '<a href="'. createURL('bookmarks', $currentUser->getUsername().'/'.$currenttag) .'">';
+ echo T_('Only your bookmarks for this tag').'</a>';
+ //echo T_(' for these tags');
+ }
+}
+?></p>
+
+<?php
+ // PAGINATION
+
+ // Ordering
+ $sortOrder = '';
+ if (GET_SORT != '') {
+ $sortOrder = 'sort=' . getSortOrder();
+ }
+
+ $sortAmp = (($sortOrder) ? '&'. $sortOrder : '');
+ $sortQue = (($sortOrder) ? '?'. $sortOrder : '');
+
+ // Previous
+ $perpage = getPerPageCount($currentUser);
+ if (!$page || $page < 2) {
+ $page = 1;
+ $start = 0;
+ $bfirst = '<span class="disable">'. T_('First') .'</span>';
+ $bprev = '<span class="disable">'. T_('Previous') .'</span>';
+ } else {
+ $prev = $page - 1;
+ $prev = 'page='. $prev;
+ $start = ($page - 1) * $perpage;
+ $bfirst= '<a href="'. sprintf($nav_url, $user, $currenttag, '') . $sortQue .'">'. T_('First') .'</a>';
+ $bprev = '<a href="'. sprintf($nav_url, $user, $currenttag, '?') . $prev . $sortAmp .'">'. T_('Previous') .'</a>';
+ }
+
+ // Next
+ $next = $page + 1;
+ $totalpages = ceil($total / $perpage);
+ if (count($bookmarks) < $perpage || $perpage * $page == $total) {
+ $bnext = '<span class="disable">'. T_('Next') .'</span>';
+ $blast = '<span class="disable">'. T_('Last') ."</span>\n";
+ } else {
+ $bnext = '<a href="'. sprintf($nav_url, $user, $currenttag, '?page=') . $next . $sortAmp .'">'. T_('Next') .'</a>';
+ $blast = '<a href="'. sprintf($nav_url, $user, $currenttag, '?page=') . $totalpages . $sortAmp .'">'. T_('Last') ."</a>\n";
+ }
+
+ // RSS
+ $brss = '';
+ $size = count($rsschannels);
+ for ($i = 0; $i < $size; $i++) {
+ $brss = '<a style="background:#FFFFFF" href="'. htmlspecialchars($rsschannels[$i][1]) . '"'
+ . ' title="' . htmlspecialchars($rsschannels[$i][0]) . '">'
+ . '<img src="' . ROOT . 'images/rss.gif" width="16" height="16" alt="' . htmlspecialchars($rsschannels[$i][0]) .'"/>'
+ . '</a>';
+ }
+
+ $pagesBanner = '<p class="paging">'. $bfirst .'<span> / </span>'. $bprev .'<span> / </span>'. $bnext .'<span> / </span>'. $blast .'<span> / </span>'. sprintf(T_('Page %d of %d'), $page, $totalpages) ." ". $brss ." </p>\n";
+
+ if (getPerPageCount($currentUser) > 10) {
+ echo $pagesBanner; // display a page banner if too many bookmarks to manage
+ }
+
+
+?>
+
+
+
+<ol<?php echo ($start > 0 ? ' start="'. ++$start .'"' : ''); ?> id="bookmarks">
+<?php
+ $addresses = array();
+ foreach ($bookmarks as $key => &$row) {
+ $addresses[$row['bId']] = $row['bAddress'];
+ }
+ $otherCounts = $bookmarkservice->countOthers($addresses);
+ if ($userservice->isLoggedOn()) {
+ $existence = $bookmarkservice->bookmarksExist(
+ $addresses, $currentUser->getId()
+ );
+ }
+
+ if ($userservice->isLoggedOn()) {
+ $watchedNames = $userservice->getWatchNames(
+ $currentUser->getId(), true
+ );
+ } else {
+ $watchedNames = null;
+ }
+
+ foreach ($bookmarks as $key => &$row) {
+ switch ($row['bStatus']) {
+ case 0:
+ $access = '';
+ break;
+ case 1:
+ $access = ' shared';
+ break;
+ case 2:
+ $access = ' private';
+ break;
+ }
+
+ $cats = '';
+ $tagsForCopy = '';
+ $tags = $row['tags'];
+ foreach ($tags as $tkey => &$tag) {
+ $tagcaturl = sprintf(
+ $cat_url,
+ filter($row['username'], 'url'),
+ filter($tag, 'url')
+ );
+ $cats .= sprintf(
+ '<a href="%s" rel="tag">%s</a>, ',
+ $tagcaturl, filter($tag)
+ );
+ $tagsForCopy .= $tag . ',';
+ }
+ $cats = substr($cats, 0, -2);
+ if ($cats != '') {
+ $cats = T_('Tags:') . ' ' . $cats;
+ }
+
+ // Edit and delete links
+ $edit = '';
+ if ($bookmarkservice->editAllowed($row)) {
+ $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;\">'
+ . T_('Delete')
+ .'<\/a>");</script>';
+ }
+
+ // Last update
+ $update = ' <small title="'. T_('Last update') .'">('. date($GLOBALS['shortdate'], strtotime($row['bModified'])). ') </small>';
+
+ // User attribution
+ $copy = ' ' . T_('by') . ' ';
+ if ($userservice->isLoggedOn()
+ && $currentUser->getUsername() == $row['username']
+ ) {
+ $copy .= T_('you');
+ } else {
+ $copy .= '<a href="' . createURL('bookmarks', $row['username']) . '">'
+ . $row['username'] . '</a>';
+ }
+
+ // Udders!
+ if (!isset($hash)) {
+ $others = $otherCounts[$row['bAddress']];
+ $ostart = '<a href="' . createURL('history', $row['bHash']) . '">';
+ $oend = '</a>';
+ switch ($others) {
+ case 0:
+ break;
+ case 1:
+ $copy .= sprintf(T_(' and %s1 other%s'), $ostart, $oend);
+ break;
+ default:
+ $copy .= sprintf(T_(' and %2$s%1$s others%3$s'), $others, $ostart, $oend);
+ }
+ }
+
+ // Copy link
+ if ($userservice->isLoggedOn()
+ && ($currentUser->getId() != $row['uId'])
+ && !$existence[$row['bAddress']]
+ ) {
+ $copy .= ' - <a href="'
+ . createURL(
+ 'bookmarks',
+ $currentUser->getUsername()
+ . '?action=add&copyOf=' . $row['bId'])
+ . '" title="'.T_('Copy this bookmark to YOUR bookmarks.').'">'
+ . T_('Copy')
+ . '</a>';
+ }
+
+ // Nofollow option
+ $rel = '';
+ if ($GLOBALS['nofollow']) {
+ $rel = ' rel="nofollow"';
+ }
+
+ $address = filter($row['bAddress']);
+ $oaddress = $address;
+ // Redirection option
+ if ($GLOBALS['useredir']) {
+ $address = $GLOBALS['url_redir'] . $address;
+ }
+
+ // Admin specific design
+ if ($userservice->isAdmin($row['username']) && $GLOBALS['enableAdminColors']) {
+ $adminBgClass = ' class="adminBackground"';
+ $adminStar = ' <img src="'. ROOT .'images/logo_24.gif" width="12px" title="'. T_('This bookmark is certified by an admin user.') .'" />';
+ } else {
+ $adminBgClass = '';
+ $adminStar = '';
+ }
+
+ // Private Note (just visible by the owner and his/her contacts)
+ if ($watchedNames !== null
+ && ($currentUser->getId() == $row['uId']
+ || in_array($row['username'], $watchedNames)
+ )
+ ) {
+ $privateNoteField = $row['bPrivateNote'];
+ } else {
+ $privateNoteField = '';
+ }
+
+ if ($GLOBALS['enableVoting'] && $GLOBALS['hideBelowVoting'] !== null
+ && $row['bVoting'] < $GLOBALS['hideBelowVoting']
+ ) {
+ $access .= ' below-threshold';
+ }
+
+ // Output
+ echo ' <li class="xfolkentry'. $access .'">'."\n";
+ include 'bookmarks-thumbnail.inc.tpl.php';
+ include 'bookmarks-vote.inc.tpl.php';
+
+ echo ' <div' . $adminBgClass . '>' . "\n";
+
+ echo ' <div class="link">'
+ . '<a href="'. $address .'"'. $rel .' class="taggedlink" target="_blank">'
+ . filter($row['bTitle'])
+ . '</a>' . $adminStar . "</div>\n";
+ if ($row['bDescription'] == '') {
+ $bkDescription = $GLOBALS['blankDescription'];
+ } else {
+ // Improve description display (anchors, links, ...)
+ $bkDescription = preg_replace('|\[\/.*?\]|', '', filter($row['bDescription'])); // remove final anchor
+ $bkDescription = preg_replace('|\[(.*?)\]|', ' <span class="anchorBookmark">$1</span> ยป ', $bkDescription); // highlight starting anchor
+ $bkDescription = preg_replace('@((http|https|ftp)://.*?)( |\r|$)@', '<a href="$1" rel="nofollow">$1</a>$3', $bkDescription); // make url clickable
+
+ }
+ echo ' <div class="description">'. nl2br($bkDescription) ."</div>\n";
+ echo ' <div class="address">' . shortenString($oaddress) . "</div>\n";
+
+ echo ' <div class="meta">'
+ . $cats . "\n"
+ . $copy . "\n"
+ . $edit . "\n"
+ . $update . "\n"
+ . " </div>\n";
+ echo $privateNoteField != ''
+ ? ' <div class="privateNote" title="'. T_('Private Note on this bookmark') .'">'.$privateNoteField."</div>\n"
+ : '';
+ echo ' ';
+ include 'bookmarks-vote-horizontal.inc.tpl.php';
+ echo " </div>\n";
+
+ echo " </li>\n";
+ }
+ ?>
+
+</ol>
+
+ <?php
+ if(getPerPageCount($currentUser)>7) {
+ echo '<p class="backToTop"><a href="#header" title="'.T_('Come back to the top of this page.').'">'.T_('Top of the page').'</a></p>';
+ }
+ echo $pagesBanner; // display previous and next links pages + RSS link
+
+
+} else {
+ echo '<p class="error">'.T_('No bookmarks available').'</p>';
+}
+$this->includeTemplate('sidebar.tpl');
+$this->includeTemplate($GLOBALS['bottom_include']);
+?>
diff --git a/tests/BookmarkTest.php b/tests/BookmarkTest.php index aa0b8c3..0912d55 100644 --- a/tests/BookmarkTest.php +++ b/tests/BookmarkTest.php @@ -1,1377 +1,1452 @@ -<?php -/** - * SemanticScuttle - your social bookmark manager. - * - * PHP version 5. - * - * @category Bookmarking - * @package SemanticScuttle - * @author Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net> - * @author Christian Weiske <cweiske@cweiske.de> - * @author Eric Dane <ericdane@users.sourceforge.net> - * @license GPL http://www.gnu.org/licenses/gpl.html - * @link http://sourceforge.net/projects/semanticscuttle - */ -if (!defined('PHPUnit_MAIN_METHOD')) { - define('PHPUnit_MAIN_METHOD', 'BookmarkTest::main'); -} - -require_once 'prepare.php'; - -/** - * Unit tests for the SemanticScuttle bookmark service. - * - * @category Bookmarking - * @package SemanticScuttle - * @author Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net> - * @author Christian Weiske <cweiske@cweiske.de> - * @author Eric Dane <ericdane@users.sourceforge.net> - * @license GPL http://www.gnu.org/licenses/gpl.html - * @link http://sourceforge.net/projects/semanticscuttle - */ -class BookmarkTest extends TestBase -{ - protected $us; - protected $bs; - protected $ts; - protected $tts; - - - - /** - * Used to run this test class standalone - * - * @return void - */ - public static function main() - { - require_once 'PHPUnit/TextUI/TestRunner.php'; - PHPUnit_TextUI_TestRunner::run( - new PHPUnit_Framework_TestSuite(__CLASS__) - ); - } - - - - protected function setUp() - { - $this->us = SemanticScuttle_Service_Factory::get('User'); - $this->bs = SemanticScuttle_Service_Factory::get('Bookmark'); - $this->bs->deleteAll(); - $this->b2ts= SemanticScuttle_Service_Factory::get('Bookmark2Tag'); - $this->b2ts->deleteAll(); - $this->tts = SemanticScuttle_Service_Factory::get('Tag2Tag'); - $this->tts->deleteAll(); - $this->tsts = SemanticScuttle_Service_Factory::get('TagStat'); - $this->tsts->deleteAll(); - $this->vs = SemanticScuttle_Service_Factory::get('Vote'); - $this->vs->deleteAll(); - } - - /** - * Tests if adding a bookmark with short url name - * saves it in the database. - * - * @return void - */ - public function testAddBookmarkShort() - { - $bid = $this->bs->addBookmark( - 'http://example.org', 'title', 'desc', 'priv', - 0, array(), 'myShortName' - ); - $bm = $this->bs->getBookmark($bid); - $this->assertEquals('http://example.org', $bm['bAddress']); - $this->assertArrayHasKey('bShort', $bm); - $this->assertEquals('myShortName', $bm['bShort']); - } - - public function testHardCharactersInBookmarks() - { - $bs = $this->bs; - $title = "title&รฉ\"'(-รจ_รงร )="; - $desc = "description#{[|`\^@]}ยณ<> ยนยกรทรยฟ&รฉ\"'(-รจ\\_รงร )="; - $tag1 = "#{|`^@]ยณยนยกยฟ<&รฉ\"'(-รจ\\_รงร )"; - $tag2 = "&รฉ\"'(-รจ.[?./ยง!_รงร )"; - - $uid = $this->addUser(); - $bid = $bs->addBookmark( - 'http://site1.com', $title, $desc, 'note', - 0, array($tag1, $tag2), - null, null, false, false, $uid - ); - - $bookmarks = $bs->getBookmarks(0, 1); - - $b0 = $bookmarks['bookmarks'][0]; - $this->assertEquals($title, $b0['bTitle']); - $this->assertEquals($desc, $b0['bDescription']); - $this->assertEquals( - str_replace(array('"', '\'', '/'), "_", $tag1), - $b0['tags'][0] - ); - $this->assertEquals( - str_replace(array('"', '\'', '/'), "_", $tag2), - $b0['tags'][1] - ); - } - - public function testUnificationOfBookmarks() - { - $bs = $this->bs; - - $uid = $this->addUser(); - $uid2 = $this->addUser(); - - $bs->addBookmark( - 'http://site1.com', "title", "description", 'note', - 0, array('tag1'), null, null, false, false, - $uid - ); - $bs->addBookmark( - "http://site1.com", "title2", "description2", 'note', - 0, array('tag2'), null, null, false, false, - $uid2 - ); - - $bookmarks = $bs->getBookmarks(); - $this->assertEquals(1, $bookmarks['total']); - } - - /*public function testSearchingBookmarksAccentsInsensible() - { - $bs = $this->bs; - - $bs->addBookmark("http://site1.com", "title", "รฉรจรผaร รช", "status", array('tag1'), null, false, false, 1); - $bookmarks =& $bs->getBookmarks(0, NULL, NULL, NULL, $terms = "eeaae"); //void - $this->assertEquals(0, $bookmarks['total']); - $bookmarks =& $bs->getBookmarks(0, NULL, NULL, NULL, $terms = "eeuaae"); - $this->assertEquals(1, $bookmarks['total']); - }*/ - - - - /** - * Tests if bookmarkExists() returns false when the given - * parameter is invalid. - * - * @return void - */ - public function testBookmarkExistsInvalidParam() - { - $this->assertFalse($this->bs->bookmarkExists(false)); - $this->assertFalse($this->bs->bookmarkExists(null)); - } - - - - /** - * Tests if bookmarkExists() returns true when a bookmark - * exists - * - * @return void - */ - public function testBookmarkExistsTrue() - { - $bid = $this->addBookmark(); - $bookmark = $this->bs->getBookmark($bid); - - $this->assertTrue($this->bs->bookmarkExists($bookmark['bAddress'])); - } - - - - /** - * Tests if bookmarkExists() returns false when a bookmark - * does not exist - * - * @return void - */ - public function testBookmarkExistsFalse() - { - $this->assertFalse($this->bs->bookmarkExists('does-not-exist')); - } - - - - /** - * Tests if bookmarkExists() returns true when a bookmark - * exists for a user - * - * @return void - */ - public function testBookmarkExistsUserTrue() - { - $bid = $this->addBookmark(); - $bookmark = $this->bs->getBookmark($bid); - - $this->assertTrue( - $this->bs->bookmarkExists( - $bookmark['bAddress'], - $bookmark['uId'] - ) - ); - } - - - - /** - * Tests if bookmarkExists() returns false when a bookmark - * does not exist for a user - * - * @return void - */ - public function testBookmarkExistsUserFalse() - { - $this->assertFalse( - $this->bs->bookmarkExists('does-not-exist', 1234) - ); - } - - - - /** - * Tests if bookmarkExists() returns false when a bookmark - * does not exist for a user but for another user - * - * @return void - */ - public function testBookmarkExistsOtherUser() - { - $bid = $this->addBookmark(); - $bookmark = $this->bs->getBookmark($bid); - - $this->assertFalse( - $this->bs->bookmarkExists( - $bookmark['bAddress'], - $bookmark['uId'] + 1 - ) - ); - } - - - - /** - * Tests if bookmarksExist() returns true when a bookmark - * exists - * - * @return void - */ - public function testBookmarksExistTrueSingle() - { - $bid = $this->addBookmark(); - $bookmark = $this->bs->getBookmark($bid); - - $ret = $this->bs->bookmarksExist(array($bookmark['bAddress'])); - $this->assertInternalType('array', $ret); - $this->assertEquals(1, count($ret)); - $this->assertTrue($ret[$bookmark['bAddress']]); - } - - - - /** - * Tests if bookmarksExist() returns true when all bookmarks - * exist - * - * @return void - */ - public function testBookmarksExistTrueMultiple() - { - $bid = $this->addBookmark(); - $bookmark = $this->bs->getBookmark($bid); - - $bid2 = $this->addBookmark(); - $bookmark2 = $this->bs->getBookmark($bid2); - - - $ret = $this->bs->bookmarksExist( - array( - $bookmark['bAddress'], - $bookmark2['bAddress'] - ) - ); - $this->assertInternalType('array', $ret); - $this->assertEquals(2, count($ret)); - $this->assertTrue($ret[$bookmark['bAddress']]); - $this->assertTrue($ret[$bookmark2['bAddress']]); - } - - - - /** - * Tests if bookmarksExist() returns false when a bookmark - * does not exist - * - * @return void - */ - public function testBookmarksExistFalseSingle() - { - $ret = $this->bs->bookmarksExist(array('does-not-exist')); - $this->assertInternalType('array', $ret); - $this->assertEquals(1, count($ret)); - $this->assertFalse($ret['does-not-exist']); - } - - - - /** - * Tests if bookmarksExist() returns false when all bookmarks - * do not exist - * - * @return void - */ - public function testBookmarksExistFalseMultiple() - { - $bms = array( - 'does-not-exist', - 'does-not-exist-2', - 'does-not-exist-3', - ); - $ret = $this->bs->bookmarksExist($bms); - $this->assertInternalType('array', $ret); - $this->assertEquals(3, count($ret)); - $this->assertFalse($ret['does-not-exist']); - $this->assertFalse($ret['does-not-exist-2']); - $this->assertFalse($ret['does-not-exist-3']); - } - - - - /** - * Tests if bookmarksExist() returns true when some bookmarks - * exist. - * - * @return void - */ - public function testBookmarksExistSome() - { - $bid = $this->addBookmark(); - $bookmark = $this->bs->getBookmark($bid); - - $bid2 = $this->addBookmark(); - $bookmark2 = $this->bs->getBookmark($bid2); - - //do not search for this one - $bid3 = $this->addBookmark(); - $bookmark3 = $this->bs->getBookmark($bid3); - - - $ret = $this->bs->bookmarksExist( - array( - $bookmark['bAddress'], - 'does-not-exist', - $bookmark2['bAddress'], - 'does-not-exist-2', - 'does-not-exist-3' - ) - ); - $this->assertInternalType('array', $ret); - $this->assertEquals(5, count($ret)); - $this->assertTrue($ret[$bookmark['bAddress']]); - $this->assertTrue($ret[$bookmark2['bAddress']]); - $this->assertFalse($ret['does-not-exist']); - $this->assertFalse($ret['does-not-exist-2']); - $this->assertFalse($ret['does-not-exist-3']); - } - - - - /** - * Test if countBookmarks() works with no bookmarks - * - * @return void - */ - public function testCountBookmarksNone() - { - $uid = $this->addUser(); - $this->assertEquals(0, $this->bs->countBookmarks($uid)); - $this->assertEquals(0, $this->bs->countBookmarks($uid, 'public')); - $this->assertEquals(0, $this->bs->countBookmarks($uid, 'private')); - $this->assertEquals(0, $this->bs->countBookmarks($uid, 'shared')); - $this->assertEquals(0, $this->bs->countBookmarks($uid, 'all')); - } - - - - /** - * Test if countBookmarks() works with one public bookmark - * - * @return void - */ - public function testCountBookmarksOnePublic() - { - $uid = $this->addUser(); - $this->addBookmark($uid); - $this->assertEquals(1, $this->bs->countBookmarks($uid)); - $this->assertEquals(1, $this->bs->countBookmarks($uid, 'public')); - $this->assertEquals(0, $this->bs->countBookmarks($uid, 'private')); - $this->assertEquals(0, $this->bs->countBookmarks($uid, 'shared')); - $this->assertEquals(1, $this->bs->countBookmarks($uid, 'all')); - } - - - - /** - * Test if countBookmarks() works with one private bookmark - * - * @return void - */ - public function testCountBookmarksOnePrivate() - { - $uid = $this->addUser(); - $this->bs->addBookmark( - 'http://test', 'test', 'desc', 'note', - 2,//private - array(), null, null, false, false, $uid - ); - $this->assertEquals(0, $this->bs->countBookmarks($uid)); - $this->assertEquals(0, $this->bs->countBookmarks($uid, 'public')); - $this->assertEquals(1, $this->bs->countBookmarks($uid, 'private')); - $this->assertEquals(0, $this->bs->countBookmarks($uid, 'shared')); - $this->assertEquals(1, $this->bs->countBookmarks($uid, 'all')); - } - - - - /** - * Test if countBookmarks() works with one shared bookmark - * - * @return void - */ - public function testCountBookmarksOneShared() - { - $uid = $this->addUser(); - $this->bs->addBookmark( - 'http://test', 'test', 'desc', 'note', - 1,//shared - array(), null, null, false, false, $uid - ); - $this->assertEquals(0, $this->bs->countBookmarks($uid)); - $this->assertEquals(0, $this->bs->countBookmarks($uid, 'public')); - $this->assertEquals(0, $this->bs->countBookmarks($uid, 'private')); - $this->assertEquals(1, $this->bs->countBookmarks($uid, 'shared')); - $this->assertEquals(1, $this->bs->countBookmarks($uid, 'all')); - } - - - - /** - * Check tag loading functionality of getBookmarks() - * - * @return void - */ - public function testGetBookmarksIncludeTags() - { - $uid = $this->addUser(); - $bid = $this->addBookmark($uid); - $this->b2ts->attachTags($bid, array('foo', 'bar')); - $bid2 = $this->addBookmark($uid); - $this->b2ts->attachTags($bid2, array('fuu', 'baz')); - - $bms = $this->bs->getBookmarks(); - $this->assertEquals(2, count($bms['bookmarks'])); - $this->assertEquals(2, $bms['total']); - - foreach ($bms['bookmarks'] as $bm) { - $this->assertArrayHasKey('tags', $bm); - $this->assertInternalType('array', $bm['tags']); - if ($bm['bId'] == $bid) { - $this->assertContains('foo', $bm['tags']); - $this->assertContains('bar', $bm['tags']); - } else if ($bm['bId'] == $bid2) { - $this->assertContains('fuu', $bm['tags']); - $this->assertContains('baz', $bm['tags']); - } else { - $this->assertTrue(false, 'Unknown bookmark id'); - } - } - } - - - - /** - * Test if deleting a bookmark works. - * - * @return void - */ - public function testDeleteBookmark() - { - $bookmarks = $this->bs->getBookmarks(); - $this->assertEquals(0, $bookmarks['total']); - - $bid = $this->addBookmark(); - $bookmarks = $this->bs->getBookmarks(); - $this->assertEquals(1, $bookmarks['total']); - - $bid2 = $this->addBookmark(); - $bookmarks = $this->bs->getBookmarks(); - $this->assertEquals(2, $bookmarks['total']); - - $this->assertTrue($this->bs->deleteBookmark($bid)); - $bookmarks = $this->bs->getBookmarks(); - $this->assertEquals(1, $bookmarks['total']); - - $this->assertTrue($this->bs->deleteBookmark($bid2)); - $bookmarks = $this->bs->getBookmarks(); - $this->assertEquals(0, $bookmarks['total']); - } - - - - /** - * Test if deleting all bookmarks for a user works. - * - * @return void - */ - public function testDeleteBookmarksForUser() - { - $uid = $this->addUser(); - $bookmarks = $this->bs->getBookmarks(0, null, $uid); - $this->assertEquals(0, $bookmarks['total']); - - $this->addBookmark($uid); - $this->addBookmark($uid); - $bookmarks = $this->bs->getBookmarks(0, null, $uid); - $this->assertEquals(2, $bookmarks['total']); - - $this->bs->deleteBookmarksForUser($uid); - $bookmarks = $this->bs->getBookmarks(0, null, $uid); - $this->assertEquals(0, $bookmarks['total']); - } - - - - /** - * Test if deleting all bookmarks for a user works - * and does not damage other user's bookmarks. - * - * @return void - */ - public function testDeleteBookmarksForUserOthers() - { - $uidOther = $this->addUser(); - $this->addBookmark($uidOther); - - $uid = $this->addUser(); - $bookmarks = $this->bs->getBookmarks(0, null, $uid); - $this->assertEquals(0, $bookmarks['total']); - - $this->addBookmark($uid); - $this->addBookmark($uid); - $bookmarks = $this->bs->getBookmarks(0, null, $uid); - $this->assertEquals(2, $bookmarks['total']); - - $this->bs->deleteBookmarksForUser($uid); - $bookmarks = $this->bs->getBookmarks(0, null, $uid); - $this->assertEquals(0, $bookmarks['total']); - - $bookmarks = $this->bs->getBookmarks(0, null, $uidOther); - $this->assertEquals(1, $bookmarks['total']); - } - - - - /** - * Test if deleting a bookmark with a vote works. - * - * @return void - */ - public function testDeleteBookmarkWithVote() - { - $GLOBALS['enableVoting'] = true; - - $uid = $this->addUser(); - $bid = $this->addBookmark(); - - $bid = $this->addBookmark(); - $this->vs->vote($bid, $uid, 1); - $this->assertTrue($this->vs->hasVoted($bid, $uid)); - - $bid2 = $this->addBookmark(); - $this->vs->vote($bid2, $uid, 1); - $this->assertTrue($this->vs->hasVoted($bid2, $uid)); - - $this->assertTrue($this->bs->deleteBookmark($bid)); - $this->assertFalse($this->vs->hasVoted($bid, $uid)); - $this->assertTrue($this->vs->hasVoted($bid2, $uid)); - } - - - - /** - * Test if editAllowed() returns false when the bookmark - * id is invalid. - * - * @return void - */ - public function testEditAllowedInvalidBookmarkId() - { - $this->assertFalse($this->bs->editAllowed('invalid')); - $this->assertFalse($this->bs->editAllowed(array())); - $this->assertFalse($this->bs->editAllowed(array('some', 'where'))); - $this->assertFalse($this->bs->editAllowed(array('bId' => false))); - $this->assertFalse($this->bs->editAllowed(array('bId' => 'foo'))); - } - - - - /** - * Test if editAllowed() works when passing the ID of - * an existing bookmark. - * - * @return void - */ - public function testEditAllowedBookmarkId() - { - $uid = $this->addUser(); - $bid = $this->addBookmark($uid); - $this->us->setCurrentUserId($uid); - $this->assertTrue($this->bs->editAllowed($bid)); - } - - - - /** - * Test if editAllowed() works when passing the ID of - * an existing bookmark that does not belong to the current - * user. - * - * @return void - */ - public function testEditAllowedBookmarkIdNotOwn() - { - $uid = $this->addUser(); - $bid = $this->addBookmark(); - $this->us->setCurrentUserId($uid); - $this->assertFalse($this->bs->editAllowed($bid)); - } - - - - /** - * Test if editAllowed() works when passing the ID of - * an existing bookmark that does not belong to the current - * user. - * - * @return void - */ - public function testEditAllowedBookmarkIdNoUser() - { - $bid = $this->addBookmark(); - $this->us->setCurrentUserId(null); - $this->assertFalse($this->bs->editAllowed($bid)); - } - - - - /** - * Test if editAllowed() works when passing a bookmark - * row. - * - * @return void - */ - public function testEditAllowedBookmarkRow() - { - $uid = $this->addUser(); - $this->us->setCurrentUserId($uid); - - $bid = $this->addBookmark($uid); - $bookmark = $this->bs->getBookmark($bid); - $this->assertTrue($this->bs->editAllowed($bookmark)); - } - - - - /** - * Test if editAllowed() returns false when the bookmark - * specified by the ID does not exist. - * - * @return void - */ - public function testEditAllowedIdNotFound() - { - $this->assertFalse($this->bs->editAllowed(98765)); - } - - - - /** - * Test if editAllowed() works when the user is an administrator. - * - * @return void - */ - public function testEditAllowedBookmarkAdmin() - { - //make the user admin - $uid = $this->addUser(); - $user = $this->us->getUser($uid); - $GLOBALS['admin_users'][] = $user['username']; - - $bid = $this->addBookmark($uid); - $this->us->setCurrentUserId($uid); - $this->assertTrue($this->bs->editAllowed($bid)); - } - - - - /** - * Verify that getBookmark() returns false when the - * bookmark cannot be found. - * - * @return void - */ - public function testGetBookmarkNotFound() - { - $this->assertFalse($this->bs->getBookmark(987654)); - } - - - - /** - * Verify that getBookmark() returns false when the - * bookmark ID is not numeric - * - * @return void - */ - public function testGetBookmarkInvalidParam() - { - $this->assertFalse($this->bs->getBookmark('foo')); - } - - - - /** - * Check tag loading functionality of getBookmark() - * - * @return void - */ - public function testGetBookmarkIncludeTags() - { - $uid = $this->addUser(); - $bid = $this->addBookmark($uid); - $this->b2ts->attachTags($bid, array('foo', 'bar')); - $bid2 = $this->addBookmark($uid); - $this->b2ts->attachTags($bid2, array('fuu', 'baz')); - - $bm = $this->bs->getBookmark($bid, true); - $this->assertArrayHasKey('tags', $bm); - $this->assertInternalType('array', $bm['tags']); - $this->assertContains('foo', $bm['tags']); - $this->assertContains('bar', $bm['tags']); - } - - - - /** - * Verify that getBookmark() does not include user voting - * data when no user is logged on. - * - * @return void - */ - public function testGetBookmarkUserVotingNoUser() - { - $GLOBALS['enableVoting'] = true; - - $uid = $this->addUser(); - $bid = $this->addBookmark($uid); - //no user - $this->us->setCurrentUserId(null); - - $bm = $this->bs->getBookmark($bid); - $this->assertArrayNotHasKey('hasVoted', $bm); - $this->assertArrayNotHasKey('vote', $bm); - } - - - - /** - * Verify that getBookmark() automatically includes - * voting data of the currently logged on user, - * even if he did not vote yet. - * - * @return void - */ - public function testGetBookmarkUserVotingWithUserNoVote() - { - $GLOBALS['enableVoting'] = true; - - $uid = $this->addUser(); - $bid = $this->addBookmark($uid); - //log user in - $this->us->setCurrentUserId($uid); - - $bm = $this->bs->getBookmark($bid); - $this->assertArrayHasKey('hasVoted', $bm); - $this->assertArrayHasKey('vote', $bm); - $this->assertEquals(0, $bm['hasVoted']); - $this->assertEquals(null, $bm['vote']); - } - - - - /** - * Verify that getBookmark() automatically includes - * voting data of the currently logged on user - * when he voted positive. - * - * @return void - */ - public function testGetBookmarkUserVotingWithUserPositiveVote() - { - $GLOBALS['enableVoting'] = true; - - $uid = $this->addUser(); - $bid = $this->addBookmark($uid); - //log user in - $this->us->setCurrentUserId($uid); - $this->assertTrue($this->vs->vote($bid, $uid, 1)); - - $bm = $this->bs->getBookmark($bid); - $this->assertArrayHasKey('hasVoted', $bm); - $this->assertArrayHasKey('vote', $bm); - $this->assertEquals(1, $bm['hasVoted']); - $this->assertEquals(1, $bm['vote']); - } - - - - /** - * Verify that getBookmark() automatically includes - * voting data of the currently logged on user - * when he voted positive. - * - * @return void - */ - public function testGetBookmarkUserVotingWithUserNegativeVote() - { - $GLOBALS['enableVoting'] = true; - - $uid = $this->addUser(); - $bid = $this->addBookmark($uid); - //log user in - $this->us->setCurrentUserId($uid); - $this->assertTrue($this->vs->vote($bid, $uid, -1)); - - $bm = $this->bs->getBookmark($bid); - $this->assertArrayHasKey('hasVoted', $bm); - $this->assertArrayHasKey('vote', $bm); - $this->assertEquals(1, $bm['hasVoted']); - $this->assertEquals(-1, $bm['vote']); - } - - - - /** - * Tests if getBookmarkByAddress() works correctly. - * - * @return void - */ - public function testGetBookmarkByAddress() - { - $url = 'http://example.org'; - $uid = $this->addUser(); - $bid = $this->addBookmark($uid, $url); - - $bm = $this->bs->getBookmarkByAddress($url); - $this->assertInternalType('array', $bm); - $this->assertEquals($url, $bm['bAddress']); - } - - - - /** - * Tests if getBookmarkByAddress() works correctly with aliases. - * When passing an incomplete address i.e. without protocol, - * the full URL needs to be searched for. - * - * The failure of this test lead to #2953732. - * - * @return void - * - * @link https://sourceforge.net/tracker/?func=detail&atid=1017430&aid=2953732&group_id=211356 - */ - public function testGetBookmarkByAddressAlias() - { - $url = 'http://example.org'; - $incomplete = 'example.org'; - - $uid = $this->addUser(); - $bid = $this->addBookmark($uid, $url); - - $bm = $this->bs->getBookmarkByAddress($incomplete); - $this->assertInternalType('array', $bm); - $this->assertEquals($url, $bm['bAddress']); - } - - - - public function testNormalize() - { - $this->assertEquals( - 'http://example.org', $this->bs->normalize('http://example.org') - ); - $this->assertEquals( - 'ftp://example.org', $this->bs->normalize('ftp://example.org') - ); - $this->assertEquals( - 'http://example.org', $this->bs->normalize('http://example.org/') - ); - $this->assertEquals( - 'http://example.org', $this->bs->normalize('example.org') - ); - $this->assertEquals( - 'mailto:foo@example.org', - $this->bs->normalize('mailto:foo@example.org') - ); - } - - - - /** - * test if updating an existing bookmark works - */ - public function testUpdateBookmark() - { - $bid = $this->addBookmark(); - $this->assertTrue( - $this->bs->updateBookmark( - $bid, - 'http://example.org/foo', - 'my new title', - 'new description', - 'new private note', - 1, - array('new') - ) - ); - $bm = $this->bs->getBookmark($bid, true); - $this->assertEquals('http://example.org/foo', $bm['bAddress']); - $this->assertEquals('my new title', $bm['bTitle']); - $this->assertEquals('new description', $bm['bDescription']); - $this->assertEquals('new private note', $bm['bPrivateNote']); - $this->assertEquals(1, $bm['bStatus']); - $this->assertInternalType('array', $bm['tags']); - $this->assertEquals(1, count($bm['tags'])); - $this->assertContains('new', $bm['tags']); - } - - /** - * Tests if updating a bookmark's short url name - * saves it in the database. - * - * @return void - */ - public function testUpdateBookmarkShort() - { - $bid = $this->bs->addBookmark( - 'http://example.org', 'title', 'desc', 'priv', - 0, array(), 'myShortName' - ); - $bm = $this->bs->getBookmark($bid); - $this->assertEquals('myShortName', $bm['bShort']); - - $this->assertTrue( - $this->bs->updateBookmark( - $bid, 'http://example2.org', 'my title', 'desc', - 'priv', 0, array(), 'newShortNambb' - ) - ); - $bm = $this->bs->getBookmark($bid); - $this->assertEquals('newShortNambb', $bm['bShort']); - } - - /** - * Tests if updating a bookmark's date works. - * This once was a bug, see bug #3073215. - * - * @return void - * - * @link https://sourceforge.net/tracker/?func=detail&atid=1017430&aid=3073215&group_id=211356 - */ - public function testUpdateBookmarkDate() - { - $bid = $this->bs->addBookmark( - 'http://example.org', 'title', 'desc', 'priv', - 0, array(), 'myShortName' - ); - $bm = $this->bs->getBookmark($bid); - $this->assertEquals('myShortName', $bm['bShort']); - - $this->assertTrue( - $this->bs->updateBookmark( - $bid, 'http://example2.org', 'my title', 'desc', - 'priv', 0, array(), 'newShortNambb', - //we need to use zulu (GMT) time zone here - // since the dates/times are stored as that - // in the database - '2002-03-04T05:06:07Z' - ) - ); - $bm = $this->bs->getBookmark($bid); - $this->assertEquals('newShortNambb', $bm['bShort']); - $this->assertEquals('2002-03-04 05:06:07', $bm['bDatetime']); - } - - - - /** - * Test what countOther() returns when the address does not exist - * - * @return void - */ - public function testCountOthersAddressDoesNotExist() - { - $this->assertEquals(0, $this->bs->countOthers('http://example.org')); - } - - - - /** - * Test what countOther() returns when nobody else has the same bookmark - * - * @return void - */ - public function testCountOthersNone() - { - $uid = $this->addUser(); - $address = 'http://example.org'; - $this->addBookmark($uid, $address); - $this->assertEquals(0, $this->bs->countOthers($address)); - } - - - - /** - * Test what countOther() returns when the address exists only once - * and multiple bookmarks are in the database. - * - * @return void - */ - public function testCountOthersMultipleNone() - { - $uid = $this->addUser(); - $address = 'http://example.org'; - $this->addBookmark($uid, $address); - $this->addBookmark($uid); - $this->addBookmark($uid); - $this->assertEquals(0, $this->bs->countOthers($address)); - } - - - - /** - * Test what countOther() returns when the address exists only once - * and the same user and other users have other bookmarks - * - * @return void - */ - public function testCountOthersMultipleUsersNone() - { - $uid = $this->addUser(); - $uid2 = $this->addUser(); - $address = 'http://example.org'; - $this->addBookmark($uid, $address); - $this->addBookmark($uid); - $this->addBookmark($uid2); - $this->assertEquals(0, $this->bs->countOthers($address)); - } - - - - /** - * Test what countOther() returns when the address exists two - * times in the database. - * - * @return void - */ - public function testCountOthersOne() - { - $uid = $this->addUser(); - $uid2 = $this->addUser(); - $address = 'http://example.org'; - $this->addBookmark($uid, $address); - $this->addBookmark($uid2, $address); - $this->assertEquals(1, $this->bs->countOthers($address)); - } - - - - /** - * Test what countOther() returns when the address exists four - * times in the database. - * - * @return void - */ - public function testCountOthersThree() - { - $uid = $this->addUser(); - $address = 'http://example.org'; - $this->addBookmark($uid, $address); - $this->addBookmark(null, $address); - $this->addBookmark(null, $address); - $this->addBookmark(null, $address); - $this->assertEquals(3, $this->bs->countOthers($address)); - } - - - - /** - * Test what countOther() returns when the user is logged in - * and a friend (people on the watchlist) has bookmarked - * and the same address with public status. - * - * @return void - */ - public function testCountOthersWatchlistPublic() - { - $uid = $this->addUser(); - $address = 'http://example.org'; - - //create other user and add main user to his watchlist - $friendPublic1 = $this->addUser(); - $this->us->setCurrentUserId($friendPublic1); - $this->us->setWatchStatus($uid); - - //create bookmarks for main user and other one - $this->addBookmark($uid, $address, 0); - $this->addBookmark($friendPublic1, $address, 0);//0 is public - - //log main user in - $this->us->setCurrentUserId($uid); - - $this->assertEquals(1, $this->bs->countOthers($address)); - } - - - - /** - * Test what countOther() returns when the user is logged in - * and a friend (people on the watchlist) has bookmarked - * and shared the same address for the watchlist. - * - * @return void - */ - public function testCountOthersWatchlistShared() - { - $uid = $this->addUser(); - $address = 'http://example.org'; - - //create other user and add main user to his watchlist - $friendPublic1 = $this->addUser(); - $this->us->setCurrentUserId($friendPublic1); - $this->us->setWatchStatus($uid); - - //create bookmarks for main user and other one - $this->addBookmark($uid, $address, 0); - $this->addBookmark($friendPublic1, $address, 1);//1 is shared - - //log main user in - $this->us->setCurrentUserId($uid); - - $this->assertEquals(1, $this->bs->countOthers($address)); - } - - - - /** - * Test what countOther() returns when the user is logged in - * and one friends (people on the watchlist) has bookmarked - * the same address but made it private. - * - * @return void - */ - public function testCountOthersWatchlistPrivate() - { - $uid = $this->addUser(); - $address = 'http://example.org'; - - //create other user and add main user to his watchlist - $friendPublic1 = $this->addUser(); - $this->us->setCurrentUserId($friendPublic1); - $this->us->setWatchStatus($uid); - - //create bookmarks for main user and other one - $this->addBookmark($uid, $address, 0); - $this->addBookmark($friendPublic1, $address, 2);//2 is private - - //log main user in - $this->us->setCurrentUserId($uid); - - $this->assertEquals(0, $this->bs->countOthers($address)); - } - - - /** - * Test what countOther() returns when the user is logged in - * and friends (people on the watchlist) have bookmarked - * and shared the same address. - * - * @return void - */ - public function testCountOthersWatchlistComplex() - { - $uid = $this->addUser(); - $address = 'http://example.org'; - //log user in - $this->us->setCurrentUserId($uid); - - //setup users - $otherPublic1 = $this->addUser(); - $otherPublic2 = $this->addUser(); - $otherShared1 = $this->addUser(); - $otherPrivate1 = $this->addUser(); - $friendPublic1 = $this->addUser(); - $friendShared1 = $this->addUser(); - $friendShared2 = $this->addUser(); - $friendPrivate1 = $this->addUser(); - $friendSharing1 = $this->addUser(); - - //setup watchlists - $us = SemanticScuttle_Service_Factory::get('User'); - $this->us->setCurrentUserId($friendPublic1); - $us->setWatchStatus($uid); - $this->us->setCurrentUserId($friendShared1); - $us->setWatchStatus($uid); - $this->us->setCurrentUserId($friendShared2); - $us->setWatchStatus($uid); - $this->us->setCurrentUserId($friendPrivate1); - $us->setWatchStatus($uid); - - //back to login of main user - $this->us->setCurrentUserId($uid); - $us->setWatchStatus($friendSharing1); - - //add bookmarks - $this->addBookmark($uid, $address, 0); - $this->addBookmark($otherPublic1, $address, 0); - $this->addBookmark($otherPublic2, $address, 0); - $this->addBookmark($otherShared1, $address, 1); - $this->addBookmark($otherPrivate1, $address, 2); - $this->addBookmark($friendPublic1, $address, 0); - $this->addBookmark($friendShared1, $address, 1); - $this->addBookmark($friendShared2, $address, 1); - $this->addBookmark($friendPrivate1, $address, 2); - //this user is on our watchlist, but we not on his - $this->addBookmark($friendSharing1, $address, 1); - - //2 public - //1 public (friend) - //2 shared - //-> 5 - $this->assertEquals(5, $this->bs->countOthers($address)); - } - - - - /** - * Test what countOther() returns when multiple addresses are - * passed to it and none of them exists. - * - * @return void - */ - public function testCountOthersArrayNone() - { - $this->assertEquals( - array('1' => 0, '2' => 0, '3' => 0), - $this->bs->countOthers(array('1', '2', '3')) - ); - } - - - - /** - * Test what countOther() returns when multiple addresses are - * passed to it and only one of them exists. - * - * @return void - */ - public function testCountOthersArrayOneNone() - { - $uid = $this->addUser(); - $uid2 = $this->addUser(); - $address1 = 'http://example.org/1'; - $address2 = 'http://example.org/2'; - $this->addBookmark($uid, $address1); - $this->addBookmark($uid, $address2); - $this->addBookmark($uid2, $address1); - $this->assertEquals( - array( - $address1 => 1, - $address2 => 0 - ), - $this->bs->countOthers( - array($address1, $address2) - ) - ); - } - - - - /** - * Test what countOther() returns when multiple addresses are passed - * to it and both of them exist with different numbers for each. - * - * @return void - */ - public function testCountOthersArrayTwoOne() - { - $uid = $this->addUser(); - $uid2 = $this->addUser(); - $uid3 = $this->addUser(); - - $address1 = 'http://example.org/1'; - $address2 = 'http://example.org/2'; - - $this->addBookmark($uid, $address1); - $this->addBookmark($uid, $address2); - - $this->addBookmark($uid2, $address1); - $this->addBookmark($uid2, $address2); - - $this->addBookmark($uid3, $address1); - - $this->assertEquals( - array( - $address1 => 2, - $address2 => 1 - ), - $this->bs->countOthers( - array($address1, $address2) - ) - ); - } - - - /** - * Test that the default privacy setting in - * $GLOBALS['defaults']['privacy'] is used - * as expected. - * - * @return void - */ - public function testDefaultPrivacy() - { - $GLOBALS['defaults']['privacy'] = 1; - $uid = $this->addUser(); - $this->us->setCurrentUserId($uid); - $bid = $this->bs->addBookmark('http://www.somedomain.com', 'mybookmark1', 'descr1', 'privatenote1', $GLOBALS['defaults']['privacy'], array()); - $bm = $this->bs->getBookmark($bid); - $this->assertEquals('1', $bm['bStatus']); - $GLOBALS['defaults']['privacy'] = 2; - $uid = $this->addUser(); - $this->us->setCurrentUserId($uid); - $bid = $this->bs->addBookmark('http://www.anotherdomain.com', 'mybookmark2', 'descr2', 'privatenote2', $GLOBALS['defaults']['privacy'], array()); - $bm = $this->bs->getBookmark($bid); - $this->assertEquals('2', $bm['bStatus']); - }//end function testDefaultPrivacy - - - -} - - -if (PHPUnit_MAIN_METHOD == 'BookmarkTest::main') { - BookmarkTest::main(); -} -?> +<?php
+/**
+ * SemanticScuttle - your social bookmark manager.
+ *
+ * PHP version 5.
+ *
+ * @category Bookmarking
+ * @package SemanticScuttle
+ * @author Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net>
+ * @author Christian Weiske <cweiske@cweiske.de>
+ * @author Eric Dane <ericdane@users.sourceforge.net>
+ * @license GPL http://www.gnu.org/licenses/gpl.html
+ * @link http://sourceforge.net/projects/semanticscuttle
+ */
+if (!defined('PHPUnit_MAIN_METHOD')) {
+ define('PHPUnit_MAIN_METHOD', 'BookmarkTest::main');
+}
+
+require_once 'prepare.php';
+
+/**
+ * Unit tests for the SemanticScuttle bookmark service.
+ *
+ * @category Bookmarking
+ * @package SemanticScuttle
+ * @author Benjamin Huynh-Kim-Bang <mensonge@users.sourceforge.net>
+ * @author Christian Weiske <cweiske@cweiske.de>
+ * @author Eric Dane <ericdane@users.sourceforge.net>
+ * @license GPL http://www.gnu.org/licenses/gpl.html
+ * @link http://sourceforge.net/projects/semanticscuttle
+ */
+class BookmarkTest extends TestBase
+{
+ protected $us;
+ protected $bs;
+ protected $ts;
+ protected $tts;
+
+
+
+ /**
+ * Used to run this test class standalone
+ *
+ * @return void
+ */
+ public static function main()
+ {
+ require_once 'PHPUnit/TextUI/TestRunner.php';
+ PHPUnit_TextUI_TestRunner::run(
+ new PHPUnit_Framework_TestSuite(__CLASS__)
+ );
+ }
+
+
+
+ protected function setUp()
+ {
+ $this->us = SemanticScuttle_Service_Factory::get('User');
+ $this->bs = SemanticScuttle_Service_Factory::get('Bookmark');
+ $this->bs->deleteAll();
+ $this->b2ts= SemanticScuttle_Service_Factory::get('Bookmark2Tag');
+ $this->b2ts->deleteAll();
+ $this->tts = SemanticScuttle_Service_Factory::get('Tag2Tag');
+ $this->tts->deleteAll();
+ $this->tsts = SemanticScuttle_Service_Factory::get('TagStat');
+ $this->tsts->deleteAll();
+ $this->vs = SemanticScuttle_Service_Factory::get('Vote');
+ $this->vs->deleteAll();
+ }
+
+ /**
+ * Tests if adding a bookmark with short url name
+ * saves it in the database.
+ *
+ * @return void
+ */
+ public function testAddBookmarkShort()
+ {
+ $bid = $this->bs->addBookmark(
+ 'http://example.org', 'title', 'desc', 'priv',
+ 0, array(), 'myShortName'
+ );
+ $bm = $this->bs->getBookmark($bid);
+ $this->assertEquals('http://example.org', $bm['bAddress']);
+ $this->assertArrayHasKey('bShort', $bm);
+ $this->assertEquals('myShortName', $bm['bShort']);
+ }
+
+ public function testHardCharactersInBookmarks()
+ {
+ $bs = $this->bs;
+ $title = "title&รฉ\"'(-รจ_รงร )=";
+ $desc = "description#{[|`\^@]}ยณ<> ยนยกรทรยฟ&รฉ\"'(-รจ\\_รงร )=";
+ $tag1 = "#{|`^@]ยณยนยกยฟ<&รฉ\"'(-รจ\\_รงร )";
+ $tag2 = "&รฉ\"'(-รจ.[?./ยง!_รงร )";
+
+ $uid = $this->addUser();
+ $bid = $bs->addBookmark(
+ 'http://site1.com', $title, $desc, 'note',
+ 0, array($tag1, $tag2),
+ null, null, false, false, $uid
+ );
+
+ $bookmarks = $bs->getBookmarks(0, 1);
+
+ $b0 = $bookmarks['bookmarks'][0];
+ $this->assertEquals($title, $b0['bTitle']);
+ $this->assertEquals($desc, $b0['bDescription']);
+ $this->assertEquals(
+ str_replace(array('"', '\'', '/'), "_", $tag1),
+ $b0['tags'][0]
+ );
+ $this->assertEquals(
+ str_replace(array('"', '\'', '/'), "_", $tag2),
+ $b0['tags'][1]
+ );
+ }
+
+ public function testUnificationOfBookmarks()
+ {
+ $bs = $this->bs;
+
+ $uid = $this->addUser();
+ $uid2 = $this->addUser();
+
+ $bs->addBookmark(
+ 'http://site1.com', "title", "description", 'note',
+ 0, array('tag1'), null, null, false, false,
+ $uid
+ );
+ $bs->addBookmark(
+ "http://site1.com", "title2", "description2", 'note',
+ 0, array('tag2'), null, null, false, false,
+ $uid2
+ );
+
+ $bookmarks = $bs->getBookmarks();
+ $this->assertEquals(1, $bookmarks['total']);
+ }
+
+ /*public function testSearchingBookmarksAccentsInsensible()
+ {
+ $bs = $this->bs;
+
+ $bs->addBookmark("http://site1.com", "title", "รฉรจรผaร รช", "status", array('tag1'), null, false, false, 1);
+ $bookmarks =& $bs->getBookmarks(0, NULL, NULL, NULL, $terms = "eeaae"); //void
+ $this->assertEquals(0, $bookmarks['total']);
+ $bookmarks =& $bs->getBookmarks(0, NULL, NULL, NULL, $terms = "eeuaae");
+ $this->assertEquals(1, $bookmarks['total']);
+ }*/
+
+
+
+ /**
+ * Tests if bookmarkExists() returns false when the given
+ * parameter is invalid.
+ *
+ * @return void
+ */
+ public function testBookmarkExistsInvalidParam()
+ {
+ $this->assertFalse($this->bs->bookmarkExists(false));
+ $this->assertFalse($this->bs->bookmarkExists(null));
+ }
+
+
+
+ /**
+ * Tests if bookmarkExists() returns true when a bookmark
+ * exists
+ *
+ * @return void
+ */
+ public function testBookmarkExistsTrue()
+ {
+ $bid = $this->addBookmark();
+ $bookmark = $this->bs->getBookmark($bid);
+
+ $this->assertTrue($this->bs->bookmarkExists($bookmark['bAddress']));
+ }
+
+
+
+ /**
+ * Tests if bookmarkExists() returns false when a bookmark
+ * does not exist
+ *
+ * @return void
+ */
+ public function testBookmarkExistsFalse()
+ {
+ $this->assertFalse($this->bs->bookmarkExists('does-not-exist'));
+ }
+
+
+
+ /**
+ * Tests if bookmarkExists() returns true when a bookmark
+ * exists for a user
+ *
+ * @return void
+ */
+ public function testBookmarkExistsUserTrue()
+ {
+ $bid = $this->addBookmark();
+ $bookmark = $this->bs->getBookmark($bid);
+
+ $this->assertTrue(
+ $this->bs->bookmarkExists(
+ $bookmark['bAddress'],
+ $bookmark['uId']
+ )
+ );
+ }
+
+
+
+ /**
+ * Tests if bookmarkExists() returns false when a bookmark
+ * does not exist for a user
+ *
+ * @return void
+ */
+ public function testBookmarkExistsUserFalse()
+ {
+ $this->assertFalse(
+ $this->bs->bookmarkExists('does-not-exist', 1234)
+ );
+ }
+
+
+
+ /**
+ * Tests if bookmarkExists() returns false when a bookmark
+ * does not exist for a user but for another user
+ *
+ * @return void
+ */
+ public function testBookmarkExistsOtherUser()
+ {
+ $bid = $this->addBookmark();
+ $bookmark = $this->bs->getBookmark($bid);
+
+ $this->assertFalse(
+ $this->bs->bookmarkExists(
+ $bookmark['bAddress'],
+ $bookmark['uId'] + 1
+ )
+ );
+ }
+
+
+
+ /**
+ * Tests if bookmarksExist() returns true when a bookmark
+ * exists
+ *
+ * @return void
+ */
+ public function testBookmarksExistTrueSingle()
+ {
+ $bid = $this->addBookmark();
+ $bookmark = $this->bs->getBookmark($bid);
+
+ $ret = $this->bs->bookmarksExist(array($bookmark['bAddress']));
+ $this->assertInternalType('array', $ret);
+ $this->assertEquals(1, count($ret));
+ $this->assertTrue($ret[$bookmark['bAddress']]);
+ }
+
+
+
+ /**
+ * Tests if bookmarksExist() returns true when all bookmarks
+ * exist
+ *
+ * @return void
+ */
+ public function testBookmarksExistTrueMultiple()
+ {
+ $bid = $this->addBookmark();
+ $bookmark = $this->bs->getBookmark($bid);
+
+ $bid2 = $this->addBookmark();
+ $bookmark2 = $this->bs->getBookmark($bid2);
+
+
+ $ret = $this->bs->bookmarksExist(
+ array(
+ $bookmark['bAddress'],
+ $bookmark2['bAddress']
+ )
+ );
+ $this->assertInternalType('array', $ret);
+ $this->assertEquals(2, count($ret));
+ $this->assertTrue($ret[$bookmark['bAddress']]);
+ $this->assertTrue($ret[$bookmark2['bAddress']]);
+ }
+
+
+
+ /**
+ * Tests if bookmarksExist() returns false when a bookmark
+ * does not exist
+ *
+ * @return void
+ */
+ public function testBookmarksExistFalseSingle()
+ {
+ $ret = $this->bs->bookmarksExist(array('does-not-exist'));
+ $this->assertInternalType('array', $ret);
+ $this->assertEquals(1, count($ret));
+ $this->assertFalse($ret['does-not-exist']);
+ }
+
+
+
+ /**
+ * Tests if bookmarksExist() returns false when all bookmarks
+ * do not exist
+ *
+ * @return void
+ */
+ public function testBookmarksExistFalseMultiple()
+ {
+ $bms = array(
+ 'does-not-exist',
+ 'does-not-exist-2',
+ 'does-not-exist-3',
+ );
+ $ret = $this->bs->bookmarksExist($bms);
+ $this->assertInternalType('array', $ret);
+ $this->assertEquals(3, count($ret));
+ $this->assertFalse($ret['does-not-exist']);
+ $this->assertFalse($ret['does-not-exist-2']);
+ $this->assertFalse($ret['does-not-exist-3']);
+ }
+
+
+
+ /**
+ * Tests if bookmarksExist() returns true when some bookmarks
+ * exist.
+ *
+ * @return void
+ */
+ public function testBookmarksExistSome()
+ {
+ $bid = $this->addBookmark();
+ $bookmark = $this->bs->getBookmark($bid);
+
+ $bid2 = $this->addBookmark();
+ $bookmark2 = $this->bs->getBookmark($bid2);
+
+ //do not search for this one
+ $bid3 = $this->addBookmark();
+ $bookmark3 = $this->bs->getBookmark($bid3);
+
+
+ $ret = $this->bs->bookmarksExist(
+ array(
+ $bookmark['bAddress'],
+ 'does-not-exist',
+ $bookmark2['bAddress'],
+ 'does-not-exist-2',
+ 'does-not-exist-3'
+ )
+ );
+ $this->assertInternalType('array', $ret);
+ $this->assertEquals(5, count($ret));
+ $this->assertTrue($ret[$bookmark['bAddress']]);
+ $this->assertTrue($ret[$bookmark2['bAddress']]);
+ $this->assertFalse($ret['does-not-exist']);
+ $this->assertFalse($ret['does-not-exist-2']);
+ $this->assertFalse($ret['does-not-exist-3']);
+ }
+
+
+
+ /**
+ * Test if countBookmarks() works with no bookmarks
+ *
+ * @return void
+ */
+ public function testCountBookmarksNone()
+ {
+ $uid = $this->addUser();
+ $this->assertEquals(0, $this->bs->countBookmarks($uid));
+ $this->assertEquals(0, $this->bs->countBookmarks($uid, 'public'));
+ $this->assertEquals(0, $this->bs->countBookmarks($uid, 'private'));
+ $this->assertEquals(0, $this->bs->countBookmarks($uid, 'shared'));
+ $this->assertEquals(0, $this->bs->countBookmarks($uid, 'all'));
+ }
+
+
+
+ /**
+ * Test if countBookmarks() works with one public bookmark
+ *
+ * @return void
+ */
+ public function testCountBookmarksOnePublic()
+ {
+ $uid = $this->addUser();
+ $this->addBookmark($uid);
+ $this->assertEquals(1, $this->bs->countBookmarks($uid));
+ $this->assertEquals(1, $this->bs->countBookmarks($uid, 'public'));
+ $this->assertEquals(0, $this->bs->countBookmarks($uid, 'private'));
+ $this->assertEquals(0, $this->bs->countBookmarks($uid, 'shared'));
+ $this->assertEquals(1, $this->bs->countBookmarks($uid, 'all'));
+ }
+
+
+
+ /**
+ * Test if countBookmarks() works with one private bookmark
+ *
+ * @return void
+ */
+ public function testCountBookmarksOnePrivate()
+ {
+ $uid = $this->addUser();
+ $this->bs->addBookmark(
+ 'http://test', 'test', 'desc', 'note',
+ 2,//private
+ array(), null, null, false, false, $uid
+ );
+ $this->assertEquals(0, $this->bs->countBookmarks($uid));
+ $this->assertEquals(0, $this->bs->countBookmarks($uid, 'public'));
+ $this->assertEquals(1, $this->bs->countBookmarks($uid, 'private'));
+ $this->assertEquals(0, $this->bs->countBookmarks($uid, 'shared'));
+ $this->assertEquals(1, $this->bs->countBookmarks($uid, 'all'));
+ }
+
+
+
+ /**
+ * Test if countBookmarks() works with one shared bookmark
+ *
+ * @return void
+ */
+ public function testCountBookmarksOneShared()
+ {
+ $uid = $this->addUser();
+ $this->bs->addBookmark(
+ 'http://test', 'test', 'desc', 'note',
+ 1,//shared
+ array(), null, null, false, false, $uid
+ );
+ $this->assertEquals(0, $this->bs->countBookmarks($uid));
+ $this->assertEquals(0, $this->bs->countBookmarks($uid, 'public'));
+ $this->assertEquals(0, $this->bs->countBookmarks($uid, 'private'));
+ $this->assertEquals(1, $this->bs->countBookmarks($uid, 'shared'));
+ $this->assertEquals(1, $this->bs->countBookmarks($uid, 'all'));
+ }
+
+
+
+ /**
+ * Check tag loading functionality of getBookmarks()
+ *
+ * @return void
+ */
+ public function testGetBookmarksIncludeTags()
+ {
+ $uid = $this->addUser();
+ $bid = $this->addBookmark($uid);
+ $this->b2ts->attachTags($bid, array('foo', 'bar'));
+ $bid2 = $this->addBookmark($uid);
+ $this->b2ts->attachTags($bid2, array('fuu', 'baz'));
+
+ $bms = $this->bs->getBookmarks();
+ $this->assertEquals(2, count($bms['bookmarks']));
+ $this->assertEquals(2, $bms['total']);
+
+ foreach ($bms['bookmarks'] as $bm) {
+ $this->assertArrayHasKey('tags', $bm);
+ $this->assertInternalType('array', $bm['tags']);
+ if ($bm['bId'] == $bid) {
+ $this->assertContains('foo', $bm['tags']);
+ $this->assertContains('bar', $bm['tags']);
+ } else if ($bm['bId'] == $bid2) {
+ $this->assertContains('fuu', $bm['tags']);
+ $this->assertContains('baz', $bm['tags']);
+ } else {
+ $this->assertTrue(false, 'Unknown bookmark id');
+ }
+ }
+ }
+
+
+
+ /**
+ * Test if deleting a bookmark works.
+ *
+ * @return void
+ */
+ public function testDeleteBookmark()
+ {
+ $bookmarks = $this->bs->getBookmarks();
+ $this->assertEquals(0, $bookmarks['total']);
+
+ $bid = $this->addBookmark();
+ $bookmarks = $this->bs->getBookmarks();
+ $this->assertEquals(1, $bookmarks['total']);
+
+ $bid2 = $this->addBookmark();
+ $bookmarks = $this->bs->getBookmarks();
+ $this->assertEquals(2, $bookmarks['total']);
+
+ $this->assertTrue($this->bs->deleteBookmark($bid));
+ $bookmarks = $this->bs->getBookmarks();
+ $this->assertEquals(1, $bookmarks['total']);
+
+ $this->assertTrue($this->bs->deleteBookmark($bid2));
+ $bookmarks = $this->bs->getBookmarks();
+ $this->assertEquals(0, $bookmarks['total']);
+ }
+
+
+
+ /**
+ * Test if deleting all bookmarks for a user works.
+ *
+ * @return void
+ */
+ public function testDeleteBookmarksForUser()
+ {
+ $uid = $this->addUser();
+ $bookmarks = $this->bs->getBookmarks(0, null, $uid);
+ $this->assertEquals(0, $bookmarks['total']);
+
+ $this->addBookmark($uid);
+ $this->addBookmark($uid);
+ $bookmarks = $this->bs->getBookmarks(0, null, $uid);
+ $this->assertEquals(2, $bookmarks['total']);
+
+ $this->bs->deleteBookmarksForUser($uid);
+ $bookmarks = $this->bs->getBookmarks(0, null, $uid);
+ $this->assertEquals(0, $bookmarks['total']);
+ }
+
+
+
+ /**
+ * Test if deleting all bookmarks for a user works
+ * and does not damage other user's bookmarks.
+ *
+ * @return void
+ */
+ public function testDeleteBookmarksForUserOthers()
+ {
+ $uidOther = $this->addUser();
+ $this->addBookmark($uidOther);
+
+ $uid = $this->addUser();
+ $bookmarks = $this->bs->getBookmarks(0, null, $uid);
+ $this->assertEquals(0, $bookmarks['total']);
+
+ $this->addBookmark($uid);
+ $this->addBookmark($uid);
+ $bookmarks = $this->bs->getBookmarks(0, null, $uid);
+ $this->assertEquals(2, $bookmarks['total']);
+
+ $this->bs->deleteBookmarksForUser($uid);
+ $bookmarks = $this->bs->getBookmarks(0, null, $uid);
+ $this->assertEquals(0, $bookmarks['total']);
+
+ $bookmarks = $this->bs->getBookmarks(0, null, $uidOther);
+ $this->assertEquals(1, $bookmarks['total']);
+ }
+
+
+
+ /**
+ * Test if deleting a bookmark with a vote works.
+ *
+ * @return void
+ */
+ public function testDeleteBookmarkWithVote()
+ {
+ $GLOBALS['enableVoting'] = true;
+
+ $uid = $this->addUser();
+ $bid = $this->addBookmark();
+
+ $bid = $this->addBookmark();
+ $this->vs->vote($bid, $uid, 1);
+ $this->assertTrue($this->vs->hasVoted($bid, $uid));
+
+ $bid2 = $this->addBookmark();
+ $this->vs->vote($bid2, $uid, 1);
+ $this->assertTrue($this->vs->hasVoted($bid2, $uid));
+
+ $this->assertTrue($this->bs->deleteBookmark($bid));
+ $this->assertFalse($this->vs->hasVoted($bid, $uid));
+ $this->assertTrue($this->vs->hasVoted($bid2, $uid));
+ }
+
+
+
+ /**
+ * Test if editAllowed() returns false when the bookmark
+ * id is invalid.
+ *
+ * @return void
+ */
+ public function testEditAllowedInvalidBookmarkId()
+ {
+ $this->assertFalse($this->bs->editAllowed('invalid'));
+ $this->assertFalse($this->bs->editAllowed(array()));
+ $this->assertFalse($this->bs->editAllowed(array('some', 'where')));
+ $this->assertFalse($this->bs->editAllowed(array('bId' => false)));
+ $this->assertFalse($this->bs->editAllowed(array('bId' => 'foo')));
+ }
+
+
+
+ /**
+ * Test if editAllowed() works when passing the ID of
+ * an existing bookmark.
+ *
+ * @return void
+ */
+ public function testEditAllowedBookmarkId()
+ {
+ $uid = $this->addUser();
+ $bid = $this->addBookmark($uid);
+ $this->us->setCurrentUserId($uid);
+ $this->assertTrue($this->bs->editAllowed($bid));
+ }
+
+
+
+ /**
+ * Test if editAllowed() works when passing the ID of
+ * an existing bookmark that does not belong to the current
+ * user.
+ *
+ * @return void
+ */
+ public function testEditAllowedBookmarkIdNotOwn()
+ {
+ $uid = $this->addUser();
+ $bid = $this->addBookmark();
+ $this->us->setCurrentUserId($uid);
+ $this->assertFalse($this->bs->editAllowed($bid));
+ }
+
+
+
+ /**
+ * Test if editAllowed() works when passing the ID of
+ * an existing bookmark that does not belong to the current
+ * user.
+ *
+ * @return void
+ */
+ public function testEditAllowedBookmarkIdNoUser()
+ {
+ $bid = $this->addBookmark();
+ $this->us->setCurrentUserId(null);
+ $this->assertFalse($this->bs->editAllowed($bid));
+ }
+
+
+
+ /**
+ * Test if editAllowed() works when passing a bookmark
+ * row.
+ *
+ * @return void
+ */
+ public function testEditAllowedBookmarkRow()
+ {
+ $uid = $this->addUser();
+ $this->us->setCurrentUserId($uid);
+
+ $bid = $this->addBookmark($uid);
+ $bookmark = $this->bs->getBookmark($bid);
+ $this->assertTrue($this->bs->editAllowed($bookmark));
+ }
+
+
+
+ /**
+ * Test if editAllowed() returns false when the bookmark
+ * specified by the ID does not exist.
+ *
+ * @return void
+ */
+ public function testEditAllowedIdNotFound()
+ {
+ $this->assertFalse($this->bs->editAllowed(98765));
+ }
+
+
+
+ /**
+ * Test if editAllowed() works when the user is an administrator.
+ *
+ * @return void
+ */
+ public function testEditAllowedBookmarkAdmin()
+ {
+ //make the user admin
+ $uid = $this->addUser();
+ $user = $this->us->getUser($uid);
+ $GLOBALS['admin_users'][] = $user['username'];
+
+ $bid = $this->addBookmark($uid);
+ $this->us->setCurrentUserId($uid);
+ $this->assertTrue($this->bs->editAllowed($bid));
+ }
+
+
+
+ /**
+ * Verify that getBookmark() returns false when the
+ * bookmark cannot be found.
+ *
+ * @return void
+ */
+ public function testGetBookmarkNotFound()
+ {
+ $this->assertFalse($this->bs->getBookmark(987654));
+ }
+
+
+
+ /**
+ * Verify that getBookmark() returns false when the
+ * bookmark ID is not numeric
+ *
+ * @return void
+ */
+ public function testGetBookmarkInvalidParam()
+ {
+ $this->assertFalse($this->bs->getBookmark('foo'));
+ }
+
+
+
+ /**
+ * Check tag loading functionality of getBookmark()
+ *
+ * @return void
+ */
+ public function testGetBookmarkIncludeTags()
+ {
+ $uid = $this->addUser();
+ $bid = $this->addBookmark($uid);
+ $this->b2ts->attachTags($bid, array('foo', 'bar'));
+ $bid2 = $this->addBookmark($uid);
+ $this->b2ts->attachTags($bid2, array('fuu', 'baz'));
+
+ $bm = $this->bs->getBookmark($bid, true);
+ $this->assertArrayHasKey('tags', $bm);
+ $this->assertInternalType('array', $bm['tags']);
+ $this->assertContains('foo', $bm['tags']);
+ $this->assertContains('bar', $bm['tags']);
+ }
+
+
+
+ /**
+ * Verify that getBookmark() does not include user voting
+ * data when no user is logged on.
+ *
+ * @return void
+ */
+ public function testGetBookmarkUserVotingNoUser()
+ {
+ $GLOBALS['enableVoting'] = true;
+
+ $uid = $this->addUser();
+ $bid = $this->addBookmark($uid);
+ //no user
+ $this->us->setCurrentUserId(null);
+
+ $bm = $this->bs->getBookmark($bid);
+ $this->assertArrayNotHasKey('hasVoted', $bm);
+ $this->assertArrayNotHasKey('vote', $bm);
+ }
+
+
+
+ /**
+ * Verify that getBookmark() automatically includes
+ * voting data of the currently logged on user,
+ * even if he did not vote yet.
+ *
+ * @return void
+ */
+ public function testGetBookmarkUserVotingWithUserNoVote()
+ {
+ $GLOBALS['enableVoting'] = true;
+
+ $uid = $this->addUser();
+ $bid = $this->addBookmark($uid);
+ //log user in
+ $this->us->setCurrentUserId($uid);
+
+ $bm = $this->bs->getBookmark($bid);
+ $this->assertArrayHasKey('hasVoted', $bm);
+ $this->assertArrayHasKey('vote', $bm);
+ $this->assertEquals(0, $bm['hasVoted']);
+ $this->assertEquals(null, $bm['vote']);
+ }
+
+
+
+ /**
+ * Verify that getBookmark() automatically includes
+ * voting data of the currently logged on user
+ * when he voted positive.
+ *
+ * @return void
+ */
+ public function testGetBookmarkUserVotingWithUserPositiveVote()
+ {
+ $GLOBALS['enableVoting'] = true;
+
+ $uid = $this->addUser();
+ $bid = $this->addBookmark($uid);
+ //log user in
+ $this->us->setCurrentUserId($uid);
+ $this->assertTrue($this->vs->vote($bid, $uid, 1));
+
+ $bm = $this->bs->getBookmark($bid);
+ $this->assertArrayHasKey('hasVoted', $bm);
+ $this->assertArrayHasKey('vote', $bm);
+ $this->assertEquals(1, $bm['hasVoted']);
+ $this->assertEquals(1, $bm['vote']);
+ }
+
+
+
+ /**
+ * Verify that getBookmark() automatically includes
+ * voting data of the currently logged on user
+ * when he voted positive.
+ *
+ * @return void
+ */
+ public function testGetBookmarkUserVotingWithUserNegativeVote()
+ {
+ $GLOBALS['enableVoting'] = true;
+
+ $uid = $this->addUser();
+ $bid = $this->addBookmark($uid);
+ //log user in
+ $this->us->setCurrentUserId($uid);
+ $this->assertTrue($this->vs->vote($bid, $uid, -1));
+
+ $bm = $this->bs->getBookmark($bid);
+ $this->assertArrayHasKey('hasVoted', $bm);
+ $this->assertArrayHasKey('vote', $bm);
+ $this->assertEquals(1, $bm['hasVoted']);
+ $this->assertEquals(-1, $bm['vote']);
+ }
+
+
+
+ /**
+ * Tests if getBookmarkByAddress() works correctly.
+ *
+ * @return void
+ */
+ public function testGetBookmarkByAddress()
+ {
+ $url = 'http://example.org';
+ $uid = $this->addUser();
+ $bid = $this->addBookmark($uid, $url);
+
+ $bm = $this->bs->getBookmarkByAddress($url);
+ $this->assertInternalType('array', $bm);
+ $this->assertEquals($url, $bm['bAddress']);
+ }
+
+
+
+ /**
+ * Tests if getBookmarkByAddress() works correctly with aliases.
+ * When passing an incomplete address i.e. without protocol,
+ * the full URL needs to be searched for.
+ *
+ * The failure of this test lead to #2953732.
+ *
+ * @return void
+ *
+ * @link https://sourceforge.net/tracker/?func=detail&atid=1017430&aid=2953732&group_id=211356
+ */
+ public function testGetBookmarkByAddressAlias()
+ {
+ $url = 'http://example.org';
+ $incomplete = 'example.org';
+
+ $uid = $this->addUser();
+ $bid = $this->addBookmark($uid, $url);
+
+ $bm = $this->bs->getBookmarkByAddress($incomplete);
+ $this->assertInternalType('array', $bm);
+ $this->assertEquals($url, $bm['bAddress']);
+ }
+
+
+
+ public function testNormalize()
+ {
+ $this->assertEquals(
+ 'http://example.org', $this->bs->normalize('http://example.org')
+ );
+ $this->assertEquals(
+ 'ftp://example.org', $this->bs->normalize('ftp://example.org')
+ );
+ $this->assertEquals(
+ 'http://example.org', $this->bs->normalize('http://example.org/')
+ );
+ $this->assertEquals(
+ 'http://example.org', $this->bs->normalize('example.org')
+ );
+ $this->assertEquals(
+ 'mailto:foo@example.org',
+ $this->bs->normalize('mailto:foo@example.org')
+ );
+ }
+
+
+
+ /**
+ * test if updating an existing bookmark works
+ */
+ public function testUpdateBookmark()
+ {
+ $bid = $this->addBookmark();
+ $this->assertTrue(
+ $this->bs->updateBookmark(
+ $bid,
+ 'http://example.org/foo',
+ 'my new title',
+ 'new description',
+ 'new private note',
+ 1,
+ array('new')
+ )
+ );
+ $bm = $this->bs->getBookmark($bid, true);
+ $this->assertEquals('http://example.org/foo', $bm['bAddress']);
+ $this->assertEquals('my new title', $bm['bTitle']);
+ $this->assertEquals('new description', $bm['bDescription']);
+ $this->assertEquals('new private note', $bm['bPrivateNote']);
+ $this->assertEquals(1, $bm['bStatus']);
+ $this->assertInternalType('array', $bm['tags']);
+ $this->assertEquals(1, count($bm['tags']));
+ $this->assertContains('new', $bm['tags']);
+ }
+
+ /**
+ * Tests if updating a bookmark's short url name
+ * saves it in the database.
+ *
+ * @return void
+ */
+ public function testUpdateBookmarkShort()
+ {
+ $bid = $this->bs->addBookmark(
+ 'http://example.org', 'title', 'desc', 'priv',
+ 0, array(), 'myShortName'
+ );
+ $bm = $this->bs->getBookmark($bid);
+ $this->assertEquals('myShortName', $bm['bShort']);
+
+ $this->assertTrue(
+ $this->bs->updateBookmark(
+ $bid, 'http://example2.org', 'my title', 'desc',
+ 'priv', 0, array(), 'newShortNambb'
+ )
+ );
+ $bm = $this->bs->getBookmark($bid);
+ $this->assertEquals('newShortNambb', $bm['bShort']);
+ }
+
+ /**
+ * Tests if updating a bookmark's date works.
+ * This once was a bug, see bug #3073215.
+ *
+ * @return void
+ *
+ * @link https://sourceforge.net/tracker/?func=detail&atid=1017430&aid=3073215&group_id=211356
+ */
+ public function testUpdateBookmarkDate()
+ {
+ $bid = $this->bs->addBookmark(
+ 'http://example.org', 'title', 'desc', 'priv',
+ 0, array(), 'myShortName'
+ );
+ $bm = $this->bs->getBookmark($bid);
+ $this->assertEquals('myShortName', $bm['bShort']);
+
+ $this->assertTrue(
+ $this->bs->updateBookmark(
+ $bid, 'http://example2.org', 'my title', 'desc',
+ 'priv', 0, array(), 'newShortNambb',
+ //we need to use zulu (GMT) time zone here
+ // since the dates/times are stored as that
+ // in the database
+ '2002-03-04T05:06:07Z'
+ )
+ );
+ $bm = $this->bs->getBookmark($bid);
+ $this->assertEquals('newShortNambb', $bm['bShort']);
+ $this->assertEquals('2002-03-04 05:06:07', $bm['bDatetime']);
+ }
+
+
+
+ /**
+ * Test what countOther() returns when the address does not exist
+ *
+ * @return void
+ */
+ public function testCountOthersAddressDoesNotExist()
+ {
+ $this->assertEquals(0, $this->bs->countOthers('http://example.org'));
+ }
+
+
+
+ /**
+ * Test what countOther() returns when nobody else has the same bookmark
+ *
+ * @return void
+ */
+ public function testCountOthersNone()
+ {
+ $uid = $this->addUser();
+ $address = 'http://example.org';
+ $this->addBookmark($uid, $address);
+ $this->assertEquals(0, $this->bs->countOthers($address));
+ }
+
+
+
+ /**
+ * Test what countOther() returns when the address exists only once
+ * and multiple bookmarks are in the database.
+ *
+ * @return void
+ */
+ public function testCountOthersMultipleNone()
+ {
+ $uid = $this->addUser();
+ $address = 'http://example.org';
+ $this->addBookmark($uid, $address);
+ $this->addBookmark($uid);
+ $this->addBookmark($uid);
+ $this->assertEquals(0, $this->bs->countOthers($address));
+ }
+
+
+
+ /**
+ * Test what countOther() returns when the address exists only once
+ * and the same user and other users have other bookmarks
+ *
+ * @return void
+ */
+ public function testCountOthersMultipleUsersNone()
+ {
+ $uid = $this->addUser();
+ $uid2 = $this->addUser();
+ $address = 'http://example.org';
+ $this->addBookmark($uid, $address);
+ $this->addBookmark($uid);
+ $this->addBookmark($uid2);
+ $this->assertEquals(0, $this->bs->countOthers($address));
+ }
+
+
+
+ /**
+ * Test what countOther() returns when the address exists two
+ * times in the database.
+ *
+ * @return void
+ */
+ public function testCountOthersOne()
+ {
+ $uid = $this->addUser();
+ $uid2 = $this->addUser();
+ $address = 'http://example.org';
+ $this->addBookmark($uid, $address);
+ $this->addBookmark($uid2, $address);
+ $this->assertEquals(1, $this->bs->countOthers($address));
+ }
+
+
+
+ /**
+ * Test what countOther() returns when the address exists four
+ * times in the database.
+ *
+ * @return void
+ */
+ public function testCountOthersThree()
+ {
+ $uid = $this->addUser();
+ $address = 'http://example.org';
+ $this->addBookmark($uid, $address);
+ $this->addBookmark(null, $address);
+ $this->addBookmark(null, $address);
+ $this->addBookmark(null, $address);
+ $this->assertEquals(3, $this->bs->countOthers($address));
+ }
+
+
+
+ /**
+ * Test what countOther() returns when the user is logged in
+ * and a friend (people on the watchlist) has bookmarked
+ * and the same address with public status.
+ *
+ * @return void
+ */
+ public function testCountOthersWatchlistPublic()
+ {
+ $uid = $this->addUser();
+ $address = 'http://example.org';
+
+ //create other user and add main user to his watchlist
+ $friendPublic1 = $this->addUser();
+ $this->us->setCurrentUserId($friendPublic1);
+ $this->us->setWatchStatus($uid);
+
+ //create bookmarks for main user and other one
+ $this->addBookmark($uid, $address, 0);
+ $this->addBookmark($friendPublic1, $address, 0);//0 is public
+
+ //log main user in
+ $this->us->setCurrentUserId($uid);
+
+ $this->assertEquals(1, $this->bs->countOthers($address));
+ }
+
+
+
+ /**
+ * Test what countOther() returns when the user is logged in
+ * and a friend (people on the watchlist) has bookmarked
+ * and shared the same address for the watchlist.
+ *
+ * @return void
+ */
+ public function testCountOthersWatchlistShared()
+ {
+ $uid = $this->addUser();
+ $address = 'http://example.org';
+
+ //create other user and add main user to his watchlist
+ $friendPublic1 = $this->addUser();
+ $this->us->setCurrentUserId($friendPublic1);
+ $this->us->setWatchStatus($uid);
+
+ //create bookmarks for main user and other one
+ $this->addBookmark($uid, $address, 0);
+ $this->addBookmark($friendPublic1, $address, 1);//1 is shared
+
+ //log main user in
+ $this->us->setCurrentUserId($uid);
+
+ $this->assertEquals(1, $this->bs->countOthers($address));
+ }
+
+
+
+ /**
+ * Test what countOther() returns when the user is logged in
+ * and one friends (people on the watchlist) has bookmarked
+ * the same address but made it private.
+ *
+ * @return void
+ */
+ public function testCountOthersWatchlistPrivate()
+ {
+ $uid = $this->addUser();
+ $address = 'http://example.org';
+
+ //create other user and add main user to his watchlist
+ $friendPublic1 = $this->addUser();
+ $this->us->setCurrentUserId($friendPublic1);
+ $this->us->setWatchStatus($uid);
+
+ //create bookmarks for main user and other one
+ $this->addBookmark($uid, $address, 0);
+ $this->addBookmark($friendPublic1, $address, 2);//2 is private
+
+ //log main user in
+ $this->us->setCurrentUserId($uid);
+
+ $this->assertEquals(0, $this->bs->countOthers($address));
+ }
+
+
+ /**
+ * Test what countOther() returns when the user is logged in
+ * and friends (people on the watchlist) have bookmarked
+ * and shared the same address.
+ *
+ * @return void
+ */
+ public function testCountOthersWatchlistComplex()
+ {
+ $uid = $this->addUser();
+ $address = 'http://example.org';
+ //log user in
+ $this->us->setCurrentUserId($uid);
+
+ //setup users
+ $otherPublic1 = $this->addUser();
+ $otherPublic2 = $this->addUser();
+ $otherShared1 = $this->addUser();
+ $otherPrivate1 = $this->addUser();
+ $friendPublic1 = $this->addUser();
+ $friendShared1 = $this->addUser();
+ $friendShared2 = $this->addUser();
+ $friendPrivate1 = $this->addUser();
+ $friendSharing1 = $this->addUser();
+
+ //setup watchlists
+ $us = SemanticScuttle_Service_Factory::get('User');
+ $this->us->setCurrentUserId($friendPublic1);
+ $us->setWatchStatus($uid);
+ $this->us->setCurrentUserId($friendShared1);
+ $us->setWatchStatus($uid);
+ $this->us->setCurrentUserId($friendShared2);
+ $us->setWatchStatus($uid);
+ $this->us->setCurrentUserId($friendPrivate1);
+ $us->setWatchStatus($uid);
+
+ //back to login of main user
+ $this->us->setCurrentUserId($uid);
+ $us->setWatchStatus($friendSharing1);
+
+ //add bookmarks
+ $this->addBookmark($uid, $address, 0);
+ $this->addBookmark($otherPublic1, $address, 0);
+ $this->addBookmark($otherPublic2, $address, 0);
+ $this->addBookmark($otherShared1, $address, 1);
+ $this->addBookmark($otherPrivate1, $address, 2);
+ $this->addBookmark($friendPublic1, $address, 0);
+ $this->addBookmark($friendShared1, $address, 1);
+ $this->addBookmark($friendShared2, $address, 1);
+ $this->addBookmark($friendPrivate1, $address, 2);
+ //this user is on our watchlist, but we not on his
+ $this->addBookmark($friendSharing1, $address, 1);
+
+ //2 public
+ //1 public (friend)
+ //2 shared
+ //-> 5
+ $this->assertEquals(5, $this->bs->countOthers($address));
+ }
+
+
+
+ /**
+ * Test what countOther() returns when multiple addresses are
+ * passed to it and none of them exists.
+ *
+ * @return void
+ */
+ public function testCountOthersArrayNone()
+ {
+ $this->assertEquals(
+ array('1' => 0, '2' => 0, '3' => 0),
+ $this->bs->countOthers(array('1', '2', '3'))
+ );
+ }
+
+
+
+ /**
+ * Test what countOther() returns when multiple addresses are
+ * passed to it and only one of them exists.
+ *
+ * @return void
+ */
+ public function testCountOthersArrayOneNone()
+ {
+ $uid = $this->addUser();
+ $uid2 = $this->addUser();
+ $address1 = 'http://example.org/1';
+ $address2 = 'http://example.org/2';
+ $this->addBookmark($uid, $address1);
+ $this->addBookmark($uid, $address2);
+ $this->addBookmark($uid2, $address1);
+ $this->assertEquals(
+ array(
+ $address1 => 1,
+ $address2 => 0
+ ),
+ $this->bs->countOthers(
+ array($address1, $address2)
+ )
+ );
+ }
+
+
+
+ /**
+ * Test what countOther() returns when multiple addresses are passed
+ * to it and both of them exist with different numbers for each.
+ *
+ * @return void
+ */
+ public function testCountOthersArrayTwoOne()
+ {
+ $uid = $this->addUser();
+ $uid2 = $this->addUser();
+ $uid3 = $this->addUser();
+
+ $address1 = 'http://example.org/1';
+ $address2 = 'http://example.org/2';
+
+ $this->addBookmark($uid, $address1);
+ $this->addBookmark($uid, $address2);
+
+ $this->addBookmark($uid2, $address1);
+ $this->addBookmark($uid2, $address2);
+
+ $this->addBookmark($uid3, $address1);
+
+ $this->assertEquals(
+ array(
+ $address1 => 2,
+ $address2 => 1
+ ),
+ $this->bs->countOthers(
+ array($address1, $address2)
+ )
+ );
+ }
+
+
+ /**
+ * Test that the default privacy setting in
+ * $GLOBALS['defaults']['privacy'] is used
+ * as expected.
+ *
+ * @return void
+ */
+ public function testDefaultPrivacy()
+ {
+ //For this test, the default privacy has been set to 2 (private) in the configuration file.
+ require_once 'HTTP/Request2.php';
+ require_once dirname(__FILE__) . '/../data/config.php';
+ $this->bs->deleteAll();
+ $this->us->deleteAll();
+ $request = new HTTP_Request2('http://localhost/api/posts_add.php', HTTP_Request2::METHOD_POST);
+ $dpuid = $this->addUser('dpuser', 'dpuserpassword');
+ $request->setAuth('dpuser', 'dpuserpassword');
+ $request->addPostParameter('url', 'http://www.testdefaultprivacyposts_add1.com');
+ $request->addPostParameter('description', 'Test bookmark 1 for default privacy.');
+ $request->send();
+ $bm = $this->bs->getBookmark('1');
+ $this->assertEquals('2', $bm['bStatus']);
+
+ $request->addPostParameter('url', 'http://www.testdefaultprivacyposts_add2.com');
+ $request->addPostParameter('description', 'Test bookmark 2 for default privacy.');
+ $request->addPostParameter('status', '0');
+ $request->send();
+
+ $request = new HTTP_Request2('http://localhost/edit.php/2', HTTP_Request2::METHOD_POST);
+ $testcookiekey = md5($GLOBALS['dbname'].$GLOBALS['tableprefix']).'-login';
+ $userinfo = $this->us->getUser('1');
+ $testcookiepassword = $userinfo['password'];
+ $testcookievalue = '1:'.md5('dpuser'.$testcookiepassword);
+ $request->setCookieJar(true);
+ $request->addCookie($testcookiekey, $testcookievalue);
+ $request->addPostParameter('title', 'Test bookmark 2 for default privacy.');
+ $request->addPostParameter('address', 'http://www.testdefaultprivacyposts_add2.com');
+ $request->addPostParameter('submitted', '1');
+ $request->send();
+ $bm = $this->bs->getBookmark('2');
+ $this->assertEquals('2', $bm['bStatus']);
+
+ $request = new HTTP_Request2('http://localhost/importNetscape.php', HTTP_Request2::METHOD_POST);
+ $request->setCookieJar(true);
+ $request->addCookie($testcookiekey, $testcookievalue);
+ $request->addUpload('userfile', './data/BookmarkTest_netscapebookmarks.html');
+ $request->send();
+ $bm = $this->bs->getBookmark('3');
+ $this->assertEquals('2', $bm['bStatus']);
+ $bm = $this->bs->getBookmark('4');
+ $this->assertEquals('2', $bm['bStatus']);
+ $bm = $this->bs->getBookmark('5');
+ $this->assertEquals('2', $bm['bStatus']);
+
+ $request = new HTTP_Request2('http://localhost/import.php', HTTP_Request2::METHOD_POST);
+ $request->setCookieJar(true);
+ $request->addCookie($testcookiekey, $testcookievalue);
+ $request->addUpload('userfile', './data/BookmarkTest_deliciousbookmarks.xml');
+ $request->send();
+ $bm = $this->bs->getBookmark('6');
+ $this->assertEquals('2', $bm['bStatus']);
+ $bm = $this->bs->getBookmark('7');
+ $this->assertEquals('2', $bm['bStatus']);
+ $bm = $this->bs->getBookmark('8');
+ $this->assertEquals('2', $bm['bStatus']);
+
+ $request = new HTTP_Request2('http://localhost/bookmarks.php/dpuser?action=get', HTTP_Request2::METHOD_POST);
+ $request->setCookieJar(true);
+ $request->addCookie($testcookiekey, $testcookievalue);
+ $request->addPostParameter('submitted', '1');
+ $response = $request->send();
+ $response_body = $response->getBody();
+ $start = strpos($response_body, 'Privacy');
+ $end = strpos($response_body, 'referrer');
+ $length = $end - $start;
+ $response_body = substr($response_body, $start, $length);
+ $start = strpos($response_body, 'selected');
+ $start = $start - 3;
+ $length = 1;
+ $selected_privacy = substr($response_body, $start, $length);
+ $this->assertEquals('2', $selected_privacy);
+
+ $request = new HTTP_Request2('http://localhost/bookmarks.php/dpuser?action=add', HTTP_Request2::METHOD_POST);
+ $request->setCookieJar(true);
+ $request->addCookie($testcookiekey, $testcookievalue);
+ $response = $request->send();
+ $response_body = $response->getBody();
+ $start = strpos($response_body, 'Privacy');
+ $end = strpos($response_body, 'referrer');
+ $length = $end - $start;
+ $response_body = substr($response_body, $start, $length);
+ $start = strpos($response_body, 'selected');
+ $start = $start - 3;
+ $length = 1;
+ $selected_privacy = substr($response_body, $start, $length);
+ $this->assertEquals('2', $selected_privacy);
+ }//end function testDefaultPrivacy
+
+
+
+}
+
+
+if (PHPUnit_MAIN_METHOD == 'BookmarkTest::main') {
+ BookmarkTest::main();
+}
+?>
|