summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2013-03-17 21:34:14 +0100
committerGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2013-03-17 21:34:14 +0100
commitcaf8d18c1d887f0c918ba181d1c48d9e08af6ea0 (patch)
treeb6d778c7c852432ca060470c41c44d7db7b1cab2
parentdbb0de4e368b814f8cab9e7e1a1462a2839471dc (diff)
Début fix bug #22 : possibilité d'ajouter des notes à des articles et les mettre ou non en public
-rwxr-xr-xapp/controllers/entryController.php93
-rw-r--r--app/views/entry/note.phtml63
-rw-r--r--app/views/index/index.phtml22
-rw-r--r--public/theme/base.css39
-rw-r--r--public/theme/icons/note.svg30
-rw-r--r--public/theme/icons/note_empty.svg30
6 files changed, 253 insertions, 24 deletions
diff --git a/app/controllers/entryController.php b/app/controllers/entryController.php
index b772e1703..f5277fa6d 100755
--- a/app/controllers/entryController.php
+++ b/app/controllers/entryController.php
@@ -8,7 +8,8 @@ class entryController extends ActionController {
array ('error' => array ('Vous n\'avez pas le droit d\'accéder à cette page'))
);
}
-
+
+ $this->redirect = false;
$ajax = Request::param ('ajax');
if ($ajax) {
$this->view->_useLayout (false);
@@ -16,7 +17,7 @@ class entryController extends ActionController {
}
public function lastAction () {
$ajax = Request::param ('ajax');
- if (!$ajax) {
+ if (!$ajax && $this->redirect) {
Request::forward (array (
'c' => 'index',
'a' => 'index',
@@ -28,17 +29,19 @@ class entryController extends ActionController {
}
public function readAction () {
+ $this->redirect = true;
+
$id = Request::param ('id');
$is_read = Request::param ('is_read');
$get = Request::param ('get');
$dateMax = Request::param ('dateMax', time ());
-
+
if ($is_read) {
$is_read = true;
} else {
$is_read = false;
}
-
+
$entryDAO = new EntryDAO ();
if ($id == false) {
if (!$get) {
@@ -55,7 +58,7 @@ class entryController extends ActionController {
$this->params = array ('get' => 'f_' . $get);
}
}
-
+
// notif
$notif = array (
'type' => 'good',
@@ -66,28 +69,98 @@ class entryController extends ActionController {
$entryDAO->updateEntry ($id, array ('is_read' => $is_read));
}
}
-
+
public function bookmarkAction () {
+ $this->redirect = true;
+
$id = Request::param ('id');
$is_fav = Request::param ('is_favorite');
-
+
if ($is_fav) {
$is_fav = true;
} else {
$is_fav = false;
}
-
+
$entryDAO = new EntryDAO ();
if ($id != false) {
$entry = $entryDAO->searchById ($id);
-
+
if ($entry != false) {
$values = array (
'is_favorite' => $is_fav,
);
-
+
$entryDAO->updateEntry ($entry->id (), $values);
}
}
}
+
+ public function noteAction () {
+ $not_found = false;
+ $entryDAO = new EntryDAO ();
+ $catDAO = new CategoryDAO ();
+
+ $id = Request::param ('id');
+ if ($id) {
+ $entry = $entryDAO->searchById ($id);
+
+ if ($entry) {
+ $feed = $entry->feed (true);
+
+ if (Request::isPost ()) {
+ $note = htmlspecialchars (Request::param ('note', ''));
+ $public = Request::param ('public', 'no');
+ if ($public == 'yes') {
+ $public = true;
+ } else {
+ $public = false;
+ }
+
+ $values = array (
+ 'annotation' => $note,
+ 'is_public' => $public
+ );
+
+ if ($entryDAO->updateEntry ($id, $values)) {
+ $notif = array (
+ 'type' => 'good',
+ 'content' => 'Modifications enregistrées'
+ );
+ } else {
+ $notif = array (
+ 'type' => 'bad',
+ 'content' => 'Une erreur est survenue'
+ );
+ }
+ Session::_param ('notification', $notif);
+ Request::forward (array (
+ 'c' => 'entry',
+ 'a' => 'note',
+ 'params' => array (
+ 'id' => $id
+ )
+ ), true);
+ }
+ } else {
+ $not_found = true;
+ }
+ } else {
+ $not_found = true;
+ }
+
+ if ($not_found) {
+ Error::error (
+ 404,
+ array ('error' => array ('La page que vous cherchez n\'existe pas'))
+ );
+ } else {
+ $this->view->entry = $entry;
+ $this->view->cat_aside = $catDAO->listCategories ();
+ $this->view->nb_favorites = $entryDAO->countFavorites ();
+ $this->view->nb_total = $entryDAO->count ();
+ $this->view->get_c = $feed->category ();
+ $this->view->get_f = $feed->id ();
+ }
+ }
}
diff --git a/app/views/entry/note.phtml b/app/views/entry/note.phtml
new file mode 100644
index 000000000..fe330f9b4
--- /dev/null
+++ b/app/views/entry/note.phtml
@@ -0,0 +1,63 @@
+<?php $this->partial ('aside_flux'); ?>
+
+<div class="post">
+ <form method="post" action="<?php echo _url ('entry', 'note', 'id', $this->entry->id ()); ?>">
+ <legend>Note</legend>
+
+ <div class="form-group">
+ <label class="group-name" for="note">Ajouter une note</label>
+ <div class="group-controls">
+ <textarea rows="5" cols="80" name="note" id="note"><?php echo $this->entry->notes (); ?></textarea>
+ </div>
+ </div>
+ <div class="form-group">
+ <label class="group-name" for="public_note">Article public ?</label>
+ <div class="group-controls">
+ <label class="checkbox" for="public">
+ <input type="checkbox" name="public" id="public" value="yes"<?php echo $this->entry->isPublic () ? ' checked="checked"' : ''; ?> /> Oui
+ </label>
+ </div>
+ </div>
+
+ <div class="form-group form-actions">
+ <div class="group-controls">
+ <button type="submit" class="btn btn-important">Sauvegarder</button>
+ <button type="reset" class="btn">Annuler</button>
+ </div>
+ </div>
+
+ <legend>Article</legend>
+
+ <div class="form-group">
+ <label class="group-name">Titre</label>
+ <div class="group-controls">
+ <span class="control"><a href="<?php echo $this->entry->link (); ?>"><?php echo $this->entry->title (); ?></a></span>
+ </div>
+ </div>
+
+ <?php
+ $author = $this->entry->author ();
+ if ($author) { ?>
+ <div class="form-group">
+ <label class="group-name">Auteur</label>
+ <div class="group-controls">
+ <span class="control"><?php echo $author; ?></span>
+ </div>
+ </div>
+ <?php } ?>
+
+ <div class="form-group">
+ <label class="group-name">Date de publication</label>
+ <div class="group-controls">
+ <span class="control"><?php echo $this->entry->date (); ?></span>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="group-name">Article</label>
+ <div class="group-controls">
+ <span class="control"><?php echo $this->entry->content (); ?></span>
+ </div>
+ </div>
+ </form>
+</div>
diff --git a/app/views/index/index.phtml b/app/views/index/index.phtml
index 0db9dac5b..a7ed174c2 100644
--- a/app/views/index/index.phtml
+++ b/app/views/index/index.phtml
@@ -26,21 +26,29 @@ if (isset ($this->entryPaginator)) {
<div class="flux<?php echo !$item->isRead () ? ' not_read' : ''; ?><?php echo $item->isFavorite () ? ' favorite' : ''; ?>" id="flux_<?php echo $item->id (); ?>">
<ul class="flux_header">
+ <?php if (!login_is_conf ($this->conf) || is_logged ()) { ?>
<li class="item manage">
- <?php if (!login_is_conf ($this->conf) || is_logged ()) { ?>
<?php if (!$item->isRead ()) { ?>
- <a class="read" href="<?php echo Url::display (array ('c' => 'entry', 'a' => 'read', 'params' => array ('id' => $item->id (), 'is_read' => 1))); ?>">&nbsp;</a><!--
+ <a class="read" href="<?php echo _url ('entry', 'read', 'id', $item->id (), 'is_read', 1); ?>">&nbsp;</a>
<?php } else { ?>
- <a class="read" href="<?php echo Url::display (array ('c' => 'entry', 'a' => 'read', 'params' => array ('id' => $item->id (), 'is_read' => 0))); ?>">&nbsp;</a><!--
+ <a class="read" href="<?php echo _url ('entry', 'read', 'id', $item->id (), 'is_read', 0); ?>">&nbsp;</a>
<?php } ?>
<?php if (!$item->isFavorite ()) { ?>
- --><a class="bookmark" href="<?php echo Url::display (array ('c' => 'entry', 'a' => 'bookmark', 'params' => array ('id' => $item->id (), 'is_favorite' => 1))); ?>">&nbsp;</a>
+ <a class="bookmark" href="<?php echo _url ('entry', 'bookmark', 'id', $item->id (), 'is_favorite', 1); ?>">&nbsp;</a>
<?php } else { ?>
- --><a class="bookmark" href="<?php echo Url::display (array ('c' => 'entry', 'a' => 'bookmark', 'params' => array ('id' => $item->id (), 'is_favorite' => 0))); ?>">&nbsp;</a>
- <?php } ?>
+ <a class="bookmark" href="<?php echo _url ('entry', 'bookmark', 'id', $item->id (), 'is_favorite', 0); ?>">&nbsp;</a>
<?php } ?>
+
+ <a class="note" href="<?php echo _url ('entry', 'note', 'id', $item->id ()); ?>">
+ <?php if ($item->notes () != '') { ?>
+ <i class="icon i_note"></i>
+ <?php } else { ?>
+ <i class="icon i_note_empty"></i>
+ <?php } ?>
+ </a>
</li>
+ <?php } ?>
<?php $feed = $item->feed (true); ?>
<li class="item website"><a target="_blank" href="<?php echo $feed->website (); ?>"><img src="http://www.google.com/s2/favicons?domain=<?php echo get_domain ($feed->website ()); ?>" alt="" /><span> <?php echo $feed->name (); ?></span></a></li>
<li class="item title"><h1><?php echo $item->title (); ?></h1></li>
@@ -62,7 +70,7 @@ if (isset ($this->entryPaginator)) {
<div class="alert">
<span class="alert-head">Il n'y a aucun flux à afficher.</span>
<?php if (Session::param ('mode', 'all') == 'not_read') { ?>
- <a class="print_all" href="<?php echo Url::display (array ('a' => 'changeMode', 'params' => array ('mode' => 'all'))); ?>">Afficher tous les articles ?</a>
+ <a class="print_all" href="<?php echo _url ('index', 'changeMode', 'mode', 'all'); ?>">Afficher tous les articles ?</a>
<?php } ?>
</div>
<?php } ?>
diff --git a/public/theme/base.css b/public/theme/base.css
index 6f9ebfb06..c59ce1187 100644
--- a/public/theme/base.css
+++ b/public/theme/base.css
@@ -66,7 +66,7 @@ label {
font-size: 14px;
line-height: 25px;
}
-input, select {
+input, select, textarea {
display: inline-block;
min-height: 25px;
padding: 5px;
@@ -83,7 +83,7 @@ input, select {
width: 15px;
min-height: 15px;
}
- input:focus {
+ input:focus, select:focus, textarea:focus {
color: #0062BE;
border-color: #33BBFF;
box-shadow: 0 2px 2px #DDDDFF inset;
@@ -391,10 +391,10 @@ input, select {
/* ICONES */
.icon {
display: inline-block;
- width: 14px;
- height: 14px;
+ width: 16px;
+ height: 16px;
vertical-align: middle;
- line-height: 14px;
+ line-height: 16px;
background: center center no-repeat;
}
.icon.i_refresh {
@@ -403,6 +403,15 @@ input, select {
.icon.i_bookmark {
background-image: url("icons/starred.svg");
}
+ .icon.i_not_bookmark {
+ background-image: url("icons/unstarred.svg");
+ }
+ .icon.i_read {
+ background-image: url("icons/read.svg");
+ }
+ .icon.i_unread {
+ background-image: url("icons/unread.svg");
+ }
.icon.i_all {
background-image: url("icons/all.svg");
}
@@ -436,6 +445,12 @@ input, select {
.icon.i_help {
background-image: url("icons/help.svg");
}
+ .icon.i_note {
+ background-image: url("icons/note.svg");
+ }
+ .icon.i_note_empty {
+ background-image: url("icons/note_empty.svg");
+ }
/* STRUCTURE */
.header {
@@ -541,7 +556,7 @@ input, select {
.categories .feeds .item .feed {
display: inline-block;
margin: 0;
- width: 170px;
+ width: 165px;
line-height: 35px;
font-size: 90%;
vertical-align: middle;
@@ -630,7 +645,11 @@ input, select {
vertical-align: middle;
}
.flux_header .item.manage {
- width: 50px;
+ width: 75px;
+ white-space: nowrap;
+ font-size: 0px;
+ vertical-align: middle;
+ text-align: center;
}
.flux_header .item.manage .read {
display: inline-block;
@@ -658,6 +677,12 @@ input, select {
.flux.favorite .flux_header .item.manage .bookmark {
background: url("icons/starred.svg") center center no-repeat;
}
+ .flux_header .item.manage .note {
+ display: inline-block;
+ width: 25px;
+ height: 25px;
+ vertical-align: middle;
+ }
.flux_header .item.website {
width: 200px;
overflow: hidden;
diff --git a/public/theme/icons/note.svg b/public/theme/icons/note.svg
new file mode 100644
index 000000000..117b999f7
--- /dev/null
+++ b/public/theme/icons/note.svg
@@ -0,0 +1,30 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:svg='http://www.w3.org/2000/svg' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' id='svg7384' xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' version='1.1' inkscape:version='0.47 r22583' height='16' sodipodi:docname='user-available-symbolic.svg' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns='http://www.w3.org/2000/svg' width='16'>
+ <metadata id='metadata90'>
+ <rdf:RDF>
+ <cc:Work rdf:about=''>
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource='http://purl.org/dc/dcmitype/StillImage'/>
+ <dc:title>Gnome Symbolic Icon Theme</dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview inkscape:cy='-71.46449' inkscape:current-layer='layer9' inkscape:window-width='1310' pagecolor='#555753' showborder='false' showguides='true' inkscape:snap-nodes='false' objecttolerance='10' showgrid='false' inkscape:object-nodes='true' inkscape:pageshadow='2' inkscape:guide-bbox='true' inkscape:window-x='54' inkscape:snap-bbox='true' bordercolor='#666666' id='namedview88' inkscape:window-maximized='0' inkscape:snap-global='true' inkscape:window-y='26' gridtolerance='10' inkscape:zoom='1' inkscape:window-height='690' borderopacity='1' guidetolerance='10' inkscape:cx='83.606112' inkscape:bbox-paths='false' inkscape:snap-grids='true' inkscape:pageopacity='1' inkscape:snap-to-guides='true'>
+ <inkscape:grid visible='true' spacingx='1px' type='xygrid' spacingy='1px' id='grid4866' empspacing='2' enabled='true' snapvisiblegridlinesonly='true'/>
+ </sodipodi:namedview>
+ <title id='title9167'>Gnome Symbolic Icon Theme</title>
+ <defs id='defs7386'/>
+ <g transform='translate(-41.000198,-357)' inkscape:groupmode='layer' id='layer9' inkscape:label='status' style='display:inline'>
+
+ <path inkscape:connector-curvature='0' d='m 44.6875,358.0625 c -1.5235,0 -2.75,1.2265 -2.75,2.75 l 0,4.4375 c 0,1.5235 1.2265,2.75 2.75,2.75 l 6.305187,0 3.053347,3.98495 -0.07728,-4.0787 c 1.204532,-0.29284 2.09375,-1.35911 2.09375,-2.65625 l 0,-4.4375 c 0,-1.5235 -1.2265,-2.75 -2.75,-2.75 z' id='rect11261' sodipodi:nodetypes='sssscccssss' style='color:#bebebe;fill:#bebebe;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.4000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate'/>
+ </g>
+ <g transform='translate(-41.000198,-357)' inkscape:groupmode='layer' id='layer10' inkscape:label='devices'/>
+ <g transform='translate(-41.000198,-357)' inkscape:groupmode='layer' id='layer11' inkscape:label='apps'/>
+ <g transform='translate(-41.000198,-357)' inkscape:groupmode='layer' id='layer12' inkscape:label='actions'/>
+ <g transform='translate(-41.000198,-357)' inkscape:groupmode='layer' id='layer13' inkscape:label='places'/>
+ <g transform='translate(-41.000198,-357)' inkscape:groupmode='layer' id='layer14' inkscape:label='mimetypes'/>
+ <g transform='translate(-41.000198,-357)' inkscape:groupmode='layer' id='layer15' inkscape:label='emblems' style='display:inline'/>
+ <g transform='translate(-41.000198,-357)' inkscape:groupmode='layer' id='g4953' inkscape:label='categories' style='display:inline'/>
+</svg>
diff --git a/public/theme/icons/note_empty.svg b/public/theme/icons/note_empty.svg
new file mode 100644
index 000000000..93092f4a4
--- /dev/null
+++ b/public/theme/icons/note_empty.svg
@@ -0,0 +1,30 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:svg='http://www.w3.org/2000/svg' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' id='svg7384' xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' version='1.1' inkscape:version='0.47 r22583' height='16' sodipodi:docname='user-invisible-symbolic.svg' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns='http://www.w3.org/2000/svg' width='16.000198'>
+ <metadata id='metadata90'>
+ <rdf:RDF>
+ <cc:Work rdf:about=''>
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource='http://purl.org/dc/dcmitype/StillImage'/>
+ <dc:title>Gnome Symbolic Icon Theme</dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview inkscape:object-paths='true' inkscape:cy='6.91348' inkscape:current-layer='layer9' inkscape:window-width='1920' pagecolor='#555753' showborder='false' showguides='true' inkscape:snap-nodes='false' objecttolerance='10' showgrid='true' inkscape:object-nodes='true' inkscape:pageshadow='2' inkscape:guide-bbox='true' inkscape:window-x='0' inkscape:snap-bbox='true' bordercolor='#666666' id='namedview88' inkscape:window-maximized='1' inkscape:snap-global='true' inkscape:window-y='26' gridtolerance='10' inkscape:zoom='32' inkscape:window-height='1021' borderopacity='1' guidetolerance='10' inkscape:snap-bbox-midpoints='false' inkscape:cx='11.38402' inkscape:bbox-paths='false' inkscape:snap-grids='true' inkscape:pageopacity='1' inkscape:snap-to-guides='true'>
+ <inkscape:grid visible='true' spacingx='1px' type='xygrid' spacingy='1px' id='grid4866' empspacing='2' enabled='true' snapvisiblegridlinesonly='true'/>
+ </sodipodi:namedview>
+ <title id='title9167'>Gnome Symbolic Icon Theme</title>
+ <defs id='defs7386'/>
+ <g transform='translate(-101,-357)' inkscape:groupmode='layer' id='layer9' inkscape:label='status' style='display:inline'>
+
+ <path d='m 104.75,357.0625 c -2.0602,0 -3.75,1.6898 -3.75,3.75 l 0,4.4375 c 0,2.0602 1.6898,3.75 3.75,3.75 l 4.9375,0 3.75,2.65625 1.59375,1.125 0,-1.96875 -0.0313,-2.5 c 1.11055,-0.59715 1.96875,-1.65265 1.96875,-3.0625 l 0,-4.4375 c 0,-2.0602 -1.6898,-3.75 -3.75,-3.75 l -8.46875,0 z m 0,2 8.46875,0 c 0.9868,0 1.75,0.7632 1.75,1.75 l 0,4.4375 c 0,0.86273 -0.63508,1.54099 -1.125,1.625 L 113,367 l 0,0.84375 0,1.03125 -2.40625,-1.6875 -0.25,-0.1875 -0.3125,0 -5.28125,0 c -0.9868,0 -1.75,-0.7632 -1.75,-1.75 l 0,-4.4375 c 0,-0.9868 0.7632,-1.75 1.75,-1.75 z' id='path12148' style='font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#bebebe;fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans'/>
+ </g>
+ <g transform='translate(-101,-357)' inkscape:groupmode='layer' id='layer10' inkscape:label='devices'/>
+ <g transform='translate(-101,-357)' inkscape:groupmode='layer' id='layer11' inkscape:label='apps'/>
+ <g transform='translate(-101,-357)' inkscape:groupmode='layer' id='layer12' inkscape:label='actions'/>
+ <g transform='translate(-101,-357)' inkscape:groupmode='layer' id='layer13' inkscape:label='places'/>
+ <g transform='translate(-101,-357)' inkscape:groupmode='layer' id='layer14' inkscape:label='mimetypes'/>
+ <g transform='translate(-101,-357)' inkscape:groupmode='layer' id='layer15' inkscape:label='emblems' style='display:inline'/>
+ <g transform='translate(-101,-357)' inkscape:groupmode='layer' id='g4953' inkscape:label='categories' style='display:inline'/>
+</svg>