Selaa lähdekoodia

Merge branch 'FreshRSS/dev' into PostgreSQL

Alexandre Alapetite 9 vuotta sitten
vanhempi
commit
90164df068

+ 3 - 1
CHANGELOG.md

@@ -3,7 +3,7 @@
 ## 2016-XX-XX FreshRSS 1.6.0-dev
 
 * API
-	* Support for editing feeds and categories from client applications [#1261](https://github.com/FreshRSS/FreshRSS/pull/1261)
+	* Support for editing feeds and categories from client applications [#1254](https://github.com/FreshRSS/FreshRSS/issues/1254)
 * Features
 	* Better control of number of entries per page or RSS feed [#1249](https://github.com/FreshRSS/FreshRSS/issues/1249)
 		* Since X hours: `https://freshrss.example/i/?a=rss&hours=3`
@@ -12,6 +12,8 @@
 	* Support custom ports `localhost:3306` for database servers [#1241](https://github.com/FreshRSS/FreshRSS/issues/1241)
 * Bug fixing
 	* Correction of bugs related CSRF tokens introduced in version 1.5.0 [#1253](https://github.com/FreshRSS/FreshRSS/issues/1253), [44f22ab](https://github.com/FreshRSS/FreshRSS/pull/1261/commits/d9bf9b2c6f0b2cc9dec3b638841b7e3040dcf46f)
+* SimplePie
+	* Fix auto-discovery of RSS feeds in Web pages served as `text/xml` [#1264](https://github.com/FreshRSS/FreshRSS/issues/1264)
 * Security
 	* Prevent `<a target="_blank">` attacks with `window.opener` [#1245](https://github.com/FreshRSS/FreshRSS/issues/1245)
 * UI

+ 15 - 7
app/Controllers/feedController.php

@@ -473,17 +473,25 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
 		return $feedDAO->updateFeed($feed_id, array('name' => $feed_name));
 	}
 
-	public static function moveFeed($feed_id, $cat_id) {
-		if ($feed_id <= 0) {
+	public static function moveFeed($feed_id, $cat_id, $new_cat_name = '') {
+		if ($feed_id <= 0 || ($cat_id <= 0 && $new_cat_name == '')) {
 			return false;
 		}
-		if ($cat_id <= 0) {
-			// If category was not given get the default one.
-			$catDAO = new FreshRSS_CategoryDAO();
+
+		$catDAO = new FreshRSS_CategoryDAO();
+		if ($cat_id > 0) {
+			$cat = $catDAO->searchById($cat_id);
+			$cat_id = $cat == null ? 0 : $cat->id();
+		}
+		if ($cat_id <= 1 && $new_cat_name != '') {
+			$cat_id = $catDAO->addCategory(array('name' => $new_cat_name));
+		}
+		if ($cat_id <= 1) {
 			$catDAO->checkDefault();
-			$def_cat = $catDAO->getDefault();
-			$cat_id = $def_cat->id();
+			$cat = $catDAO->getDefault();
+			$cat_id = $cat->id();
 		}
+
 		$feedDAO = FreshRSS_Factory::createFeedDao();
 		return $feedDAO->updateFeed($feed_id, array('category' => $cat_id));
 	}

+ 3 - 0
app/Models/CategoryDAO.php

@@ -50,6 +50,9 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable
 	}
 
 	public function deleteCategory($id) {
+		if ($id <= 1) {
+			return false;
+		}
 		$sql = 'DELETE FROM `' . $this->prefix . 'category` WHERE id=?';
 		$stm = $this->bd->prepare($sql);
 

+ 1 - 0
data/users/_/config.default.php

@@ -5,6 +5,7 @@ return array (
 	'old_entries' => 3,
 	'keep_history_default' => 0,
 	'ttl_default' => 3600,
+	'mail_login' => '',
 	'token' => '',
 	'passwordHash' => '',
 	'apiPasswordHash' => '',

+ 4 - 4
lib/SimplePie/SimplePie/Content/Type/Sniffer.php

@@ -109,9 +109,7 @@ class SimplePie_Content_Type_Sniffer
 			{
 				return $this->unknown();
 			}
-			elseif (substr($official, -4) === '+xml'
-				|| $official === 'text/xml'
-				|| $official === 'application/xml')
+			elseif (substr($official, -4) === '+xml')
 			{
 				return $official;
 			}
@@ -126,7 +124,9 @@ class SimplePie_Content_Type_Sniffer
 					return $official;
 				}
 			}
-			elseif ($official === 'text/html')
+			elseif ($official === 'text/html'
+				|| $official === 'text/xml'
+				|| $official === 'application/xml')
 			{
 				return $this->feed_or_html();
 			}

+ 62 - 14
p/api/greader.php

@@ -222,6 +222,17 @@ function checkToken($conf, $token) {
 	unauthorized();
 }
 
+function userInfo() {	//https://github.com/theoldreader/api#user-info
+	//logMe("userInfo()");
+	$user = Minz_Session::param('currentUser', '_');
+	exit(json_encode(array(
+			'userId' => $user,
+			'userName' => $user,
+			'userProfileId' => $user,
+			'userEmail' => FreshRSS_Context::$user_conf->mail_login,
+		)));
+}
+
 function tagList() {
 	//logMe("tagList()");
 	header('Content-Type: application/json; charset=UTF-8');
@@ -299,16 +310,23 @@ function subscriptionEdit($streamNames, $titles, $action, $add = '', $remove = '
 		$categoryDAO = new FreshRSS_CategoryDAO();
 	}
 	$c_name = '';
-	if ($add != '' && strpos($add, 'user/-/label/') === 0) {	//user/-/label/Example
-		$c_name = substr($add, 13);
+	if ($add != '' && strpos($add, 'user/') === 0) {	//user/-/label/Example ; user/username/label/Example
+		if (strpos($add, 'user/-/label/') === 0) {
+			$c_name = substr($add, 13);
+		} else {
+			$user = Minz_Session::param('currentUser', '_');
+			$prefix = 'user/' . $user . '/label/';
+			if (strpos($add, $prefix) === 0) {
+				$c_name = substr($add, strlen($prefix));
+			} else {
+				$c_name = '';
+			}
+		}
 		$cat = $categoryDAO->searchByName($c_name);
-		$addCatId = $cat == null ? -1 : $cat->id();
+		$addCatId = $cat == null ? 0 : $cat->id();
 	} else if ($remove != '' && strpos($remove, 'user/-/label/')) {
 		$addCatId = 1;	//Default category
 	}
-	if ($addCatId <= 0 && $c_name = '') {
-		$addCatId = 1;	//Default category
-	}
 	$feedDAO = FreshRSS_Factory::createFeedDao();
 	for ($i = count($streamNames) - 1; $i >= 0; $i--) {
 		$streamName = $streamNames[$i];	//feed/http://example.net/sample.xml	;	feed/338
@@ -345,8 +363,8 @@ function subscriptionEdit($streamNames, $titles, $action, $add = '', $remove = '
 					break;
 				case 'edit':
 					if ($feedId > 0) {
-						if ($addCatId > 0) {
-							FreshRSS_feed_Controller::moveFeed($feedId, $addCatId);
+						if ($addCatId > 0 || $c_name != '') {
+							FreshRSS_feed_Controller::moveFeed($feedId, $addCatId, $c_name);
 						}
 						if ($title != '') {
 							FreshRSS_feed_Controller::renameFeed($feedId, $title);
@@ -361,6 +379,23 @@ function subscriptionEdit($streamNames, $titles, $action, $add = '', $remove = '
 	exit('OK');
 }
 
+function quickadd($url) {
+	//logMe("quickadd($url)");
+	try {
+		$feed = FreshRSS_feed_Controller::addFeed($url);
+		exit(json_encode(array(
+				'numResults' => 1,
+				'streamId' => $feed->id(),
+			)));
+	} catch (Exception $e) {
+		logMe("subscriptionEdit error subscribe: " . $e->getMessage());
+		die(json_encode(array(
+				'numResults' => 0,
+				'error' => $e->getMessage(),
+			)));
+	}
+}
+
 function unreadCount() {	//http://blog.martindoms.com/2009/10/16/using-the-google-reader-api-part-2/#unread-count
 	//logMe("unreadCount()");
 	header('Content-Type: application/json; charset=UTF-8');
@@ -531,7 +566,7 @@ function streamContentsItemsIds($streamId, $start_time, $count, $order, $exclude
 		$id = basename($streamId);
 	} elseif (strpos($streamId, 'user/-/label/') === 0) {
 		$type = 'c';
-		$c_name = basename($streamId);
+		$c_name = substr($streamId, 13);
 		$categoryDAO = new FreshRSS_CategoryDAO();
 		$cat = $categoryDAO->searchByName($c_name);
 		$id = $cat == null ? -1 : $cat->id();
@@ -616,8 +651,8 @@ function renameTag($s, $dest) {
 	badRequest();
 }
 
-function disableTag($s, $dest) {
-	//logMe("renameTag()");
+function disableTag($s) {
+	//logMe("disableTag($s)");
 	if ($s != '' && strpos($s, 'user/-/label/') === 0) {
 		$s = substr($s, 13);
 		$categoryDAO = new FreshRSS_CategoryDAO();
@@ -625,6 +660,9 @@ function disableTag($s, $dest) {
 		if ($cat != null) {
 			$feedDAO = FreshRSS_Factory::createFeedDao();
 			$feedDAO->changeCategory($cat->id(), 0);
+			if ($cat->id() > 1) {
+				$categoryDAO->deleteCategory($cat->id());
+			}
 			exit('OK');
 		}
 	}
@@ -638,7 +676,7 @@ function markAllAsRead($streamId, $olderThanId) {
 		$f_id = basename($streamId);
 		$entryDAO->markReadFeed($f_id, $olderThanId);
 	} elseif (strpos($streamId, 'user/-/label/') === 0) {
-		$c_name = basename($streamId);
+		$c_name = substr($streamId, 13);
 		$categoryDAO = new FreshRSS_CategoryDAO();
 		$cat = $categoryDAO->searchByName($c_name);
 		$entryDAO->markReadCat($cat === null ? -1 : $cat->id(), $olderThanId);
@@ -749,6 +787,11 @@ elseif ($pathInfos[1] === 'reader' && $pathInfos[2] === 'api' && isset($pathInfo
 							subscriptionEdit($streamNames, $titles, $action, $add, $remove);
 						}
 						break;
+					case 'quickadd':	//https://github.com/theoldreader/api
+						if (isset($_GET['quickadd'])) {
+							quickadd($_GET['quickadd']);
+						}
+						break;
 				}
 			}
 			break;
@@ -776,8 +819,10 @@ elseif ($pathInfos[1] === 'reader' && $pathInfos[2] === 'api' && isset($pathInfo
 		case 'disable-tag':	//https://github.com/theoldreader/api
 			$token = isset($_POST['T']) ? trim($_POST['T']) : '';
 			checkToken(FreshRSS_Context::$user_conf, $token);
-			$s = isset($_POST['s']) ? $_POST['s'] : '';	//user/-/label/Folder
-			disableTag($s);
+			$s_s = multiplePosts('s');
+			foreach ($s_s as $s) {
+				disableTag($s);	//user/-/label/Folder
+			}
 			break;
 		case 'mark-all-as-read':
 			$token = isset($_POST['T']) ? trim($_POST['T']) : '';
@@ -792,6 +837,9 @@ elseif ($pathInfos[1] === 'reader' && $pathInfos[2] === 'api' && isset($pathInfo
 		case 'token':
 			token(FreshRSS_Context::$user_conf);
 			break;
+		case 'user-info':
+			userInfo();
+			break;
 	}
 } elseif ($pathInfos[1] === 'check' && $pathInfos[2] === 'compatibility') {
 	checkCompatibility();