diff options
author | Alessandro Cosentino <cosenal@gmail.com> | 2012-07-08 14:35:01 -0400 |
---|---|---|
committer | Alessandro Cosentino <cosenal@gmail.com> | 2012-07-08 14:35:01 -0400 |
commit | 0b4106fab98ab3018601b2d6d51ffb36ffcbc411 (patch) | |
tree | c770ce0d34aa4391df716759c0f47cac1a60ec4a | |
parent | 3eab4c8e901166e94953d430d3cb0f7fd5d79c39 (diff) | |
parent | 70537725190ed54a4c3cc6a1d603cf3d1582a117 (diff) |
merging merge-requests7
-rw-r--r-- | ajax/addfeedfolder.php | 17 | ||||
-rw-r--r-- | ajax/createfeed.php (renamed from ajax/newfeed.php) | 7 | ||||
-rw-r--r-- | ajax/createfolder.php | 13 | ||||
-rw-r--r-- | ajax/deletefolder.php | 4 | ||||
-rw-r--r-- | css/news.css | 22 | ||||
-rw-r--r-- | index.php | 10 | ||||
-rw-r--r-- | js/news.js | 127 | ||||
-rw-r--r-- | lib/foldermapper.php | 68 | ||||
-rw-r--r-- | templates/part.addfeedfolder.php | 37 | ||||
-rw-r--r-- | templates/part.feeds.php | 3 |
10 files changed, 203 insertions, 105 deletions
diff --git a/ajax/addfeedfolder.php b/ajax/addfeedfolder.php index 89785cced..e643c861d 100644 --- a/ajax/addfeedfolder.php +++ b/ajax/addfeedfolder.php @@ -1,7 +1,22 @@ <?php - + OCP\JSON::checkLoggedIn(); OCP\JSON::checkAppEnabled('news'); +$foldermapper = new OC_News_FolderMapper(OCP\USER::getUser()); + +$allfeeds = $foldermapper->populate('All Feeds', 0); + +if ($allfeeds) { + $feedid = isset( $_GET['feedid'] ) ? $_GET['feedid'] : null; + if ($feedid == null) { + + } +} +else { + $feedid = 0; +} + $output = new OCP\Template("news", "part.addfeedfolder"); +$output -> assign('allfeeds', $allfeeds); $output -> printpage();
\ No newline at end of file diff --git a/ajax/newfeed.php b/ajax/createfeed.php index 2d85bcdc8..e5c0396a6 100644 --- a/ajax/newfeed.php +++ b/ajax/createfeed.php @@ -4,10 +4,10 @@ * * @author Alessandro Cosentino * Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com> -* +* * This file is licensed under the Affero General Public License version 3 or later. * See the COPYING-README file -* +* */ // Check if we are a user @@ -18,10 +18,11 @@ OCP\JSON::callCheck(); $userid = OCP\USER::getUser(); $feedurl = trim($_POST['feedurl']); +$folderid = trim($_POST['folderid']); $feed = OC_News_Utils::fetch($feedurl); $feedmapper = new OC_News_FeedMapper(); -$feedid = $feedmapper->save($feed, 0); +$feedid = $feedmapper->save($feed, $folderid); $l = OC_L10N::get('news'); diff --git a/ajax/createfolder.php b/ajax/createfolder.php index cbb3d89aa..b5f624604 100644 --- a/ajax/createfolder.php +++ b/ajax/createfolder.php @@ -4,10 +4,10 @@ * * @author Alessandro Cosentino * Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com> -* +* * This file is licensed under the Affero General Public License version 3 or later. * See the COPYING-README file -* +* */ // Check if we are a user @@ -18,8 +18,15 @@ OCP\JSON::callCheck(); $userid = OCP\USER::getUser(); $name = trim($_POST['name']); -$folder = new OC_News_Folder($name); +$parentid = trim($_POST['parentid']); + $foldermapper = new OC_News_FolderMapper($userid); + +if($parentid != 0) + $folder = new OC_News_Folder($name, NULL, $foldermapper->find($parentid)); +else + $folder = new OC_News_Folder($name); + $folderid = $foldermapper->save($folder); $l = OC_L10N::get('news'); diff --git a/ajax/deletefolder.php b/ajax/deletefolder.php index f11a1975f..bf975c6c3 100644 --- a/ajax/deletefolder.php +++ b/ajax/deletefolder.php @@ -4,10 +4,10 @@ * * @author Alessandro Cosentino * Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com> -* +* * This file is licensed under the Affero General Public License version 3 or later. * See the COPYING-README file -* +* */ // Check if we are a user diff --git a/css/news.css b/css/news.css index 6ce1fb4d6..e49a1ef0a 100644 --- a/css/news.css +++ b/css/news.css @@ -1,22 +1,28 @@ +li { padding-right: 0px !important; } + +.accordion .title { background: #DCDCDC; font-size: 12px; border-bottom:1px solid #ccc; font-weight:bold;} +.collapsable { background: url('%webroot%/core/img/places/folder.svg') no-repeat left center; padding-left: 20px;} +.news_input { float:left; font-size:12px; padding:4px 2px; border:solid 1px #aacfe4; width:200px; } +.svg { border: inherit; background: inherit; } + #leftcontent { top: 3.5em !important; padding: 0; margin: 0; } #rightcontent { top: 3.5em !important; padding-top: 5px; } #feeds { background: #fff; width: 20em; left: 12.5em; top: 3.7em; bottom:3em; position: fixed; overflow: auto; padding: 0; margin: 0; } /* #feeds a { height: 23px; display: block; margin: 0 0 0 0; padding: 0 0 0 25px; } */ #bottomcontrols { padding: 0; bottom:0px; height:2.8em; width: 20em; margin:0; background:#eee; border-top:1px solid #ccc; position:fixed; -moz-box-shadow: 0 -3px 3px -3px #000; -webkit-box-shadow: 0 -3px 3px -3px #000; box-shadow: 0 -3px 3px -3px #000;} -#feeds_delete { position: absolute; right: 0px; background-image: url('%webroot%/core/img/actions/delete.svg'); background-repeat: no-repeat; } -.collapsable { background: url('%webroot%/core/img/filetypes/folder.png') no-repeat left center; padding-left: 20px;} - -#feeds_edit { position: relative; float:right; background:url('%webroot%/core/img/actions/rename.svg') no-repeat center; } - -.svg { border: inherit; background: inherit; } - -.news_input { float:left; font-size:12px; padding:4px 2px; border:solid 1px #aacfe4; width:200px; } +#feeds_delete { position: absolute; right: 0px; background: url('%webroot%/core/img/actions/delete.svg') no-repeat center; display: inline; } +#feeds_edit { position: absolute; right: 1.6em; background: url('%webroot%/core/img/actions/rename.svg') no-repeat center; display: inline; } +/* #dropdownBtn { background: url('%webroot%/core/img/actions/triangle-s.svg') no-repeat right center; } */ +#dropdownBtn { width: 9em; padding-right:20px; background: url('%webroot%/core/img/actions/triangle-s.svg') no-repeat right center; } ul.controls li { float: left; } .accordion .title_unread { background: #DCDCDC; font-size: 12px; border-bottom:1px solid #ccc; font-weight:bold;} .accordion .title_read { background: #DCDCDC; font-size: 12px; border-bottom:1px solid #ccc;} +ul.dropdown { position: absolute; display: none; background-color: #FEFEFE; + box-shadow: 0px 0px 10px rgb(0, 0, 0); border-radius: 0.5em 0.5em 0.5em 0.5em; } + li.folder_list:hover { color: rgb(0, 0, 0) !important; background: none !important; } li.feeds_list:hover { background: none repeat scroll 0% 0% rgb(221, 221, 221) !important; } div.collapsable:hover { background-color: rgb(221, 221, 221); } @@ -5,10 +5,10 @@ * * @author Alessandro Cosentino * Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com> -* +* * This file is licensed under the Affero General Public License version 3 or later. * See the COPYING-README file -* +* */ // Check if we are a user @@ -22,14 +22,14 @@ OCP\Util::addStyle('news','news'); $foldermapper = new OC_News_FolderMapper(OCP\USER::getUser()); -$allfeeds = $foldermapper->root(); +$allfeeds = $foldermapper->populate('All Feeds', 0); if ($allfeeds) { $feedid = isset( $_GET['feedid'] ) ? $_GET['feedid'] : null; if ($feedid == null) { - + } -} +} else { $feedid = 0; } diff --git a/js/news.js b/js/news.js index 25a6d6f34..2ad56eacd 100644 --- a/js/news.js +++ b/js/news.js @@ -1,7 +1,24 @@ News={ - UI:{ + DropDownMenu: { + show:function(button){ + var list = $(button).parent().find('ul.dropdown'); + if (list.css('display') == 'none') + list.slideDown('fast').show(); + else + list.slideUp('fast'); + + return false; + }, + selectItem:function(item, folderid){ + var parent = $(item).parent().parent(); + parent.find('#dropdownBtn').text($(item).text()); + parent.find(':input[name="folderid"]').val(folderid); + parent.find('ul.dropdown').slideUp('fast'); + } + }, + UI: { overview:function(){ - if($('#addfeedfolder_dialog').dialog('isOpen') == true){ + if($('#addfeedfolder_dialog').dialog('isOpen') == true){ $('#addfeedfolder_dialog').dialog('moveToTop'); }else{ $('#dialog_holder').load(OC.filePath('news', 'ajax', 'addfeedfolder.php'), function(jsondata){ @@ -19,28 +36,30 @@ News={ } return false; } - }, + }, Folder: { submit:function(button){ - var displayname = $("#folder_add_name").val().trim(); - - if(displayname.length == 0) { - OC.dialogs.alert(t('news', 'Displayname cannot be empty.'), t('news', 'Error')); - return false; - } - - var url; - url = OC.filePath('news', 'ajax', 'createfolder.php'); - - $.post(url, { name: displayname }, - function(jsondata){ - if(jsondata.status == 'success'){ - //$(button).closest('tr').prev().html(jsondata.page).show().next().remove(); - OC.dialogs.alert(jsondata.data.message, t('news', 'Success!')); - } else { - OC.dialogs.alert(jsondata.data.message, t('news', 'Error')); - } - }); + var displayname = $("#folder_add_name").val().trim(); + + if(displayname.length == 0) { + OC.dialogs.alert(t('news', 'Displayname cannot be empty.'), t('news', 'Error')); + return false; + } + + var folderid = $('#folder_parentfolder').find(':input[name="folderid"]').val(); + + var url; + url = OC.filePath('news', 'ajax', 'createfolder.php'); + + $.post(url, { name: displayname, parentid: folderid }, + function(jsondata){ + if(jsondata.status == 'success'){ + //$(button).closest('tr').prev().html(jsondata.page).show().next().remove(); + OC.dialogs.alert(jsondata.data.message, t('news', 'Success!')); + } else { + OC.dialogs.alert(jsondata.data.message, t('news', 'Error')); + } + }); }, delete:function(folderid) { $('#feeds_delete').tipsy('hide'); @@ -62,25 +81,27 @@ News={ Feed: { id:'', submit:function(button){ - var feedurl = $("#feed_add_url").val().trim(); - - if(feedurl.length == 0) { - OC.dialogs.alert(t('news', 'URL cannot be empty.'), t('news', 'Error')); - return false; - } - - var url; - url = OC.filePath('news', 'ajax', 'newfeed.php'); - - $.post(url, { feedurl: feedurl }, - function(jsondata){ - if(jsondata.status == 'success'){ - //$(button).closest('tr').prev().html(jsondata.page).show().next().remove(); - OC.dialogs.alert(jsondata.data.message, t('news', 'Success!')); - } else { - OC.dialogs.alert(jsondata.data.message, t('news', 'Error')); - } - }); + var feedurl = $("#feed_add_url").val().trim(); + + if(feedurl.length == 0) { + OC.dialogs.alert(t('news', 'URL cannot be empty.'), t('news', 'Error')); + return false; + } + + var folderid = $('#feed_parentfolder').find(':input[name="folderid"]').val(); + + var url; + url = OC.filePath('news', 'ajax', 'createfeed.php'); + + $.post(url, { feedurl: feedurl, folderid: folderid }, + function(jsondata){ + if(jsondata.status == 'success'){ + //$(button).closest('tr').prev().html(jsondata.page).show().next().remove(); + OC.dialogs.alert(jsondata.data.message, t('news', 'Success!')); + } else { + OC.dialogs.alert(jsondata.data.message, t('news', 'Error')); + } + }); }, delete:function(feedid) { $('#feeds_delete').tipsy('hide'); @@ -111,15 +132,15 @@ News={ } } -$(document).ready(function(){ - +$(document).ready(function(){ + $('#addfeedfolder').click(News.UI.overview); - - $('.collapsable').click(function(){ + + $('.collapsable').click(function(){ $(this).parent().children().toggle(); $(this).toggle(); }); - + $('.accordion .title_unread').click(function() { $(this).next().toggle(); return false; @@ -133,6 +154,16 @@ $(document).ready(function(){ $('.feeds_list').hover(function() { $(this).find('#feeds_delete').toggle(); + + var list = $('.collapsable,.feeds_list').hover(function() { + var elem = $(this).find('#feeds_delete,#feeds_edit'); + if(elem.css('display') == 'none') + elem.css('display', 'inline'); + else + elem.css('display', 'none'); return false; - }).find('#feeds_delete').hide(); -});
\ No newline at end of file + }); + + list.find('#feeds_delete').hide(); + list.find('#feeds_edit').hide(); +}); diff --git a/lib/foldermapper.php b/lib/foldermapper.php index 79115ec56..45dc53c42 100644 --- a/lib/foldermapper.php +++ b/lib/foldermapper.php @@ -4,10 +4,10 @@ * * @author Alessandro Cosentino * Copyright (c) 2012 - Alessandro Cosentino <cosenal@gmail.com> -* +* * This file is licensed under the Affero General Public License version 3 or later. * See the COPYING-README file -* +* */ /** @@ -16,7 +16,7 @@ class OC_News_FolderMapper { const tableName = '*PREFIX*news_folders'; - + private $userid; public function __construct($userid = null){ @@ -25,51 +25,55 @@ class OC_News_FolderMapper { } $userid = OCP\USER::getUser(); } - - public function root(){ - $root = new OC_News_Folder('All feeds'); - $stmt = OCP\DB::prepare('SELECT * - FROM ' . self::tableName . + + /** + * @brief Create a folder and populate with children from the database + * @param id The id of the folder. + * @param name The name of the folder. + * @returns an instance of OC_News_Folder + */ + public function populate($name, $id){ + $root = new OC_News_Folder($name, $id); + $stmt = OCP\DB::prepare('SELECT * + FROM ' . self::tableName . ' WHERE user_id = ? AND parent_id = ?'); - $result = $stmt->execute(array($this->userid, 0)); - + $result = $stmt->execute(array($this->userid, $id)); + while( $row = $result->fetchRow()){ - $child = new OC_News_Folder($row['name'], $row['id']); + $child = OC_News_FolderMapper::populate($row['name'], $row['id']); $root->addChild($child); } - + $feedmapper = new OC_News_FeedMapper(); - $feeds = $feedmapper->findByFolderId(0); + $feeds = $feedmapper->findByFolderId($id); foreach ($feeds as $feed){ $root->addChild($feed); } - + return $root; } - + /** * @brief Retrieve a folder from the database * @param id The id of the folder in the database table. * @returns an instance of OC_News_Folder */ public function find($id){ - $stmt = OCP\DB::prepare('SELECT * - FROM ' . self::tableName . + $stmt = OCP\DB::prepare('SELECT * + FROM ' . self::tableName . ' WHERE user_id = ? AND id = ?'); - $result = $stmt->execute(array($this->userid, 0)); - - while( $row = $result->fetchRow()){ - $child = new OC_News_Folder($row['name'], $row['id']); - $root->addChild($child); - } + $result = $stmt->execute(array($this->userid, $id)); - return $root; + $row = $result->fetchRow(); + $folder = new OC_News_Folder($row['name'], $row['id']); + + return $folder; } /** * @brief Retrieve a feed and all its items from the database * @param id The id of the feed in the database table. - * @returns + * @returns */ public function findWithItems($id){ $stmt = OCP\DB::prepare('SELECT * FROM ' . self::tableName . ' WHERE id = ?'); @@ -82,7 +86,7 @@ class OC_News_FolderMapper { $itemMapper = new OC_News_ItemMapper($feed); $items = $itemMapper->findAll(); $feed->setItems($items); - + return $feed; } @@ -97,7 +101,7 @@ class OC_News_FolderMapper { '(name, parent_id, user_id) VALUES (?, ?, ?) '); - + $name = $folder->getName(); if(empty($name)) { @@ -118,12 +122,12 @@ class OC_News_FolderMapper { $folder->setId($folderid); return $folderid; } - + public function delete(OC_News_Folder $folder){ $folderid = $folder->getId(); return deleteById(folderid); } - + //TODO: replace it with a DELETE INNER JOIN operation public function deleteById($folderid){ if ($folderid == null){ @@ -133,12 +137,12 @@ class OC_News_FolderMapper { $stmt = OCP\DB::prepare('DELETE FROM ' . self::tableName .' WHERE id = ?'); $result = $stmt->execute(array($folderid)); - + $feedMapper = new OC_News_FeedMapper(); //TODO: handle the value that the execute returns $feedMapper->deleteAll($folderid); - + return true; } - + }
\ No newline at end of file diff --git a/templates/part.addfeedfolder.php b/templates/part.addfeedfolder.php index 7f6a8f6a7..6ace0ddfa 100644 --- a/templates/part.addfeedfolder.php +++ b/templates/part.addfeedfolder.php @@ -1,15 +1,48 @@ + +<?php + function print_folder(OC_News_Folder $folder, $depth){ + echo '<li onclick="News.DropDownMenu.selectItem(this, ' . $folder->getId() . ')">' . strtoupper($folder->getName()) . '</li>'; + $children = $folder->getChildren(); + foreach($children as $child) { + if ($child instanceOf OC_News_Folder){ + print_folder($child, $depth+1); + } + } + } +?> + <div id="addfeedfolder_dialog" title="<?php echo $l->t("Add Feed/Folder"); ?>"> <table width="100%" style="border: 0;"> <tr> <td>Add new feed</td> - <td>...where?...</td> + <td> + <div id="feed_parentfolder"> + <button id="dropdownBtn" onclick="News.DropDownMenu.show(this)"> + <?php echo $l->t('ALL FEEDS'); ?> + </button> + <input type="hidden" name="folderid" value="0" /> + <ul class="dropdown"> + <?php print_folder($_['allfeeds'], 0); ?> + </ul> + </div> + </td> </tr> <tr> <td><input type="text" id="feed_add_url" placeholder="<?php echo $l->t('URL'); ?>" class="news_input" /></td> <td><input type="submit" value="<?php echo $l->t('Add feed'); ?>" onclick="News.Feed.submit(this)" id="feed_add_submit" /></td> </tr> <td>Add new folder</td> - <td>...where?...</td> + <td> + <div id="folder_parentfolder"> + <button id="dropdownBtn" onclick="News.DropDownMenu.show(this)"> + <?php echo $l->t('ALL FEEDS'); ?> + </button> + <input type="hidden" name="folderid" value="0" /> + <ul class="dropdown"> + <?php print_folder($_['allfeeds'], 0); ?> + </ul> + </div> + </td> </tr> <tr> <td><input type="text" id="folder_add_name" placeholder="<?php echo $l->t('Folder name'); ?>" class="news_input" /></td> diff --git a/templates/part.feeds.php b/templates/part.feeds.php index e3266bed6..3fbf4c08d 100644 --- a/templates/part.feeds.php +++ b/templates/part.feeds.php @@ -5,6 +5,7 @@ echo '<ul style="margin-left:' . 10*$depth . 'px;"> <li class="folder_list" >' . '<div class="collapsable" >' . strtoupper($folder->getName()) . ( ($depth != 0) ? '<button class="svg action" id="feeds_delete" onClick="(News.Folder.delete(' . $folder->getId(). '))" title="' . $l->t('Delete folder') . '">' : '' ) . '</button>' . + '<button class="svg action" id="feeds_edit" title="' . $l->t('Edit feed') . '"></button>' . '</div>'; echo '<ul>'; $children = $folder->getChildren(); @@ -16,7 +17,7 @@ echo '<li class="feeds_list"><a href="' . OCP\Util::linkTo('news', 'index.php'). '?feedid=' . $child->getId() . '">' . $child->getTitle() .'</a>'; echo '<button class="svg action" id="feeds_delete" onClick="(News.Feed.delete(' . $child->getId(). '))" title="' . $l->t('Delete feed') . '"></button>'; -// echo '<button class="svg action" id="feeds_edit" title="' . $l->t('Edit feed') . '"></button>'; + echo '<button class="svg action" id="feeds_edit" title="' . $l->t('Edit feed') . '"></button>'; echo '</li>'; } else { |