forked from wallabag/wallabag
Compare commits
36 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9796a3aac4 | |||
| 36fd8e5fde | |||
| f2aa373054 | |||
| 4ae4fa7b89 | |||
| 6640a922d1 | |||
| 246cc9ac93 | |||
| f1f1efb5de | |||
| 806635f7d5 | |||
| 05232afe32 | |||
| fb7dedf36c | |||
| 1e9c710fdd | |||
| d5154ee2ae | |||
| 4de99d1ab1 | |||
| 12a97c3522 | |||
| 508302042f | |||
| 9a7a0e1e6b | |||
| 4e0ed3368d | |||
| c01bda038e | |||
| b1992b340e | |||
| 44560c7767 | |||
| 0182cdaec4 | |||
| a9f61d3dbb | |||
| 47e4784110 | |||
| 7e04bd4ca4 | |||
| 755753e3ef | |||
| 8d082488e9 | |||
| a2e60dd393 | |||
| b992522d85 | |||
| 293730656d | |||
| 6b32cf0c73 | |||
| 1ec44a346b | |||
| f6b9e883c0 | |||
| 78e3fafa3f | |||
| a5e9a98aa3 | |||
| f083836cc4 | |||
| 314f647238 |
@ -73,7 +73,7 @@ before_script:
|
||||
- sudo swapon -s
|
||||
|
||||
script:
|
||||
- travis_wait bash composer install -o --no-interaction --no-progress --prefer-dist
|
||||
- travis_wait bash composer update -o --no-interaction --no-progress --prefer-dist
|
||||
- echo "travis_fold:start:prepare"
|
||||
- make prepare DB=$DB
|
||||
- echo "travis_fold:end:prepare"
|
||||
|
||||
18
CHANGELOG.md
18
CHANGELOG.md
@ -1,5 +1,23 @@
|
||||
# Changelog
|
||||
|
||||
## [2.3.7](https://github.com/wallabag/wallabag/tree/2.3.7)
|
||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.3.6...2.3.7)
|
||||
|
||||
### Fixes
|
||||
|
||||
- Jump to 2.3.7-dev [#3837](https://github.com/wallabag/wallabag/pull/3837)
|
||||
- Fix bad order parameter in the API [#3841](https://github.com/wallabag/wallabag/pull/3841)
|
||||
- Update composer.json to add php-tidy (ext-tidy) [#3853](https://github.com/wallabag/wallabag/pull/3853)
|
||||
- Add dedicated email for site config issue [#3861](https://github.com/wallabag/wallabag/pull/3861)
|
||||
- Fix read & starred status in Pocket import [#3819](https://github.com/wallabag/wallabag/pull/3819)
|
||||
- Fix broken 2 factor auth logo image [#3869](https://github.com/wallabag/wallabag/pull/3869)
|
||||
- Fix CORS for API [#3882](https://github.com/wallabag/wallabag/pull/3882)
|
||||
- Add support of expect parameter to change return object when deleting entry [#3887](https://github.com/wallabag/wallabag/pull/3887)
|
||||
- epub export: fix missing cover image, only for exports of one article [#3886](https://github.com/wallabag/wallabag/pull/3886)
|
||||
- Allow optional --ignore-root-warning [#3885](https://github.com/wallabag/wallabag/pull/3885)
|
||||
- material: fix left padding of content on medium screens [#3893](https://github.com/wallabag/wallabag/pull/3893)
|
||||
- material: hide creation date from card actions on specific sizes [#3894](https://github.com/wallabag/wallabag/pull/3894)
|
||||
|
||||
## [2.3.6](https://github.com/wallabag/wallabag/tree/2.3.6)
|
||||
[Full Changelog](https://github.com/wallabag/wallabag/compare/2.3.5...2.3.6)
|
||||
|
||||
|
||||
@ -102,6 +102,11 @@ main {
|
||||
display: inline-flex;
|
||||
vertical-align: middle;
|
||||
|
||||
.card-reading-time,
|
||||
.card-created-at {
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
span {
|
||||
margin-right: 5px;
|
||||
}
|
||||
@ -272,9 +277,3 @@ a.original:not(.waves-effect) {
|
||||
.settings .div_tabs {
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 992px) {
|
||||
.card-tag-labels li {
|
||||
max-width: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,6 +12,16 @@
|
||||
.pagination {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.card-tag-labels li {
|
||||
max-width: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 993px) {
|
||||
main #content {
|
||||
padding-left: 70px;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 992px) {
|
||||
@ -164,3 +174,12 @@
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 310px),
|
||||
screen and (min-width: 601px) and (max-width: 660px),
|
||||
screen and (min-width: 993px) and (max-width: 1050px),
|
||||
screen and (min-width: 1201px) and (max-width: 1250px) {
|
||||
.card .card-action .reading-time .card-created-at {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@ -147,18 +147,18 @@ nelmio_cors:
|
||||
paths:
|
||||
'^/api/':
|
||||
allow_origin: ['*']
|
||||
allow_headers: ['X-Custom-Auth']
|
||||
allow_headers: ['Authorization','content-type']
|
||||
allow_methods: ['POST', 'PUT', 'PATCH','GET', 'DELETE']
|
||||
max_age: 3600
|
||||
'^/oauth/':
|
||||
allow_origin: ['*']
|
||||
allow_headers: ['X-Custom-Auth']
|
||||
allow_headers: ['Authorization','content-type']
|
||||
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
|
||||
max_age: 3600
|
||||
'^/':
|
||||
#origin_regex: true
|
||||
allow_origin: ['^http://localhost:[0-9]+']
|
||||
allow_headers: ['X-Custom-Auth']
|
||||
allow_origin: ['*']
|
||||
allow_headers: ['Authorization','content-type']
|
||||
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
|
||||
max_age: 3600
|
||||
hosts: ['^api\.']
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
wallabag_core:
|
||||
version: 2.3.6
|
||||
version: 2.3.7
|
||||
paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
|
||||
languages:
|
||||
en: 'English'
|
||||
|
||||
@ -43,6 +43,7 @@
|
||||
"ext-iconv": "*",
|
||||
"ext-tokenizer": "*",
|
||||
"ext-pdo": "*",
|
||||
"ext-tidy": "*",
|
||||
"symfony/symfony": "~3.3.13",
|
||||
"doctrine/orm": "^2.5.12",
|
||||
"doctrine/doctrine-bundle": "^1.8.0",
|
||||
@ -91,7 +92,7 @@
|
||||
"doctrine/doctrine-fixtures-bundle": "~2.2",
|
||||
"doctrine/data-fixtures": "~1.1",
|
||||
"sensio/generator-bundle": "^3.0",
|
||||
"symfony/phpunit-bridge": "3.4.x-dev",
|
||||
"symfony/phpunit-bridge": "^4.2",
|
||||
"friendsofphp/php-cs-fixer": "~2.0",
|
||||
"m6web/redis-mock": "^2.0",
|
||||
"dama/doctrine-test-bundle": "^4.0"
|
||||
|
||||
7708
composer.lock
generated
Normal file
7708
composer.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -5,9 +5,17 @@
|
||||
IGNORE_ROOT_ARG="--ignore-root-warning"
|
||||
IGNORE_ROOT=0
|
||||
|
||||
if [ "$1" == "$IGNORE_ROOT_ARG" ]; then
|
||||
IGNORE_ROOT=1
|
||||
fi
|
||||
while :; do
|
||||
case $1 in
|
||||
$IGNORE_ROOT_ARG) IGNORE_ROOT=1
|
||||
;;
|
||||
*[a-zA-Z]) ENV=$1
|
||||
;;
|
||||
*) break
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# Abort running this script if root
|
||||
if [ "$IGNORE_ROOT" -eq 0 ] && [ "$EUID" == "0" ]; then
|
||||
@ -22,7 +30,6 @@ DIR="${BASH_SOURCE}"
|
||||
if [ ! -d "$DIR" ]; then DIR="$PWD/scripts"; fi
|
||||
. "$DIR/require.sh"
|
||||
|
||||
ENV=$1
|
||||
TAG=$(git describe --tags $(git rev-list --tags --max-count=1))
|
||||
|
||||
git checkout $TAG
|
||||
|
||||
@ -5,9 +5,17 @@
|
||||
IGNORE_ROOT_ARG="--ignore-root-warning"
|
||||
IGNORE_ROOT=0
|
||||
|
||||
if [ "$1" == "$IGNORE_ROOT_ARG" ]; then
|
||||
IGNORE_ROOT=1
|
||||
fi
|
||||
while :; do
|
||||
case $1 in
|
||||
$IGNORE_ROOT_ARG) IGNORE_ROOT=1
|
||||
;;
|
||||
*[a-zA-Z]) ENV=$1
|
||||
;;
|
||||
*) break
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# Abort running this script if root
|
||||
if [ "$IGNORE_ROOT" -eq 0 ] && [ "$EUID" == "0" ]; then
|
||||
@ -25,8 +33,6 @@ DIR="${BASH_SOURCE}"
|
||||
if [ ! -d "$DIR" ]; then DIR="$PWD/scripts"; fi
|
||||
. "$DIR/require.sh"
|
||||
|
||||
ENV=$1
|
||||
|
||||
rm -rf var/cache/*
|
||||
git fetch origin
|
||||
git fetch --tags
|
||||
|
||||
@ -9,6 +9,7 @@ use Nelmio\ApiDocBundle\Annotation\ApiDoc;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||
use Wallabag\CoreBundle\Entity\Entry;
|
||||
@ -98,24 +99,28 @@ class EntryRestController extends WallabagRestController
|
||||
$isArchived = (null === $request->query->get('archive')) ? null : (bool) $request->query->get('archive');
|
||||
$isStarred = (null === $request->query->get('starred')) ? null : (bool) $request->query->get('starred');
|
||||
$isPublic = (null === $request->query->get('public')) ? null : (bool) $request->query->get('public');
|
||||
$sort = $request->query->get('sort', 'created');
|
||||
$order = $request->query->get('order', 'desc');
|
||||
$sort = strtolower($request->query->get('sort', 'created'));
|
||||
$order = strtolower($request->query->get('order', 'desc'));
|
||||
$page = (int) $request->query->get('page', 1);
|
||||
$perPage = (int) $request->query->get('perPage', 30);
|
||||
$tags = \is_array($request->query->get('tags')) ? '' : (string) $request->query->get('tags', '');
|
||||
$since = $request->query->get('since', 0);
|
||||
|
||||
/** @var \Pagerfanta\Pagerfanta $pager */
|
||||
$pager = $this->get('wallabag_core.entry_repository')->findEntries(
|
||||
$this->getUser()->getId(),
|
||||
$isArchived,
|
||||
$isStarred,
|
||||
$isPublic,
|
||||
$sort,
|
||||
$order,
|
||||
$since,
|
||||
$tags
|
||||
);
|
||||
try {
|
||||
/** @var \Pagerfanta\Pagerfanta $pager */
|
||||
$pager = $this->get('wallabag_core.entry_repository')->findEntries(
|
||||
$this->getUser()->getId(),
|
||||
$isArchived,
|
||||
$isStarred,
|
||||
$isPublic,
|
||||
$sort,
|
||||
$order,
|
||||
$since,
|
||||
$tags
|
||||
);
|
||||
} catch (\Exception $e) {
|
||||
throw new BadRequestHttpException($e->getMessage());
|
||||
}
|
||||
|
||||
$pager->setMaxPerPage($perPage);
|
||||
$pager->setCurrentPage($page);
|
||||
@ -565,18 +570,31 @@ class EntryRestController extends WallabagRestController
|
||||
* @ApiDoc(
|
||||
* requirements={
|
||||
* {"name"="entry", "dataType"="integer", "requirement"="\w+", "description"="The entry ID"}
|
||||
* },
|
||||
* parameters={
|
||||
* {"name"="expect", "dataType"="string", "required"=false, "format"="id or entry", "description"="Only returns the id instead of the deleted entry's full entity if 'id' is specified. Default to entry"},
|
||||
* }
|
||||
* )
|
||||
*
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function deleteEntriesAction(Entry $entry)
|
||||
public function deleteEntriesAction(Entry $entry, Request $request)
|
||||
{
|
||||
$expect = $request->query->get('expect', 'entry');
|
||||
if (!\in_array($expect, ['id', 'entry'], true)) {
|
||||
throw new BadRequestHttpException(sprintf("expect: 'id' or 'entry' expected, %s given", $expect));
|
||||
}
|
||||
$this->validateAuthentication();
|
||||
$this->validateUserAccess($entry->getUser()->getId());
|
||||
|
||||
// We copy $entry to keep id in returned object
|
||||
$e = $entry;
|
||||
$response = $this->sendResponse([
|
||||
'id' => $entry->getId(),
|
||||
]);
|
||||
// We clone $entry to keep id in returned object
|
||||
if ('entry' === $expect) {
|
||||
$e = clone $entry;
|
||||
$response = $this->sendResponse($e);
|
||||
}
|
||||
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
$em->remove($entry);
|
||||
@ -585,7 +603,7 @@ class EntryRestController extends WallabagRestController
|
||||
// entry deleted, dispatch event about it!
|
||||
$this->get('event_dispatcher')->dispatch(EntryDeletedEvent::NAME, new EntryDeletedEvent($entry));
|
||||
|
||||
return $this->sendResponse($e);
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -108,7 +108,7 @@ class EntryFilterType extends AbstractType
|
||||
->add('httpStatus', TextFilterType::class, [
|
||||
'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
|
||||
$value = $values['value'];
|
||||
if (false === array_key_exists($value, Response::$statusTexts)) {
|
||||
if (false === \array_key_exists($value, Response::$statusTexts)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -165,13 +165,6 @@ class EntriesExport
|
||||
$book->addDublinCoreMetadata(DublinCore::CONTRIBUTOR, 'PHP');
|
||||
$book->addDublinCoreMetadata(DublinCore::CONTRIBUTOR, 'wallabag');
|
||||
|
||||
/*
|
||||
* Front page
|
||||
*/
|
||||
if (file_exists($this->logoPath)) {
|
||||
$book->setCoverImage('Cover.png', file_get_contents($this->logoPath), 'image/png');
|
||||
}
|
||||
|
||||
$entryIds = [];
|
||||
$entryCount = \count($this->entries);
|
||||
$i = 0;
|
||||
@ -183,6 +176,15 @@ class EntriesExport
|
||||
// set tags as subjects
|
||||
foreach ($this->entries as $entry) {
|
||||
++$i;
|
||||
|
||||
/*
|
||||
* Front page
|
||||
* Set if there's only one entry in the given set
|
||||
*/
|
||||
if (1 === $entryCount && null !== $entry->getPreviewPicture()) {
|
||||
$book->setCoverImage($entry->getPreviewPicture());
|
||||
}
|
||||
|
||||
foreach ($entry->getTags() as $tag) {
|
||||
$book->setSubject($tag->getLabel());
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@ class PreparePagerForEntries
|
||||
* @param AdapterInterface $adapter
|
||||
* @param User $user If user isn't logged in, we can force it (like for rss)
|
||||
*
|
||||
* @return null|Pagerfanta
|
||||
* @return Pagerfanta|null
|
||||
*/
|
||||
public function prepare(AdapterInterface $adapter, User $user = null)
|
||||
{
|
||||
|
||||
@ -142,7 +142,7 @@ class EntryRepository extends EntityRepository
|
||||
*
|
||||
* @return Pagerfanta
|
||||
*/
|
||||
public function findEntries($userId, $isArchived = null, $isStarred = null, $isPublic = null, $sort = 'created', $order = 'ASC', $since = 0, $tags = '')
|
||||
public function findEntries($userId, $isArchived = null, $isStarred = null, $isPublic = null, $sort = 'created', $order = 'asc', $since = 0, $tags = '')
|
||||
{
|
||||
$qb = $this->createQueryBuilder('e')
|
||||
->leftJoin('e.tags', 't')
|
||||
@ -185,6 +185,10 @@ class EntryRepository extends EntityRepository
|
||||
}
|
||||
}
|
||||
|
||||
if (!\in_array(strtolower($order), ['asc', 'desc'], true)) {
|
||||
throw new \Exception('Order "' . $order . '" parameter is wrong, allowed: asc or desc');
|
||||
}
|
||||
|
||||
if ('created' === $sort) {
|
||||
$qb->orderBy('e.id', $order);
|
||||
} elseif ('updated' === $sort) {
|
||||
|
||||
@ -22,7 +22,7 @@ class SiteCredentialRepository extends \Doctrine\ORM\EntityRepository
|
||||
* @param string $host
|
||||
* @param int $userId
|
||||
*
|
||||
* @return null|array
|
||||
* @return array|null
|
||||
*/
|
||||
public function findOneByHostAndUser($host, $userId)
|
||||
{
|
||||
|
||||
@ -38,7 +38,7 @@
|
||||
{% if craue_setting('export_epub') %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'epub' }) }}" title="Generate ePub file">EPUB</a></li>{% endif %}
|
||||
{% if craue_setting('export_mobi') %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'mobi' }) }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
|
||||
{% if craue_setting('export_pdf') %}<li><a href="{{ path('export_entry', { 'id': entry.id, 'format': 'pdf' }) }}" title="Generate PDF file">PDF</a></li>{% endif %}
|
||||
<li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.label'|trans }}" class="tool bad-display icon icon-delete"><span>{{ 'entry.view.left_menu.problem.label'|trans }}</span></a></li>
|
||||
<li><a href="mailto:siteconfig@wallabag.org?subject=Wrong%20display%20in%20wallabag&body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.label'|trans }}" class="tool bad-display icon icon-delete"><span>{{ 'entry.view.left_menu.problem.label'|trans }}</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
@ -1,9 +1,11 @@
|
||||
<div class="card-action">
|
||||
<span class="reading-time grey-text">
|
||||
{% include "@WallabagCore/themes/material/Entry/_reading_time.html.twig" with {'entry': entry} only %}
|
||||
<i class="material-icons hide-on-med-and-down" title="{{ 'entry.view.created_at'|trans }}">today</i>
|
||||
<span class="hide-on-med-and-down"> {{ entry.createdAt|date('Y-m-d') }}</span>
|
||||
</span>
|
||||
<div class="reading-time grey-text">
|
||||
<div class="card-reading-time">{% include "@WallabagCore/themes/material/Entry/_reading_time.html.twig" with {'entry': entry} only %}</div>
|
||||
<div class="card-created-at">
|
||||
<i class="material-icons" title="{{ 'entry.view.created_at'|trans }}">today</i>
|
||||
<span> {{ entry.createdAt|date('Y-m-d') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul class="tools right">
|
||||
<li>
|
||||
|
||||
@ -209,7 +209,7 @@
|
||||
</li>
|
||||
|
||||
<li class="bold">
|
||||
<a class="waves-effect collapsible-header" href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.description'|trans }}">
|
||||
<a class="waves-effect collapsible-header" href="mailto:siteconfig@wallabag.org?subject=Wrong%20display%20in%20wallabag&body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.description'|trans }}">
|
||||
<i class="material-icons small">error</i>
|
||||
<span>{{ 'entry.view.left_menu.problem.label'|trans }}</span>
|
||||
</a>
|
||||
|
||||
@ -77,7 +77,7 @@ abstract class BrowserImport extends AbstractImport
|
||||
*/
|
||||
public function parseEntry(array $importedEntry)
|
||||
{
|
||||
if ((!array_key_exists('guid', $importedEntry) || (!array_key_exists('id', $importedEntry))) && \is_array(reset($importedEntry))) {
|
||||
if ((!\array_key_exists('guid', $importedEntry) || (!\array_key_exists('id', $importedEntry))) && \is_array(reset($importedEntry))) {
|
||||
if ($this->producer) {
|
||||
$this->parseEntriesForProducer($importedEntry);
|
||||
|
||||
@ -89,7 +89,7 @@ abstract class BrowserImport extends AbstractImport
|
||||
return;
|
||||
}
|
||||
|
||||
if (array_key_exists('children', $importedEntry)) {
|
||||
if (\array_key_exists('children', $importedEntry)) {
|
||||
if ($this->producer) {
|
||||
$this->parseEntriesForProducer($importedEntry['children']);
|
||||
|
||||
@ -101,11 +101,11 @@ abstract class BrowserImport extends AbstractImport
|
||||
return;
|
||||
}
|
||||
|
||||
if (!array_key_exists('uri', $importedEntry) && !array_key_exists('url', $importedEntry)) {
|
||||
if (!\array_key_exists('uri', $importedEntry) && !\array_key_exists('url', $importedEntry)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$url = array_key_exists('uri', $importedEntry) ? $importedEntry['uri'] : $importedEntry['url'];
|
||||
$url = \array_key_exists('uri', $importedEntry) ? $importedEntry['uri'] : $importedEntry['url'];
|
||||
|
||||
$existingEntry = $this->em
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
@ -126,7 +126,7 @@ abstract class BrowserImport extends AbstractImport
|
||||
// update entry with content (in case fetching failed, the given entry will be return)
|
||||
$this->fetchContent($entry, $data['url'], $data);
|
||||
|
||||
if (array_key_exists('tags', $data)) {
|
||||
if (\array_key_exists('tags', $data)) {
|
||||
$this->tagsAssigner->assignTagsToEntry(
|
||||
$entry,
|
||||
$data['tags']
|
||||
|
||||
@ -57,7 +57,7 @@ class ChromeImport extends BrowserImport
|
||||
'created_at' => substr($entry['date_added'], 0, 10),
|
||||
];
|
||||
|
||||
if (array_key_exists('tags', $entry) && '' !== $entry['tags']) {
|
||||
if (\array_key_exists('tags', $entry) && '' !== $entry['tags']) {
|
||||
$data['tags'] = $entry['tags'];
|
||||
}
|
||||
|
||||
|
||||
@ -57,7 +57,7 @@ class FirefoxImport extends BrowserImport
|
||||
'created_at' => substr($entry['dateAdded'], 0, 10),
|
||||
];
|
||||
|
||||
if (array_key_exists('tags', $entry) && '' !== $entry['tags']) {
|
||||
if (\array_key_exists('tags', $entry) && '' !== $entry['tags']) {
|
||||
$data['tags'] = $entry['tags'];
|
||||
}
|
||||
|
||||
|
||||
@ -206,10 +206,10 @@ class PocketImport extends AbstractImport
|
||||
$this->fetchContent($entry, $url);
|
||||
|
||||
// 0, 1, 2 - 1 if the item is archived - 2 if the item should be deleted
|
||||
$entry->setArchived(1 === $importedEntry['status'] || $this->markAsRead);
|
||||
$entry->setArchived(1 === (int) $importedEntry['status'] || $this->markAsRead);
|
||||
|
||||
// 0 or 1 - 1 If the item is starred
|
||||
$entry->setStarred(1 === $importedEntry['favorite']);
|
||||
// 0 or 1 - 1 if the item is starred
|
||||
$entry->setStarred(1 === (int) $importedEntry['favorite']);
|
||||
|
||||
$title = 'Untitled';
|
||||
if (isset($importedEntry['resolved_title']) && '' !== $importedEntry['resolved_title']) {
|
||||
|
||||
@ -122,7 +122,7 @@ abstract class WallabagImport extends AbstractImport
|
||||
// update entry with content (in case fetching failed, the given entry will be return)
|
||||
$this->fetchContent($entry, $data['url'], $data);
|
||||
|
||||
if (array_key_exists('tags', $data)) {
|
||||
if (\array_key_exists('tags', $data)) {
|
||||
$this->tagsAssigner->assignTagsToEntry(
|
||||
$entry,
|
||||
$data['tags'],
|
||||
|
||||
@ -61,7 +61,7 @@ class WallabagV1Import extends WallabagImport
|
||||
$data['html'] = $this->fetchingErrorMessage;
|
||||
}
|
||||
|
||||
if (array_key_exists('tags', $entry) && '' !== $entry['tags']) {
|
||||
if (\array_key_exists('tags', $entry) && '' !== $entry['tags']) {
|
||||
$data['tags'] = $entry['tags'];
|
||||
}
|
||||
|
||||
|
||||
@ -74,7 +74,7 @@
|
||||
|
||||
<table cellpadding="0" cellspacing="0" border="0" align="center" id="card">
|
||||
<tr>
|
||||
<td style="padding: 20px;" width="96px" valign="top"><img class="image_fix" src="{{ absolute_url(asset('wallassets/themes/_global/img/logo-other_themes.png')) }}" alt="logo" title="{{ wallabag_url }}" style="width: 96px; height: 96px;" /></td>
|
||||
<td style="padding: 20px;" width="96px" valign="top"><img class="image_fix" src="{{ absolute_url(asset('wallassets/themes/_global/img/logo-square.svg')) }}" alt="logo" title="{{ wallabag_url }}" style="width: 96px; height: 96px;" /></td>
|
||||
<td style="padding: 20px; padding-left: 0;" valign="top" id="cell_desc">
|
||||
<h1>wallabag</h1>
|
||||
<h5>{{ "auth_code.on"|trans({}, 'wallabag_user') }} {{ wallabag_url }}</h5>
|
||||
|
||||
@ -242,6 +242,15 @@ class EntryRestControllerTest extends WallabagApiTestCase
|
||||
$this->assertSame(2, $content['limit']);
|
||||
}
|
||||
|
||||
public function testGetStarredEntriesWithBadSort()
|
||||
{
|
||||
$this->client->request('GET', '/api/entries', ['starred' => 1, 'sort' => 'updated', 'order' => 'unknown']);
|
||||
|
||||
$this->assertSame(400, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
$this->assertSame('application/json', $this->client->getResponse()->headers->get('Content-Type'));
|
||||
}
|
||||
|
||||
public function testGetStarredEntries()
|
||||
{
|
||||
$this->client->request('GET', '/api/entries', ['starred' => 1, 'sort' => 'updated']);
|
||||
@ -391,29 +400,71 @@ class EntryRestControllerTest extends WallabagApiTestCase
|
||||
|
||||
public function testDeleteEntry()
|
||||
{
|
||||
$entry = $this->client->getContainer()
|
||||
->get('doctrine.orm.entity_manager')
|
||||
->getRepository('WallabagCoreBundle:Entry')
|
||||
->findOneByUser(1, ['id' => 'asc']);
|
||||
$em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
|
||||
$entry = new Entry($em->getReference(User::class, 1));
|
||||
$entry->setUrl('http://0.0.0.0/test-delete-entry');
|
||||
$entry->setTitle('Test delete entry');
|
||||
$em->persist($entry);
|
||||
$em->flush();
|
||||
|
||||
if (!$entry) {
|
||||
$this->markTestSkipped('No content found in db.');
|
||||
}
|
||||
$em->clear();
|
||||
|
||||
$this->client->request('DELETE', '/api/entries/' . $entry->getId() . '.json');
|
||||
$e = [
|
||||
'title' => $entry->getTitle(),
|
||||
'url' => $entry->getUrl(),
|
||||
'id' => $entry->getId(),
|
||||
];
|
||||
|
||||
$this->client->request('DELETE', '/api/entries/' . $e['id'] . '.json');
|
||||
|
||||
$this->assertSame(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
$content = json_decode($this->client->getResponse()->getContent(), true);
|
||||
|
||||
$this->assertSame($entry->getTitle(), $content['title']);
|
||||
$this->assertSame($entry->getUrl(), $content['url']);
|
||||
$this->assertSame($entry->getId(), $content['id']);
|
||||
$this->assertSame($e['title'], $content['title']);
|
||||
$this->assertSame($e['url'], $content['url']);
|
||||
$this->assertSame($e['id'], $content['id']);
|
||||
|
||||
// We'll try to delete this entry again
|
||||
$this->client->request('DELETE', '/api/entries/' . $entry->getId() . '.json');
|
||||
$client = $this->createAuthorizedClient();
|
||||
$client->request('DELETE', '/api/entries/' . $e['id'] . '.json');
|
||||
|
||||
$this->assertSame(404, $this->client->getResponse()->getStatusCode());
|
||||
$this->assertSame(404, $client->getResponse()->getStatusCode());
|
||||
}
|
||||
|
||||
public function testDeleteEntryExpectId()
|
||||
{
|
||||
$em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
|
||||
$entry = new Entry($em->getReference(User::class, 1));
|
||||
$entry->setUrl('http://0.0.0.0/test-delete-entry-id');
|
||||
$em->persist($entry);
|
||||
$em->flush();
|
||||
|
||||
$em->clear();
|
||||
|
||||
$id = $entry->getId();
|
||||
|
||||
$this->client->request('DELETE', '/api/entries/' . $id . '.json?expect=id');
|
||||
|
||||
$this->assertSame(200, $this->client->getResponse()->getStatusCode());
|
||||
|
||||
$content = json_decode($this->client->getResponse()->getContent(), true);
|
||||
|
||||
$this->assertSame($id, $content['id']);
|
||||
$this->assertArrayNotHasKey('url', $content);
|
||||
|
||||
// We'll try to delete this entry again
|
||||
$client = $this->createAuthorizedClient();
|
||||
$client->request('DELETE', '/api/entries/' . $id . '.json');
|
||||
|
||||
$this->assertSame(404, $client->getResponse()->getStatusCode());
|
||||
}
|
||||
|
||||
public function testDeleteEntryExpectBadRequest()
|
||||
{
|
||||
$this->client->request('DELETE', '/api/entries/1.json?expect=badrequest');
|
||||
|
||||
$this->assertSame(400, $this->client->getResponse()->getStatusCode());
|
||||
}
|
||||
|
||||
public function testPostEntry()
|
||||
|
||||
@ -226,6 +226,13 @@ class PocketImportTest extends TestCase
|
||||
->method('getRepository')
|
||||
->willReturn($entryRepo);
|
||||
|
||||
$this->em
|
||||
->expects($this->any())
|
||||
->method('persist')
|
||||
->with($this->callback(function ($persistedEntry) {
|
||||
return $persistedEntry->isArchived() && $persistedEntry->isStarred();
|
||||
}));
|
||||
|
||||
$entry = new Entry($this->user);
|
||||
|
||||
$this->contentProxy
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user