From 82b17be34671852feba16d77f75741e124d76073 Mon Sep 17 00:00:00 2001 From: cweiske Date: Mon, 23 Nov 2009 19:11:33 +0000 Subject: part of request #2830224: prepare API for short url service git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@570 b3834d28-1941-0410-a4f8-b48e95affb8f --- data/tables.sql | 1 + doc/UPGRADE.txt | 12 ++++++- scripts/create-testbookmarks.php | 2 +- src/SemanticScuttle/Service/Bookmark.php | 34 +++++++++++++++++--- tests/BookmarkTest.php | 54 +++++++++++++++++++++++++++++--- tests/Tag2TagTest.php | 12 +++---- tests/TestBase.php | 2 +- www/api/posts_add.php | 2 +- www/import.php | 2 +- www/importNetscape.php | 2 +- 10 files changed, 101 insertions(+), 22 deletions(-) diff --git a/data/tables.sql b/data/tables.sql index b028d17..c61c2f5 100644 --- a/data/tables.sql +++ b/data/tables.sql @@ -19,6 +19,7 @@ CREATE TABLE `sc_bookmarks` ( `bHash` varchar(32) NOT NULL default '', `bVotes` int(11) NOT NULL, `bVoting` int(11) NOT NULL, + `bShort` varchar(16) default NULL, PRIMARY KEY (`bId`), KEY `sc_bookmarks_usd` (`uId`,`bStatus`,`bDatetime`), KEY `sc_bookmarks_hui` (`bHash`,`uId`,`bId`), diff --git a/doc/UPGRADE.txt b/doc/UPGRADE.txt index 1aec5f4..3e23640 100644 --- a/doc/UPGRADE.txt +++ b/doc/UPGRADE.txt @@ -1,7 +1,17 @@ Upgrading SemanticScuttle from a previous version ================================================= -From versin 0.94 to 0.95.0 +From version 0.95 to 0.96 +------------------------- +Update your database: +- ALTER TABLE `sc_bookmarks` ADD `bShort` VARCHAR(16) NULL DEFAULT NULL; + +API: +The method signatures of addBookmark() and updateBookmark() +changed due to the addition of the $short parameter. + + +From version 0.94 to 0.95 -------------------------- The file structure completely changed in 0.95.0 compared to previous versions. We recommend that you start with a diff --git a/scripts/create-testbookmarks.php b/scripts/create-testbookmarks.php index b0d2756..d92a007 100644 --- a/scripts/create-testbookmarks.php +++ b/scripts/create-testbookmarks.php @@ -20,7 +20,7 @@ for ($nA = 0; $nA < 10; $nA++) { null, 0, array('unittest'), - null, false, false, + null, null, false, false, $uid ); } diff --git a/src/SemanticScuttle/Service/Bookmark.php b/src/SemanticScuttle/Service/Bookmark.php index f671fba..7fdcd2e 100644 --- a/src/SemanticScuttle/Service/Bookmark.php +++ b/src/SemanticScuttle/Service/Bookmark.php @@ -286,6 +286,7 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService * 1 - shared * 2 - private * @param array $tags Array of tags + * @param string $short Short URL name. May be null * @param string $date Date when the bookmark has been created * originally. Used in combination with * $fromImport. Has to be a strtotime() @@ -298,6 +299,7 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService */ public function addBookmark( $address, $title, $description, $privateNote, $status, $tags, + $short = null, $date = null, $fromApi = false, $fromImport = false, $sId = null ) { if ($sId === null) { @@ -327,6 +329,10 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService } $datetime = gmdate('Y-m-d H:i:s', $time); + if ($short === '') { + $short = null; + } + // Set up the SQL insert statement and execute it. $values = array( 'uId' => intval($sId), @@ -338,7 +344,8 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService 'bDescription' => $description, 'bPrivateNote' => $privateNote, 'bStatus' => intval($status), - 'bHash' => md5($address) + 'bHash' => md5($address), + 'bShort' => $short ); $sql = 'INSERT INTO '. $this->getTableName() @@ -402,6 +409,7 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService * 1 - shared * 2 - private * @param array $categories Array of tags + * @param string $short Short URL name. May be null. * @param string $date Date when the bookmark has been created * originally. Used in combination with * $fromImport. Has to be a strtotime() @@ -412,7 +420,7 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService */ public function updateBookmark( $bId, $address, $title, $description, $privateNote, $status, - $categories, $date = NULL, $fromApi = false + $categories, $short = null, $date = null, $fromApi = false ) { if (!is_numeric($bId)) { return false; @@ -431,15 +439,31 @@ class SemanticScuttle_Service_Bookmark extends SemanticScuttle_DbService $address = $this->normalize($address); - //check if a new address ($address) doesn't already exist for another bookmark from the same user + //check if a new address ($address) doesn't already exist + // for another bookmark from the same user $bookmark = $this->getBookmark($bId); - if($bookmark['bAddress'] != $address && $this->bookmarkExists($address, $bookmark['uId'])) { + if ($bookmark['bAddress'] != $address + && $this->bookmarkExists($address, $bookmark['uId']) + ) { message_die(GENERAL_ERROR, 'Could not update bookmark (URL already existing = '.$address.')', '', __LINE__, __FILE__); return false; } + if ($short === '') { + $short = null; + } + // Set up the SQL update statement and execute it. - $updates = array('bModified' => $moddatetime, 'bTitle' => $title, 'bAddress' => $address, 'bDescription' => $description, 'bPrivateNote' => $privateNote, 'bStatus' => $status, 'bHash' => md5($address)); + $updates = array( + 'bModified' => $moddatetime, + 'bTitle' => $title, + 'bAddress' => $address, + 'bDescription' => $description, + 'bPrivateNote' => $privateNote, + 'bStatus' => $status, + 'bHash' => md5($address), + 'bShort' => $short + ); if (!is_null($date)) { $datetime = gmdate('Y-m-d H:i:s', strtotime($date)); diff --git a/tests/BookmarkTest.php b/tests/BookmarkTest.php index 0b47bc2..741b6bf 100644 --- a/tests/BookmarkTest.php +++ b/tests/BookmarkTest.php @@ -69,6 +69,24 @@ class BookmarkTest extends TestBase $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; @@ -81,7 +99,7 @@ class BookmarkTest extends TestBase $bid = $bs->addBookmark( 'http://site1.com', $title, $desc, 'note', 0, array($tag1, $tag2), - null, false, false, $uid + null, null, false, false, $uid ); $bookmarks = $bs->getBookmarks(0, 1); @@ -108,12 +126,12 @@ class BookmarkTest extends TestBase $bs->addBookmark( 'http://site1.com', "title", "description", 'note', - 0, array('tag1'), null, false, false, + 0, array('tag1'), null, null, false, false, $uid ); $bs->addBookmark( "http://site1.com", "title2", "description2", 'note', - 0, array('tag2'), null, false, false, + 0, array('tag2'), null, null, false, false, $uid2 ); @@ -280,7 +298,7 @@ class BookmarkTest extends TestBase $this->bs->addBookmark( 'http://test', 'test', 'desc', 'note', 2,//private - array(), null, false, false, $uid + array(), null, null, false, false, $uid ); $this->assertEquals(0, $this->bs->countBookmarks($uid)); $this->assertEquals(0, $this->bs->countBookmarks($uid, 'public')); @@ -302,7 +320,7 @@ class BookmarkTest extends TestBase $this->bs->addBookmark( 'http://test', 'test', 'desc', 'note', 1,//shared - array(), null, false, false, $uid + array(), null, null, false, false, $uid ); $this->assertEquals(0, $this->bs->countBookmarks($uid)); $this->assertEquals(0, $this->bs->countBookmarks($uid, 'public')); @@ -734,6 +752,32 @@ class BookmarkTest extends TestBase $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']); + } + } diff --git a/tests/Tag2TagTest.php b/tests/Tag2TagTest.php index f888dd5..d1b6100 100644 --- a/tests/Tag2TagTest.php +++ b/tests/Tag2TagTest.php @@ -274,7 +274,7 @@ class Tag2TagTest extends TestBase $uid = $this->addUser(); $bs->addBookmark( "http://google.com", "title", "description", 'note', - 0, $tags, null, false, false, + 0, $tags, null, null, false, false, $uid ); $bookmark = $bs->getBookmarkByAddress("http://google.com"); @@ -312,17 +312,17 @@ class Tag2TagTest extends TestBase $tags = array('aa>bb>cc', 'dd'); $bs->addBookmark( "web1.com", "B1", "description", 'note', 0, - $tags, null, false, false, 1 + $tags, null, null, false, false, 1 ); $tags = array('bb>gg', 'ee>ff'); $bs->addBookmark( "web2.com", "B2", "description", 'note', 0, - $tags, null, false, false, 1 + $tags, null, null, false, false, 1 ); $tags = array('ee=ii'); $bs->addBookmark( "web3.com", "B3", "description", 'note', 0, - $tags, null, false, false, 1 + $tags, null, null, false, false, 1 ); // Query format: @@ -489,12 +489,12 @@ class Tag2TagTest extends TestBase // with classic tags (users 10 & 20) $bid1 = $bs->addBookmark( "http://site1.com", "title", "description", 'note', 0, - array('tag1', 'tag11', 'tag111'), null, false, false, + array('tag1', 'tag11', 'tag111'), null, null, false, false, $uid1 ); $bid2 = $bs->addBookmark( "http://site1.com", "title2", "description2", 'note', 0, - array('tag2', 'tag22', 'tag222'), null, false, false, + array('tag2', 'tag22', 'tag222'), null, null, false, false, $uid2 ); diff --git a/tests/TestBase.php b/tests/TestBase.php index 86519f3..05988a5 100644 --- a/tests/TestBase.php +++ b/tests/TestBase.php @@ -48,7 +48,7 @@ class TestBase extends PHPUnit_Framework_TestCase null, 0, array('unittest'), - null, false, false, + null, null, false, false, $user ); return $bid; diff --git a/www/api/posts_add.php b/www/api/posts_add.php index aff8771..441965c 100644 --- a/www/api/posts_add.php +++ b/www/api/posts_add.php @@ -73,7 +73,7 @@ if (is_null($url) || is_null($description)) { if ($bookmarkservice->bookmarkExists($url, $userservice->getCurrentUserId())) $added = false; else - $added = $bookmarkservice->addBookmark($url, $description, $extended, '', $status, $tags, $dt, true); + $added = $bookmarkservice->addBookmark($url, $description, $extended, '', $status, $tags, null, $dt, true); } // Set up the XML file and output the result. diff --git a/www/import.php b/www/import.php index 87f0a9a..0105626 100644 --- a/www/import.php +++ b/www/import.php @@ -100,7 +100,7 @@ function startElement($parser, $name, $attrs) { $bDatetime = gmdate('Y-m-d H:i:s'); } - if ($bookmarkservice->addBookmark($bAddress, $bTitle, $bDescription, '', $status, $tags, $bDatetime, true, true)) + if ($bookmarkservice->addBookmark($bAddress, $bTitle, $bDescription, '', $status, $tags, null, $bDatetime, true, true)) $tplVars['msg'] = T_('Bookmark imported.'); else $tplVars['error'] = T_('There was an error saving your bookmark. Please try again or contact the administrator.'); diff --git a/www/importNetscape.php b/www/importNetscape.php index a941145..dab1ba2 100644 --- a/www/importNetscape.php +++ b/www/importNetscape.php @@ -102,7 +102,7 @@ if ($userservice->isLoggedOn() && sizeof($_FILES) > 0 && $_FILES['userfile']['si $bDatetime = gmdate('Y-m-d H:i:s'); } - if ($bookmarkservice->addBookmark($bAddress, $bTitle, $bDescription, $bPrivateNote, $status, $bCategories, $bDatetime, false, true)) { + if ($bookmarkservice->addBookmark($bAddress, $bTitle, $bDescription, $bPrivateNote, $status, $bCategories, null, $bDatetime, false, true)) { $countImportedBookmarks++; } else { $tplVars['error'] = T_('There was an error saving your bookmark. Please try again or contact the administrator.'); -- cgit v1.2.3