diff options
| author | 2014-06-14 09:05:46 +0200 | |
|---|---|---|
| committer | 2014-06-14 09:05:46 +0200 | |
| commit | 5a98cc7532c1dbc0c790caefa5ff317663a80740 (patch) | |
| tree | a6705f67a706f3ee9e427e0dcd1d108b0ee64ef0 /app | |
| parent | 61f4d5457818204eb28ed394d4f1b97160542baa (diff) | |
| parent | a7e833280954a537e12d5a3f4fa12a5b9e8412da (diff) | |
Merge branch 'aledeg-user-queries' into dev
Diffstat (limited to 'app')
| -rwxr-xr-x | app/Controllers/configureController.php | 76 | ||||
| -rwxr-xr-x | app/Controllers/indexController.php | 3 | ||||
| -rw-r--r-- | app/Models/Configuration.php | 13 | ||||
| -rw-r--r-- | app/Models/Themes.php | 1 | ||||
| -rw-r--r-- | app/i18n/en.php | 29 | ||||
| -rw-r--r-- | app/i18n/fr.php | 29 | ||||
| -rw-r--r-- | app/layout/aside_configure.phtml | 3 | ||||
| -rw-r--r-- | app/layout/header.phtml | 1 | ||||
| -rw-r--r-- | app/layout/nav_menu.phtml | 55 | ||||
| -rw-r--r-- | app/views/configure/queries.phtml | 90 | ||||
| -rw-r--r-- | app/views/configure/sharing.phtml | 14 |
11 files changed, 293 insertions, 21 deletions
diff --git a/app/Controllers/configureController.php b/app/Controllers/configureController.php index a117e0f9c..89130cae4 100755 --- a/app/Controllers/configureController.php +++ b/app/Controllers/configureController.php @@ -299,4 +299,80 @@ class FreshRSS_configure_Controller extends Minz_ActionController { $this->view->size_total = $entryDAO->size(true); } } + + public function queriesAction () { + if (Minz_Request::isPost ()) { + $queries = Minz_Request::param('queries', array()); + + foreach ($queries as $key => $query) { + if (!$query['name']) { + $query['name'] = Minz_Translate::t('query_number', $key + 1); + } + } + $this->view->conf->_queries($queries); + $this->view->conf->save(); + + $notif = array ( + 'type' => 'good', + 'content' => Minz_Translate::t ('configuration_updated') + ); + Minz_Session::_param ('notification', $notif); + + Minz_Request::forward (array ('c' => 'configure', 'a' => 'queries'), true); + } else { + $this->view->query_get = array(); + foreach ($this->view->conf->queries as $key => $query) { + if (!isset($query['get'])) { + continue; + } + + switch ($query['get'][0]) { + case 'c': + $dao = new FreshRSS_CategoryDAO(); + $category = $dao->searchById(substr($query['get'], 2)); + $this->view->query_get[$key] = array( + 'type' => 'category', + 'name' => $category->name(), + ); + break; + case 'f': + $dao = new FreshRSS_FeedDAO(); + $feed = $dao->searchById(substr($query['get'], 2)); + $this->view->query_get[$key] = array( + 'type' => 'feed', + 'name' => $feed->name(), + ); + break; + case 's': + $this->view->query_get[$key] = array( + 'type' => 'favorite', + 'name' => 'favorite', + ); + break; + case 'a': + $this->view->query_get[$key] = array( + 'type' => 'all', + 'name' => 'all', + ); + break; + } + } + } + + Minz_View::prependTitle (Minz_Translate::t ('queries') . ' · '); + } + + public function addQueryAction () { + $queries = $this->view->conf->queries; + $query = Minz_Request::params(); + $query['name'] = Minz_Translate::t('query_number', count($queries) + 1); + unset($query['output']); + unset($query['token']); + $queries[] = $query; + $this->view->conf->_queries($queries); + $this->view->conf->save(); + + // Minz_Request::forward(array('params' => $query), true); + Minz_Request::forward(array('c' => 'configure', 'a' => 'queries'), true); + } } diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php index c843748c3..4fcc3176f 100755 --- a/app/Controllers/indexController.php +++ b/app/Controllers/indexController.php @@ -82,9 +82,6 @@ class FreshRSS_index_Controller extends Minz_ActionController { $this->view->state = $state = Minz_Request::param ('state', $this->view->conf->default_view); $state_param = Minz_Request::param ('state', null); $filter = Minz_Request::param ('search', ''); - if (!empty($filter)) { - $state = FreshRSS_Entry::STATE_ALL; //Search always in read and unread articles - } $this->view->order = $order = Minz_Request::param ('order', $this->view->conf->sort_order); $nb = Minz_Request::param ('nb', $this->view->conf->posts_per_page); $first = Minz_Request::param ('next', ''); diff --git a/app/Models/Configuration.php b/app/Models/Configuration.php index 0d6666297..ffd20deca 100644 --- a/app/Models/Configuration.php +++ b/app/Models/Configuration.php @@ -53,6 +53,7 @@ class FreshRSS_Configuration { 'bottomline_date' => true, 'bottomline_link' => true, 'sharing' => array(), + 'queries' => array(), ); private $available_languages = array( @@ -219,6 +220,18 @@ class FreshRSS_Configuration { $this->data['sharing'][] = $value; } } + public function _queries ($values) { + $this->data['queries'] = array(); + foreach ($values as $value) { + $value = array_filter($value); + $params = $value; + unset($params['name']); + unset($params['url']); + $value['url'] = Minz_Url::display(array('params' => $params)); + + $this->data['queries'][] = $value; + } + } public function _theme($value) { $this->data['theme'] = $value; } diff --git a/app/Models/Themes.php b/app/Models/Themes.php index 620149934..2e2c3f9cd 100644 --- a/app/Models/Themes.php +++ b/app/Models/Themes.php @@ -70,6 +70,7 @@ class FreshRSS_Themes extends Minz_Model { 'add' => '✚', 'all' => '☰', 'bookmark' => '★', + 'bookmark-add' => '✚', 'category' => '☷', 'category-white' => '☷', 'close' => '❌', diff --git a/app/i18n/en.php b/app/i18n/en.php index a3c1dfeb7..223b74010 100644 --- a/app/i18n/en.php +++ b/app/i18n/en.php @@ -15,6 +15,35 @@ return array ( 'feed' => 'Feed', 'feeds' => 'Feeds', 'shortcuts' => 'Shortcuts', + 'queries' => 'User queries', + 'query_search' => 'Search for "%s"', + 'query_order_asc' => 'Display oldest articles first', + 'query_order_desc' => 'Display newest articles first', + 'query_get_category' => 'Display "%s" category', + 'query_get_feed' => 'Display "%s" feed', + 'query_get_all' => 'Display all articles', + 'query_get_favorite' => 'Display favorite articles', + 'query_state_0' => 'Display all articles', + 'query_state_1' => 'Display read articles', + 'query_state_2' => 'Display unread articles', + 'query_state_3' => 'Display all articles', + 'query_state_4' => 'Display favorite articles', + 'query_state_5' => 'Display read favorite articles', + 'query_state_6' => 'Display unread favorite articles', + 'query_state_7' => 'Display favorite articles', + 'query_state_8' => 'Display not favorite articles', + 'query_state_9' => 'Display read not favorite articles', + 'query_state_10' => 'Display unread not favorite articles', + 'query_state_11' => 'Display not favorite articles', + 'query_state_12' => 'Display all articles', + 'query_state_13' => 'Display read articles', + 'query_state_14' => 'Display unread articles', + 'query_state_15' => 'Display all articles', + 'query_number' => 'Query n°%d', + 'add_query' => 'Add a query', + 'no_query' => 'You have not create user query yet.', + 'query_filter' => 'Filter applied:', + 'no_query_filter' => 'No filter', 'about' => 'About', 'stats' => 'Statistics', diff --git a/app/i18n/fr.php b/app/i18n/fr.php index 4acf5b397..e85e66723 100644 --- a/app/i18n/fr.php +++ b/app/i18n/fr.php @@ -15,6 +15,35 @@ return array ( 'feed' => 'Flux', 'feeds' => 'Flux', 'shortcuts' => 'Raccourcis', + 'queries' => 'Filtres utilisateurs', + 'query_search' => 'Recherche de "%s"', + 'query_order_asc' => 'Afficher les articles les plus anciens en premier', + 'query_order_desc' => 'Afficher les articles les plus récents en premier', + 'query_get_category' => 'Afficher la catégorie "%s"', + 'query_get_feed' => 'Afficher le flux "%s"', + 'query_get_all' => 'Afficher tous les articles', + 'query_get_favorite' => 'Afficher les articles favoris', + 'query_state_0' => 'Afficher tous les articles', + 'query_state_1' => 'Afficher les articles lus', + 'query_state_2' => 'Afficher les articles non lus', + 'query_state_3' => 'Afficher tous les articles', + 'query_state_4' => 'Afficher les articles favoris', + 'query_state_5' => 'Afficher les articles lus et favoris', + 'query_state_6' => 'Afficher les articles non lus et favoris', + 'query_state_7' => 'Afficher les articles favoris', + 'query_state_8' => 'Afficher les articles non favoris', + 'query_state_9' => 'Afficher les articles lus et non favoris', + 'query_state_10' => 'Afficher les articles non lus et non favoris', + 'query_state_11' => 'Afficher les articles non favoris', + 'query_state_12' => 'Afficher tous les articles', + 'query_state_13' => 'Afficher les articles lus', + 'query_state_14' => 'Afficher les articles non lus', + 'query_state_15' => 'Afficher tous les articles', + 'query_number' => 'Filtre n°%d', + 'add_query' => 'Créer un filtre', + 'no_query' => 'Vous n’avez pas encore créé de filtre.', + 'query_filter' => 'Filtres appliqués :', + 'no_query_filter' => 'Aucun filtre appliqué', 'about' => 'À propos', 'stats' => 'Statistiques', diff --git a/app/layout/aside_configure.phtml b/app/layout/aside_configure.phtml index 43adeb3c6..e66f2f64c 100644 --- a/app/layout/aside_configure.phtml +++ b/app/layout/aside_configure.phtml @@ -15,6 +15,9 @@ <li class="item<?php echo Minz_Request::actionName () == 'shortcut' ? ' active' : ''; ?>"> <a href="<?php echo _url ('configure', 'shortcut'); ?>"><?php echo Minz_Translate::t ('shortcuts'); ?></a> </li> + <li class="item<?php echo Minz_Request::actionName () == 'queries' ? ' active' : ''; ?>"> + <a href="<?php echo _url ('configure', 'queries'); ?>"><?php echo Minz_Translate::t ('queries'); ?></a> + </li> <li class="separator"></li> <li class="item<?php echo Minz_Request::actionName () == 'users' ? ' active' : ''; ?>"> <a href="<?php echo _url ('configure', 'users'); ?>"><?php echo Minz_Translate::t ('users'); ?></a> diff --git a/app/layout/header.phtml b/app/layout/header.phtml index 08aa7715d..3eedc8ea7 100644 --- a/app/layout/header.phtml +++ b/app/layout/header.phtml @@ -72,6 +72,7 @@ if (Minz_Configuration::canLogIn()) { <li class="item"><a href="<?php echo _url ('configure', 'archiving'); ?>"><?php echo Minz_Translate::t ('archiving_configuration'); ?></a></li> <li class="item"><a href="<?php echo _url ('configure', 'sharing'); ?>"><?php echo Minz_Translate::t ('sharing'); ?></a></li> <li class="item"><a href="<?php echo _url ('configure', 'shortcut'); ?>"><?php echo Minz_Translate::t ('shortcuts'); ?></a></li> + <li class="item"><a href="<?php echo _url ('configure', 'queries'); ?>"><?php echo Minz_Translate::t ('queries'); ?></a></li> <li class="separator"></li> <li class="item"><a href="<?php echo _url ('configure', 'users'); ?>"><?php echo Minz_Translate::t ('users'); ?></a></li> <li class="separator"></li> diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index b42f816b4..a9cf02388 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -7,18 +7,20 @@ <?php } ?> <?php if ($this->loginOk) { ?> - <?php $url_state = $this->url; - if ($this->state & FreshRSS_Entry::STATE_READ) { - $url_state['params']['state'] = $this->state & ~FreshRSS_Entry::STATE_READ; - $checked = 'true'; - $class = 'active'; - } else { - $url_state['params']['state'] = $this->state | FreshRSS_Entry::STATE_READ; - $checked = 'false'; - $class = ''; - } - ?> <div class="stick"> + <?php + $url_state = $this->url; + + if ($this->state & FreshRSS_Entry::STATE_READ) { + $url_state['params']['state'] = $this->state & ~FreshRSS_Entry::STATE_READ; + $checked = 'true'; + $class = 'active'; + } else { + $url_state['params']['state'] = $this->state | FreshRSS_Entry::STATE_READ; + $checked = 'false'; + $class = ''; + } + ?> <a id="toggle-read" class="btn <?php echo $class; ?>" aria-checked="<?php echo $checked; ?>" @@ -26,6 +28,7 @@ title="<?php echo Minz_Translate::t ('show_read'); ?>"> <?php echo FreshRSS_Themes::icon('read'); ?> </a> + <?php if ($this->state & FreshRSS_Entry::STATE_NOT_READ) { $url_state['params']['state'] = $this->state & ~FreshRSS_Entry::STATE_NOT_READ; @@ -44,6 +47,7 @@ title="<?php echo Minz_Translate::t ('show_not_reads'); ?>"> <?php echo FreshRSS_Themes::icon('unread'); ?> </a> + <?php if ($this->state & FreshRSS_Entry::STATE_FAVORITE) { $url_state['params']['state'] = $this->state & ~FreshRSS_Entry::STATE_FAVORITE; @@ -62,6 +66,7 @@ title="<?php echo Minz_Translate::t ('show_favorite'); ?>"> <?php echo FreshRSS_Themes::icon('starred'); ?> </a> + <?php if ($this->state & FreshRSS_Entry::STATE_NOT_FAVORITE) { $url_state['params']['state'] = $this->state & ~FreshRSS_Entry::STATE_NOT_FAVORITE; @@ -80,6 +85,34 @@ title="<?php echo Minz_Translate::t ('show_not_favorite'); ?>"> <?php echo FreshRSS_Themes::icon('non-starred'); ?> </a> + + <div class="dropdown"> + <div id="dropdown-query" class="dropdown-target"></div> + + <a class="dropdown-toggle btn" href="#dropdown-query"><?php echo FreshRSS_Themes::icon('bookmark-add'); ?></a> + <ul class="dropdown-menu"> + <li class="dropdown-close"><a href="#close">❌</a></li> + + <li class="dropdown-header"><?php echo Minz_Translate::t('queries'); ?> <a class="no-mobile" href="<?php echo _url('configure', 'queries'); ?>"><?php echo FreshRSS_Themes::icon('configure'); ?></a></li> + + <?php foreach ($this->conf->queries as $query) { ?> + <li class="item"> + <a href="<?php echo $query['url']; ?>"><?php echo $query['name']; ?></a> + </li> + <?php } ?> + + <?php if (count($this->conf->queries) > 0) { ?> + <li class="separator no-mobile"></li> + <?php } ?> + + <?php + $url_query = $this->url; + $url_query['c'] = 'configure'; + $url_query['a'] = 'addQuery'; + ?> + <li class="item no-mobile"><a href="<?php echo Minz_Url::display($url_query); ?>"><?php echo Minz_Translate::t('add_query'); ?></a></li> + </ul> + </div> </div> <?php $get = false; diff --git a/app/views/configure/queries.phtml b/app/views/configure/queries.phtml new file mode 100644 index 000000000..d0aec687b --- /dev/null +++ b/app/views/configure/queries.phtml @@ -0,0 +1,90 @@ +<?php $this->partial('aside_configure'); ?> + +<div class="post"> + <a href="<?php echo _url('index', 'index'); ?>"><?php echo Minz_Translate::t('back_to_rss_feeds'); ?></a> + + <form method="post" action="<?php echo _url('configure', 'queries'); ?>"> + <legend><?php echo Minz_Translate::t('queries'); ?></legend> + + <?php foreach ($this->conf->queries as $key => $query) { ?> + <div class="form-group" id="query-group-<?php echo $key; ?>"> + <label class="group-name" for="queries_<?php echo $key; ?>_name"> + <?php echo Minz_Translate::t('query_number', $key + 1); ?> + </label> + + <div class="group-controls"> + <input type="hidden" id="queries_<?php echo $key; ?>_search" name="queries[<?php echo $key; ?>][search]" value="<?php echo isset($query['search']) ? $query['search'] : ""; ?>"/> + <input type="hidden" id="queries_<?php echo $key; ?>_state" name="queries[<?php echo $key; ?>][state]" value="<?php echo isset($query['state']) ? $query['state'] : ""; ?>"/> + <input type="hidden" id="queries_<?php echo $key; ?>_order" name="queries[<?php echo $key; ?>][order]" value="<?php echo isset($query['order']) ? $query['order'] : ""; ?>"/> + <input type="hidden" id="queries_<?php echo $key; ?>_get" name="queries[<?php echo $key; ?>][get]" value="<?php echo isset($query['get']) ? $query['get'] : ""; ?>"/> + + <div class="stick"> + <input class="extend" + type="text" + id="queries_<?php echo $key; ?>_name" + name="queries[<?php echo $key; ?>][name]" + value="<?php echo $query['name']; ?>" + /> + + <a class="btn" href="<?php echo $query['url']; ?>"> + <?php echo FreshRSS_Themes::icon('link'); ?> + </a> + + <a class="btn btn-attention remove" href="#" data-remove="query-group-<?php echo $key; ?>"> + <?php echo FreshRSS_Themes::icon('close'); ?> + </a> + </div> + + <?php + $exist = (isset($query['search']) ? 1 : 0) + + (isset($query['state']) ? 1 : 0) + + (isset($query['order']) ? 1 : 0) + + (isset($query['get']) ? 1 : 0); + // If the only filter is "all" articles, we consider there is no filter + $exist = ($exist === 1 && isset($query['get']) && $query['get'] === 'a') ? 0 : $exist; + ?> + + <?php if ($exist === 0) { ?> + <div class="alert alert-warn"> + <div class="alert-head"><?php echo Minz_Translate::t('no_query_filter'); ?></div> + </div> + <?php } else { ?> + <div class="alert alert-success"> + <div class="alert-head"><?php echo Minz_Translate::t('query_filter'); ?></div> + + <ul> + <?php if (isset($query['search'])) { $exist = true; ?> + <li class="item"><?php echo Minz_Translate::t('query_search', $query['search']); ?></li> + <?php } ?> + + <?php if (isset($query['state'])) { $exist = true; ?> + <li class="item"><?php echo Minz_Translate::t('query_state_' . $query['state']); ?></li> + <?php } ?> + + <?php if (isset($query['order'])) { $exist = true; ?> + <li class="item"><?php echo Minz_Translate::t('query_order_' . strtolower($query['order'])); ?></li> + <?php } ?> + + <?php if (isset($query['get'])) { $exist = true; ?> + <li class="item"><?php echo Minz_Translate::t('query_get_' . $this->query_get[$key]['type'], $this->query_get[$key]['name']); ?></li> + <?php } ?> + </ul> + </div> + <?php } ?> + </div> + </div> + <?php } ?> + + <?php if (count($this->conf->queries) > 0) { ?> + <div class="form-group form-actions"> + <div class="group-controls"> + <button type="submit" class="btn btn-important"><?php echo Minz_Translate::t ('save'); ?></button> + <button type="reset" class="btn"><?php echo Minz_Translate::t ('cancel'); ?></button> + </div> + </div> + <?php } else { ?> + <p class="alert alert-warn"><span class="alert-head"><?php echo Minz_Translate::t ('damn'); ?></span> <?php echo Minz_Translate::t('no_query'); ?></p> + <?php } ?> + </form> + +</div>
\ No newline at end of file diff --git a/app/views/configure/sharing.phtml b/app/views/configure/sharing.phtml index a952bc3b4..02ce331da 100644 --- a/app/views/configure/sharing.phtml +++ b/app/views/configure/sharing.phtml @@ -4,35 +4,35 @@ <a href="<?php echo _url ('index', 'index'); ?>"><?php echo Minz_Translate::t ('back_to_rss_feeds'); ?></a> <form method="post" action="<?php echo _url ('configure', 'sharing'); ?>" - data-simple='<div class="form-group"><label class="group-name">##label##</label><div class="group-controls"><a href="#" class="share remove btn btn-attention"><?php echo FreshRSS_Themes::icon('close'); ?></a> + data-simple='<div class="form-group" id="group-share-##key##"><label class="group-name">##label##</label><div class="group-controls"><a href="#" class="remove btn btn-attention" data-remove="group-share-##key##"><?php echo FreshRSS_Themes::icon('close'); ?></a> <input type="hidden" id="share_##key##_type" name="share[##key##][type]" value="##type##" /></div></div>' - data-advanced='<div class="form-group"><label class="group-name">##label##</label><div class="group-controls"> + data-advanced='<div class="form-group" id="group-share-##key##"><label class="group-name">##label##</label><div class="group-controls"> <input type="hidden" id="share_##key##_type" name="share[##key##][type]" value="##type##" /> <div class="stick"> <input type="text" id="share_##key##_name" name="share[##key##][name]" class="extend" value="" placeholder="<?php echo Minz_Translate::t ('share_name'); ?>" size="64" /> <input type="url" id="share_##key##_url" name="share[##key##][url]" class="extend" value="" placeholder="<?php echo Minz_Translate::t ('share_url'); ?>" size="64" /> - <a href="#" class="share remove btn btn-attention"><?php echo FreshRSS_Themes::icon('close'); ?></a></div> + <a href="#" class="remove btn btn-attention" data-remove="group-share-##key##"><?php echo FreshRSS_Themes::icon('close'); ?></a></div> <a target="_blank" class="btn" title="<?php echo Minz_Translate::t('more_information'); ?>" href="##help##"><?php echo FreshRSS_Themes::icon('help'); ?></a> </div></div>'> <legend><?php echo Minz_Translate::t ('sharing'); ?></legend> <?php foreach ($this->conf->sharing as $key => $sharing): ?> <?php $share = $this->conf->shares[$sharing['type']]; ?> - <div class="form-group"> + <div class="form-group" id="group-share-<?php echo $key; ?>"> <label class="group-name"> <?php echo Minz_Translate::t ($sharing['type']); ?> </label> <div class="group-controls"> <input type='hidden' id='share_<?php echo $key;?>_type' name="share[<?php echo $key;?>][type]" value='<?php echo $sharing['type']?>' /> - <?php if ($share['form'] === 'advanced'){ ?> + <?php if ($share['form'] === 'advanced') { ?> <div class="stick"> <input type="text" id="share_<?php echo $key;?>_name" name="share[<?php echo $key;?>][name]" class="extend" value="<?php echo $sharing['name']?>" placeholder="<?php echo Minz_Translate::t ('share_name'); ?>" size="64" /> <input type="url" id="share_<?php echo $key;?>_url" name="share[<?php echo $key;?>][url]" class="extend" value="<?php echo $sharing['url']?>" placeholder="<?php echo Minz_Translate::t ('share_url'); ?>" size="64" /> - <a href='#' class='share remove btn btn-attention'><?php echo FreshRSS_Themes::icon('close'); ?></a> + <a href='#' class='remove btn btn-attention' data-remove="group-share-<?php echo $key; ?>"><?php echo FreshRSS_Themes::icon('close'); ?></a> </div> <a target="_blank" class="btn" title="<?php echo Minz_Translate::t('more_information'); ?>" href="<?php echo $share['help']?>"><?php echo FreshRSS_Themes::icon('help'); ?></a> <?php } else { ?> - <a href='#' class='share remove btn btn-attention'><?php echo FreshRSS_Themes::icon('close'); ?></a> + <a href='#' class='remove btn btn-attention' data-remove="group-share-<?php echo $key; ?>"><?php echo FreshRSS_Themes::icon('close'); ?></a> <?php } ?> </div> </div> |
