'fr_FR.utf8' => 'Français',
'it_IT.utf8' => 'Italiano',
'pl_PL.utf8' => 'Polski',
+ 'pt_BR.utf8' => 'Português (Brasil)',
'ru_RU.utf8' => 'Pусский',
'sl_SI.utf8' => 'Slovenščina',
'uk_UA.utf8' => 'Українська',
- 'pt_BR.utf8' => 'Brasileiro',
);
public function __construct()
{
// clean content from prevent xss attack
$config = HTMLPurifier_Config::createDefault();
+ $config->set('Cache.SerializerPath', CACHE);
$purifier = new HTMLPurifier($config);
$title = $purifier->purify($title);
$body = $purifier->purify($body);
}
//search for possible duplicate if not in import mode
+ $duplicate = NULL;
if (!$import) {
$duplicate = $this->store->retrieveOneByURL($url->getUrl(), $this->user->getId());
}
Tools::logm('error : article not found');
Tools::redirect();
}
+ //get all already set tags to preven duplicates
+ $already_set_tags = array();
+ $entry_tags = $this->store->retrieveTagsByEntry($entry_id);
+ foreach ($entry_tags as $tag) {
+ $already_set_tags[] = $tag['value'];
+ }
foreach($tags as $key => $tag_value) {
$value = trim($tag_value);
- $tag = $this->store->retrieveTagByValue($value);
-
- if (is_null($tag)) {
- # we create the tag
- $tag = $this->store->createTag($value);
- $sequence = '';
- if (STORAGE == 'postgres') {
- $sequence = 'tags_id_seq';
- }
- $tag_id = $this->store->getLastId($sequence);
- }
- else {
- $tag_id = $tag['id'];
+ if ($value && !in_array($value, $already_set_tags)) {
+ $tag = $this->store->retrieveTagByValue($value);
+
+ if (is_null($tag)) {
+ # we create the tag
+ $tag = $this->store->createTag($value);
+ $sequence = '';
+ if (STORAGE == 'postgres') {
+ $sequence = 'tags_id_seq';
+ }
+ $tag_id = $this->store->getLastId($sequence);
+ }
+ else {
+ $tag_id = $tag['id'];
+ }
+
+ # we assign the tag to the article
+ $this->store->setTagToEntry($tag_id, $entry_id);
}
-
- # we assign the tag to the article
- $this->store->setTagToEntry($tag_id, $entry_id);
}
if(!$import) {
Tools::redirect();
switch ($view)
{
case 'config':
- $dev = trim($this->getPocheVersion('dev'));
- $prod = trim($this->getPocheVersion('prod'));
+ $dev_infos = $this->getPocheVersion('dev');
+ $dev = trim($dev_infos[0]);
+ $check_time_dev = date('d-M-Y H:i', $dev_infos[1]);
+ $prod_infos = $this->getPocheVersion('prod');
+ $prod = trim($prod_infos[0]);
+ $check_time_prod = date('d-M-Y H:i', $prod_infos[1]);
$compare_dev = version_compare(POCHE, $dev);
$compare_prod = version_compare(POCHE, $prod);
$themes = $this->getInstalledThemes();
'languages' => $languages,
'dev' => $dev,
'prod' => $prod,
+ 'check_time_dev' => $check_time_dev,
+ 'check_time_prod' => $check_time_prod,
'compare_dev' => $compare_dev,
'compare_prod' => $compare_prod,
'token' => $token,
break;
case 'tags':
$token = $this->user->getConfigValue('token');
- $tags = $this->store->retrieveAllTags($this->user->getId());
+ //if term is set - search tags for this term
+ $term = Tools::checkVar('term');
+ $tags = $this->store->retrieveAllTags($this->user->getId(), $term);
+ if (Tools::isAjaxRequest()) {
+ $result = array();
+ foreach ($tags as $tag) {
+ $result[] = $tag['value'];
+ }
+ echo json_encode($result);
+ exit;
+ }
$tpl_vars = array(
'token' => $token,
'user_id' => $this->user->getId(),
# the second <ol> is for read links
$read = 1;
}
+
+ $unlink = unlink($targetFile);
$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();
# the second <ul> is for read links
$read = 1;
}
+
+ $unlink = unlink($targetFile);
$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();
}
}
}
+
+ unlink($targetFile);
$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();
}
}
+
+ unlink($targetFile);
$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();
private function getPocheVersion($which = 'prod')
{
$cache_file = CACHE . '/' . $which;
+ $check_time = time();
# checks if the cached version file exists
if (file_exists($cache_file) && (filemtime($cache_file) > (time() - 86400 ))) {
$version = file_get_contents($cache_file);
+ $check_time = filemtime($cache_file);
} else {
$version = file_get_contents('http://static.wallabag.org/versions/' . $which);
file_put_contents($cache_file, $version, LOCK_EX);
}
- return $version;
+ return array($version, $check_time);
}
public function generateToken()
$allowed_types = array('home', 'fav', 'archive', 'tag');
$config = $this->store->getConfigUser($user_id);
+ if ($config == null) {
+ die(_('User with this id (' . $user_id . ') does not exist.'));
+ }
+
if (!in_array($type, $allowed_types) ||
$token != $config['token']) {
die(_('Uh, there is a problem while generating feeds.'));
$feed = new FeedWriter(RSS2);
$feed->setTitle('wallabag — ' . $type . ' feed');
$feed->setLink(Tools::getPocheUrl());
- $feed->setChannelElement('updated', date(DATE_RSS , time()));
- $feed->setChannelElement('author', 'wallabag');
+ $feed->setChannelElement('pubDate', date(DATE_RSS , time()));
+ $feed->setChannelElement('generator', 'wallabag');
+ $feed->setDescription('wallabag ' . $type . ' elements');
if ($type == 'tag') {
$entries = $this->store->retrieveEntriesByTag($tag_id, $user_id);
foreach ($entries as $entry) {
$newItem = $feed->createNewItem();
$newItem->setTitle($entry['title']);
- $newItem->setLink(Tools::getPocheUrl() . '?view=view&id=' . $entry['id']);
+ $newItem->setLink($entry['url']);
$newItem->setDate(time());
$newItem->setDescription($entry['content']);
$feed->addItem($newItem);