1
0
Fork 0
mirror of https://github.com/wallabag/wallabag.git synced 2025-09-15 18:57:05 +00:00

Merge pull request #532 from wallabag/upload-file

New import system
This commit is contained in:
Nicolas Lœuillet 2014-03-07 13:26:56 +01:00
commit ded2c63312
6 changed files with 224 additions and 102 deletions

View file

@ -230,8 +230,30 @@ class Database {
}
}
public function updateContentAndTitle($id, $title, $body, $user_id) {
$sql_action = 'UPDATE entries SET content = ?, title = ? WHERE id=? AND user_id=?';
$params_action = array($body, $title, $id, $user_id);
$query = $this->executeQuery($sql_action, $params_action);
return $query;
}
public function retrieveUnfetchedEntries($user_id, $limit) {
$sql_limit = "LIMIT 0,".$limit;
if (STORAGE == 'postgres') {
$sql_limit = "LIMIT ".$limit." OFFSET 0";
}
$sql = "SELECT * FROM entries WHERE (content = '' OR content IS NULL) AND user_id=? ORDER BY id " . $sql_limit;
$query = $this->executeQuery($sql, array($user_id));
$entries = $query->fetchAll();
return $entries;
}
public function retrieveAll($user_id) {
$sql = "SELECT * FROM entries WHERE user_id=? ORDER BY id";
$sql = "SELECT * FROM entries WHERE content <> '' AND user_id=? ORDER BY id";
$query = $this->executeQuery($sql, array($user_id));
$entries = $query->fetchAll();
@ -250,7 +272,7 @@ class Database {
public function retrieveOneByURL($url, $user_id) {
$entry = NULL;
$sql = "SELECT * FROM entries WHERE url=? AND user_id=?";
$sql = "SELECT * FROM entries WHERE content <> '' AND url=? AND user_id=?";
$params = array($url, $user_id);
$query = $this->executeQuery($sql, $params);
$entry = $query->fetchAll();
@ -267,21 +289,22 @@ class Database {
public function getEntriesByView($view, $user_id, $limit = '', $tag_id = 0) {
switch ($view) {
case 'archive':
$sql = "SELECT * FROM entries WHERE user_id=? AND is_read=? ";
$sql = "SELECT * FROM entries WHERE content <> '' AND user_id=? AND is_read=? ";
$params = array($user_id, 1);
break;
case 'fav' :
$sql = "SELECT * FROM entries WHERE user_id=? AND is_fav=? ";
$sql = "SELECT * FROM entries WHERE content <> '' AND user_id=? AND is_fav=? ";
$params = array($user_id, 1);
break;
case 'tag' :
$sql = "SELECT entries.* FROM entries
LEFT JOIN tags_entries ON tags_entries.entry_id=entries.id
WHERE entries.user_id=? AND tags_entries.tag_id = ? ";
WHERE entries.content <> '' AND
entries.user_id=? AND tags_entries.tag_id = ? ";
$params = array($user_id, $tag_id);
break;
default:
$sql = "SELECT * FROM entries WHERE user_id=? AND is_read=? ";
$sql = "SELECT * FROM entries WHERE content <> '' AND user_id=? AND is_read=? ";
$params = array($user_id, 0);
break;
}
@ -294,24 +317,25 @@ class Database {
return $entries;
}
public function getEntriesByViewCount($view, $user_id, $tag_id = 0) {
switch ($view) {
public function getEntriesByViewCount($view, $user_id, $tag_id = 0) {
switch ($view) {
case 'archive':
$sql = "SELECT count(*) FROM entries WHERE user_id=? AND is_read=? ";
$sql = "SELECT count(*) FROM entries WHERE content <> '' AND user_id=? AND is_read=? ";
$params = array($user_id, 1);
break;
case 'fav' :
$sql = "SELECT count(*) FROM entries WHERE user_id=? AND is_fav=? ";
$sql = "SELECT count(*) FROM entries WHERE content <> '' AND user_id=? AND is_fav=? ";
$params = array($user_id, 1);
break;
case 'tag' :
$sql = "SELECT count(*) FROM entries
LEFT JOIN tags_entries ON tags_entries.entry_id=entries.id
WHERE entries.user_id=? AND tags_entries.tag_id = ? ";
$params = array($user_id, $tag_id);
break;
case 'tag' :
$sql = "SELECT count(*) FROM entries
LEFT JOIN tags_entries ON tags_entries.entry_id=entries.id
WHERE entries.content <> '' AND
entries.user_id=? AND tags_entries.tag_id = ? ";
$params = array($user_id, $tag_id);
break;
default:
$sql = "SELECT count(*) FROM entries WHERE user_id=? AND is_read=? ";
$sql = "SELECT count(*) FROM entries WHERE content <> '' AND user_id=? AND is_read=? ";
$params = array($user_id, 0);
break;
}
@ -319,7 +343,7 @@ class Database {
$query = $this->executeQuery($sql, $params);
list($count) = $query->fetch();
return $count;
return $count;
}
public function updateContent($id, $content, $user_id) {
@ -369,7 +393,7 @@ class Database {
$sql = "SELECT DISTINCT tags.* FROM tags
LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id
LEFT JOIN entries ON tags_entries.entry_id=entries.id
WHERE entries.user_id=?";
WHERE entries.content <> '' AND entries.user_id=?";
$query = $this->executeQuery($sql, array($user_id));
$tags = $query->fetchAll();
@ -381,7 +405,7 @@ class Database {
$sql = "SELECT DISTINCT tags.* FROM tags
LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id
LEFT JOIN entries ON tags_entries.entry_id=entries.id
WHERE tags.id=? AND entries.user_id=?";
WHERE entries.content <> '' AND tags.id=? AND entries.user_id=?";
$params = array(intval($id), $user_id);
$query = $this->executeQuery($sql, $params);
$tag = $query->fetchAll();
@ -393,7 +417,8 @@ class Database {
$sql =
"SELECT entries.* FROM entries
LEFT JOIN tags_entries ON tags_entries.entry_id=entries.id
WHERE tags_entries.tag_id = ? AND entries.user_id=?";
WHERE entries.content <> '' AND
tags_entries.tag_id = ? AND entries.user_id=?";
$query = $this->executeQuery($sql, array($tag_id, $user_id));
$entries = $query->fetchAll();

View file

@ -362,60 +362,6 @@ class Poche
);
}
protected function getPageContent(Url $url)
{
// Saving and clearing context
$REAL = array();
foreach( $GLOBALS as $key => $value ) {
if( $key != 'GLOBALS' && $key != '_SESSION' && $key != 'HTTP_SESSION_VARS' ) {
$GLOBALS[$key] = array();
$REAL[$key] = $value;
}
}
// Saving and clearing session
$REAL_SESSION = array();
foreach( $_SESSION as $key => $value ) {
$REAL_SESSION[$key] = $value;
unset($_SESSION[$key]);
}
// Running code in different context
$scope = function() {
extract( func_get_arg(1) );
$_GET = $_REQUEST = array(
"url" => $url->getUrl(),
"max" => 5,
"links" => "preserve",
"exc" => "",
"format" => "json",
"submit" => "Create Feed"
);
ob_start();
require func_get_arg(0);
$json = ob_get_flush();
return $json;
};
$json = $scope( "inc/3rdparty/makefulltextfeed.php", array("url" => $url) );
// Clearing and restoring context
foreach( $GLOBALS as $key => $value ) {
if( $key != "GLOBALS" && $key != "_SESSION" ) {
unset($GLOBALS[$key]);
}
}
foreach( $REAL as $key => $value ) {
$GLOBALS[$key] = $value;
}
// Clearing and restoring session
foreach( $_SESSION as $key => $value ) {
unset($_SESSION[$key]);
}
foreach( $REAL_SESSION as $key => $value ) {
$_SESSION[$key] = $value;
}
return json_decode($json, true);
}
/**
* Call action (mark as fav, archive, delete, etc.)
*/
@ -424,15 +370,21 @@ class Poche
switch ($action)
{
case 'add':
$content = $this->getPageContent($url);
$title = ($content['rss']['channel']['item']['title'] != '') ? $content['rss']['channel']['item']['title'] : _('Untitled');
$body = $content['rss']['channel']['item']['description'];
if (!$import) {
$content = Tools::getPageContent($url);
$title = ($content['rss']['channel']['item']['title'] != '') ? $content['rss']['channel']['item']['title'] : _('Untitled');
$body = $content['rss']['channel']['item']['description'];
// clean content from prevent xss attack
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$title = $purifier->purify($title);
$body = $purifier->purify($body);
// clean content from prevent xss attack
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$title = $purifier->purify($title);
$body = $purifier->purify($body);
}
else {
$title = '';
$body = '';
}
//search for possible duplicate if not in import mode
if (!$import) {
@ -903,7 +855,7 @@ class Poche
# the second <ol> is for read links
$read = 1;
}
$this->messages->add('s', _('import from instapaper completed'));
$this->messages->add('s', _('import from instapaper completed. You have to execute the cron to fetch content.'));
Tools::logm('import from instapaper completed');
Tools::redirect();
}
@ -947,7 +899,7 @@ class Poche
# the second <ul> is for read links
$read = 1;
}
$this->messages->add('s', _('import from pocket completed'));
$this->messages->add('s', _('import from pocket completed. You have to execute the cron to fetch content.'));
Tools::logm('import from pocket completed');
Tools::redirect();
}
@ -1003,7 +955,7 @@ class Poche
}
}
}
$this->messages->add('s', _('import from Readability completed. ' . $count . ' new links.'));
$this->messages->add('s', _('import from Readability completed. You have to execute the cron to fetch content.'));
Tools::logm('import from Readability completed');
Tools::redirect();
}
@ -1049,7 +1001,7 @@ class Poche
}
}
$this->messages->add('s', _('import from Poche completed. ' . $count . ' new links.'));
$this->messages->add('s', _('import from Poche completed. You have to execute the cron to fetch content.'));
Tools::logm('import from Poche completed');
Tools::redirect();
}
@ -1074,13 +1026,7 @@ class Poche
Tools::redirect();
}
$targetDefinition = 'IMPORT_' . strtoupper($from) . '_FILE';
$targetFile = constant($targetDefinition);
if (! defined($targetDefinition)) {
$this->messages->add('e', _('Incomplete inc/poche/define.inc.php file, please define "' . $targetDefinition . '".'));
Tools::redirect();
}
$targetFile = CACHE . '/' . constant(strtoupper($from) . '_FILE');
if (! file_exists($targetFile)) {
$this->messages->add('e', _('Could not find required "' . $targetFile . '" import file.'));
@ -1090,6 +1036,22 @@ class Poche
$this->$providers[$from]($targetFile);
}
public function uploadFile() {
if(isset($_FILES['file']))
{
$dir = CACHE . '/';
$file = basename($_FILES['file']['name']);
if(move_uploaded_file($_FILES['file']['tmp_name'], $dir . $file)) {
$this->messages->add('s', _('File uploaded. You can now execute import.'));
}
else {
$this->messages->add('e', _('Error while importing file. Do you have access to upload it?'));
}
}
Tools::redirect('?view=config');
}
/**
* export poche entries in json
* @return json all poche entries

View file

@ -193,7 +193,7 @@ class Tools
public static function logm($message)
{
if (DEBUG_POCHE) {
if (DEBUG_POCHE && php_sapi_name() != 'cli') {
$t = strval(date('Y/m/d_H:i:s')) . ' - ' . $_SERVER["REMOTE_ADDR"] . ' - ' . strval($message) . "\n";
file_put_contents(CACHE . '/log.txt', $t, FILE_APPEND);
error_log('DEBUG POCHE : ' . $message);
@ -241,7 +241,6 @@ class Tools
}
}
public static function download_db() {
header('Content-Disposition: attachment; filename="poche.sqlite.gz"');
self::status(200);
@ -252,4 +251,64 @@ class Tools
exit;
}
public static function getPageContent(Url $url)
{
// Saving and clearing context
$REAL = array();
foreach( $GLOBALS as $key => $value ) {
if( $key != 'GLOBALS' && $key != '_SESSION' && $key != 'HTTP_SESSION_VARS' ) {
$GLOBALS[$key] = array();
$REAL[$key] = $value;
}
}
// Saving and clearing session
if ( isset($_SESSION) ) {
$REAL_SESSION = array();
foreach( $_SESSION as $key => $value ) {
$REAL_SESSION[$key] = $value;
unset($_SESSION[$key]);
}
}
// Running code in different context
$scope = function() {
extract( func_get_arg(1) );
$_GET = $_REQUEST = array(
"url" => $url->getUrl(),
"max" => 5,
"links" => "preserve",
"exc" => "",
"format" => "json",
"submit" => "Create Feed"
);
ob_start();
require func_get_arg(0);
$json = ob_get_contents();
ob_end_clean();
return $json;
};
$json = $scope( "inc/3rdparty/makefulltextfeed.php", array("url" => $url) );
// Clearing and restoring context
foreach( $GLOBALS as $key => $value ) {
if( $key != "GLOBALS" && $key != "_SESSION" ) {
unset($GLOBALS[$key]);
}
}
foreach( $REAL as $key => $value ) {
$GLOBALS[$key] = $value;
}
// Clearing and restoring session
if ( isset($REAL_SESSION) ) {
foreach( $_SESSION as $key => $value ) {
unset($_SESSION[$key]);
}
foreach( $REAL_SESSION as $key => $value ) {
$_SESSION[$key] = $value;
}
}
return json_decode($json, true);
}
}