Files
FreshRSS/app/Controllers/configureController.php
Alexis Degrugillier 27764b3635 Improve sharing
Previously, the share page can handle only a limited number of shares and only one of each type.
Now the configuration has been change to be more flexible and allows an unlimited number of shares.
The share description is located in an array and the share configuration is stored along with the
user configuration.

Note: I tried to include the specific javascript code in a separate file but I did not succeded to
import it.
2014-02-22 17:03:36 -05:00

347 lines
12 KiB
PHP
Executable File

<?php
class FreshRSS_configure_Controller extends Minz_ActionController {
public function firstAction () {
if (!$this->view->loginOk) {
Minz_Error::error (
403,
array ('error' => array (Minz_Translate::t ('access_denied')))
);
}
$catDAO = new FreshRSS_CategoryDAO ();
$catDAO->checkDefault ();
}
public function categorizeAction () {
$feedDAO = new FreshRSS_FeedDAO ();
$catDAO = new FreshRSS_CategoryDAO ();
$defaultCategory = $catDAO->getDefault ();
$defaultId = $defaultCategory->id ();
if (Minz_Request::isPost ()) {
$cats = Minz_Request::param ('categories', array ());
$ids = Minz_Request::param ('ids', array ());
$newCat = trim (Minz_Request::param ('new_category', ''));
foreach ($cats as $key => $name) {
if (strlen ($name) > 0) {
$cat = new FreshRSS_Category ($name);
$values = array (
'name' => $cat->name (),
);
$catDAO->updateCategory ($ids[$key], $values);
} elseif ($ids[$key] != $defaultId) {
$feedDAO->changeCategory ($ids[$key], $defaultId);
$catDAO->deleteCategory ($ids[$key]);
}
}
if ($newCat != '') {
$cat = new FreshRSS_Category ($newCat);
$values = array (
'id' => $cat->id (),
'name' => $cat->name (),
);
if ($catDAO->searchByName ($newCat) == false) {
$catDAO->addCategory ($values);
}
}
invalidateHttpCache();
$notif = array (
'type' => 'good',
'content' => Minz_Translate::t ('categories_updated')
);
Minz_Session::_param ('notification', $notif);
Minz_Request::forward (array ('c' => 'configure', 'a' => 'categorize'), true);
}
$this->view->categories = $catDAO->listCategories (false);
$this->view->defaultCategory = $catDAO->getDefault ();
$this->view->feeds = $feedDAO->listFeeds ();
$this->view->flux = false;
Minz_View::prependTitle (Minz_Translate::t ('categories_management') . ' · ');
}
public function feedAction () {
$catDAO = new FreshRSS_CategoryDAO ();
$this->view->categories = $catDAO->listCategories (false);
$feedDAO = new FreshRSS_FeedDAO ();
$this->view->feeds = $feedDAO->listFeeds ();
$id = Minz_Request::param ('id');
if ($id == false && !empty ($this->view->feeds)) {
$id = current ($this->view->feeds)->id ();
}
$this->view->flux = false;
if ($id != false) {
$this->view->flux = $this->view->feeds[$id];
if (!$this->view->flux) {
Minz_Error::error (
404,
array ('error' => array (Minz_Translate::t ('page_not_found')))
);
} else {
if (Minz_Request::isPost () && $this->view->flux) {
$user = Minz_Request::param ('http_user', '');
$pass = Minz_Request::param ('http_pass', '');
$httpAuth = '';
if ($user != '' || $pass != '') {
$httpAuth = $user . ':' . $pass;
}
$cat = intval(Minz_Request::param('category', 0));
$values = array (
'name' => Minz_Request::param ('name', ''),
'description' => sanitizeHTML(Minz_Request::param('description', '', true)),
'website' => Minz_Request::param('website', ''),
'url' => Minz_Request::param('url', ''),
'category' => $cat,
'pathEntries' => Minz_Request::param ('path_entries', ''),
'priority' => intval(Minz_Request::param ('priority', 0)),
'httpAuth' => $httpAuth,
'keep_history' => intval(Minz_Request::param ('keep_history', -2)),
);
if ($feedDAO->updateFeed ($id, $values)) {
$this->view->flux->_category ($cat);
$this->view->flux->faviconPrepare();
$notif = array (
'type' => 'good',
'content' => Minz_Translate::t ('feed_updated')
);
} else {
$notif = array (
'type' => 'bad',
'content' => Minz_Translate::t ('error_occurred_update')
);
}
invalidateHttpCache();
Minz_Session::_param ('notification', $notif);
Minz_Request::forward (array ('c' => 'configure', 'a' => 'feed', 'params' => array ('id' => $id)), true);
}
Minz_View::prependTitle (Minz_Translate::t ('rss_feed_management') . ' — ' . $this->view->flux->name () . ' · ');
}
} else {
Minz_View::prependTitle (Minz_Translate::t ('rss_feed_management') . ' · ');
}
}
public function displayAction () {
if (Minz_Request::isPost()) {
$this->view->conf->_language(Minz_Request::param('language', 'en'));
$this->view->conf->_posts_per_page(Minz_Request::param('posts_per_page', 10));
$this->view->conf->_view_mode(Minz_Request::param('view_mode', 'normal'));
$this->view->conf->_default_view (Minz_Request::param('default_view', 'a'));
$this->view->conf->_auto_load_more(Minz_Request::param('auto_load_more', false));
$this->view->conf->_display_posts(Minz_Request::param('display_posts', false));
$this->view->conf->_onread_jump_next(Minz_Request::param('onread_jump_next', false));
$this->view->conf->_lazyload (Minz_Request::param('lazyload', false));
$this->view->conf->_sort_order(Minz_Request::param('sort_order', 'DESC'));
$this->view->conf->_mark_when (array(
'article' => Minz_Request::param('mark_open_article', false),
'site' => Minz_Request::param('mark_open_site', false),
'scroll' => Minz_Request::param('mark_scroll', false),
'reception' => Minz_Request::param('mark_upon_reception', false),
));
$themeId = Minz_Request::param('theme', '');
if ($themeId == '') {
$themeId = FreshRSS_Themes::defaultTheme;
}
$this->view->conf->_theme($themeId);
$this->view->conf->_topline_read(Minz_Request::param('topline_read', false));
$this->view->conf->_topline_favorite(Minz_Request::param('topline_favorite', false));
$this->view->conf->_topline_date(Minz_Request::param('topline_date', false));
$this->view->conf->_topline_link(Minz_Request::param('topline_link', false));
$this->view->conf->_bottomline_read(Minz_Request::param('bottomline_read', false));
$this->view->conf->_bottomline_favorite(Minz_Request::param('bottomline_favorite', false));
$this->view->conf->_bottomline_sharing(Minz_Request::param('bottomline_sharing', false));
$this->view->conf->_bottomline_tags(Minz_Request::param('bottomline_tags', false));
$this->view->conf->_bottomline_date(Minz_Request::param('bottomline_date', false));
$this->view->conf->_bottomline_link(Minz_Request::param('bottomline_link', false));
$this->view->conf->save();
Minz_Session::_param ('language', $this->view->conf->language);
Minz_Translate::reset ();
invalidateHttpCache();
$notif = array (
'type' => 'good',
'content' => Minz_Translate::t ('configuration_updated')
);
Minz_Session::_param ('notification', $notif);
Minz_Request::forward (array ('c' => 'configure', 'a' => 'display'), true);
}
$this->view->themes = FreshRSS_Themes::get();
Minz_View::prependTitle (Minz_Translate::t ('reading_configuration') . ' · ');
}
public function sharingAction () {
if (Minz_Request::isPost ()) {
$params = Minz_Request::params();
$this->view->conf->_sharing ($params['share']);
$this->view->conf->save();
invalidateHttpCache();
$notif = array (
'type' => 'good',
'content' => Minz_Translate::t ('configuration_updated')
);
Minz_Session::_param ('notification', $notif);
Minz_Request::forward (array ('c' => 'configure', 'a' => 'sharing'), true);
}
Minz_View::prependTitle (Minz_Translate::t ('sharing') . ' · ');
}
public function importExportAction () {
require_once(LIB_PATH . '/lib_opml.php');
$catDAO = new FreshRSS_CategoryDAO ();
$this->view->categories = $catDAO->listCategories ();
$this->view->req = Minz_Request::param ('q');
if ($this->view->req == 'export') {
Minz_View::_title ('freshrss_feeds.opml');
$this->view->_useLayout (false);
header('Content-Type: application/xml; charset=utf-8');
header('Content-disposition: attachment; filename=freshrss_feeds.opml');
$feedDAO = new FreshRSS_FeedDAO ();
$catDAO = new FreshRSS_CategoryDAO ();
$list = array ();
foreach ($catDAO->listCategories () as $key => $cat) {
$list[$key]['name'] = $cat->name ();
$list[$key]['feeds'] = $feedDAO->listByCategory ($cat->id ());
}
$this->view->categories = $list;
} elseif ($this->view->req == 'import' && Minz_Request::isPost ()) {
if ($_FILES['file']['error'] == 0) {
invalidateHttpCache();
// on parse le fichier OPML pour récupérer les catégories et les flux associés
try {
list ($categories, $feeds) = opml_import (
file_get_contents ($_FILES['file']['tmp_name'])
);
// On redirige vers le controller feed qui va se charger d'insérer les flux en BDD
// les flux sont mis au préalable dans des variables de Request
Minz_Request::_param ('q', 'null');
Minz_Request::_param ('categories', $categories);
Minz_Request::_param ('feeds', $feeds);
Minz_Request::forward (array ('c' => 'feed', 'a' => 'massiveImport'));
} catch (FreshRSS_Opml_Exception $e) {
Minz_Log::record ($e->getMessage (), Minz_Log::WARNING);
$notif = array (
'type' => 'bad',
'content' => Minz_Translate::t ('bad_opml_file')
);
Minz_Session::_param ('notification', $notif);
Minz_Request::forward (array (
'c' => 'configure',
'a' => 'importExport'
), true);
}
}
}
$feedDAO = new FreshRSS_FeedDAO ();
$this->view->feeds = $feedDAO->listFeeds ();
// au niveau de la vue, permet de ne pas voir un flux sélectionné dans la liste
$this->view->flux = false;
Minz_View::prependTitle (Minz_Translate::t ('import_export_opml') . ' · ');
}
public function shortcutAction () {
$list_keys = array ('a', 'b', 'backspace', 'c', 'd', 'delete', 'down', 'e', 'end', 'enter',
'escape', 'f', 'g', 'h', 'home', 'i', 'insert', 'j', 'k', 'l', 'left',
'm', 'n', 'o', 'p', 'page_down', 'page_up', 'q', 'r', 'return', 'right',
's', 'space', 't', 'tab', 'u', 'up', 'v', 'w', 'x', 'y',
'z', '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9',
'f10', 'f11', 'f12');
$this->view->list_keys = $list_keys;
if (Minz_Request::isPost ()) {
$shortcuts = Minz_Request::param ('shortcuts');
$shortcuts_ok = array ();
foreach ($shortcuts as $key => $value) {
if (in_array($value, $list_keys)) {
$shortcuts_ok[$key] = $value;
}
}
$this->view->conf->_shortcuts ($shortcuts_ok);
$this->view->conf->save();
invalidateHttpCache();
$notif = array (
'type' => 'good',
'content' => Minz_Translate::t ('shortcuts_updated')
);
Minz_Session::_param ('notification', $notif);
Minz_Request::forward (array ('c' => 'configure', 'a' => 'shortcut'), true);
}
Minz_View::prependTitle (Minz_Translate::t ('shortcuts') . ' · ');
}
public function usersAction() {
Minz_View::prependTitle(Minz_Translate::t ('users') . ' · ');
}
public function archivingAction () {
if (Minz_Request::isPost()) {
$old = Minz_Request::param('old_entries', 3);
$keepHistoryDefault = Minz_Request::param('keep_history_default', 0);
$this->view->conf->_old_entries($old);
$this->view->conf->_keep_history_default($keepHistoryDefault);
$this->view->conf->save();
invalidateHttpCache();
$notif = array(
'type' => 'good',
'content' => Minz_Translate::t('configuration_updated')
);
Minz_Session::_param('notification', $notif);
Minz_Request::forward(array('c' => 'configure', 'a' => 'archiving'), true);
}
Minz_View::prependTitle(Minz_Translate::t('archiving_configuration') . ' · ');
$entryDAO = new FreshRSS_EntryDAO();
$this->view->nb_total = $entryDAO->count();
$this->view->size_user = $entryDAO->size();
if (Minz_Configuration::isAdmin(Minz_Session::param('currentUser', '_'))) {
$this->view->size_total = $entryDAO->size(true);
}
}
}