Archived
1
0

Compare commits

...

86 Commits

Author SHA1 Message Date
Thomas Hochstein 80676e4c91 Release 2.3.5
Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-04-25 08:31:13 +02:00
Thomas Hochstein ee21a59222 Release preparations.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-04-25 08:24:39 +02:00
Thomas Hochstein 902d1799fc Restrict block display of summary to trackbacks.
Summary elements in the entry body should get
a triangle symbol displayed (as we do in the
backend).

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-04-25 00:16:44 +02:00
Thomas Hochstein 05840cb189 [plugin_comments] Don't strip HTML unconditionally.
If serendipity_event_unstrip_tags is active, we
don't want to strip HTML tags from comments; we
want to keep and encode them with entities. So
we should do that here, too.

As the frontend_display hook - that is catched by
serendipity_event_unstrip_tags - is called quite
late, we have to skip the strip_tags() call
before truncatin the entry.

(I'm not sure why we first strip _all_ tags and
later on keep _some_ tags (that have already
been removed), but that's maybe because the
frontend_display hook may have re-added some
tags? Be it as it may, we do that for 14
years, so I don't want to change that now.)

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-04-24 15:35:13 +02:00
Thomas Hochstein 6c15c802d5 CK-Editor: allow details and summary.
Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-04-23 18:08:32 +02:00
Thomas Hochstein 62543dbd28 Fix accidental deletion of extended properties.
Was mostly fixed by 8b51c37b98 (see #261),
but which missed 03cc73d77e and the other
older code before the foreach() loop.
Later on, 7fe8d91bc2 did the check for
'propertyform' the wrong way around.

Cherry-picked from master branch.

1.41.4 has *not* been backported.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-04-20 08:56:28 +02:00
Thomas Hochstein ef1279fbec Fix SQL error in plugin_history.
Since merging #665 `serendipity_plugin_history`
breaks with a SQL error message on every archive
page but the first one; see #693 for reason
and context.

Unset `$serendipity['GET']['page']` before
calling `serendipity_fetchEntries()` (and
reset afterwards) to fix that. That's the
correct way, I think, as
`serendipity_fetchEntries()` is not called
in page context here.

Add a note to serendipity_fetchEntries()
about the problem with page context.

Also don't fallback to last page if
$totalPages < 1 in serendipity_fetchEntries()
That should at least avoid SQL errors.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-04-20 08:56:28 +02:00
Stephan Brunker c66451e203 Admin template entrylist: entry title was double escaped.
Cherry-picked from master.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-04-20 08:56:14 +02:00
Thomas Hochstein 64b5d56e00 Unconditionally keep upgraded_version in plugin cache.
See #685 for more information.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-04-20 08:54:25 +02:00
Thomas Hochstein 891b72574c Fix comment in plugin_api.inc.php
Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-04-20 08:54:25 +02:00
Thomas Hochstein 6a8e9637f1 One adv_opts_box should be enough for everybody.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-04-20 08:54:25 +02:00
Thomas Hochstein b446e6333f Fix regexp in functions_routing.incx.php
See #655.

I don't understand the code either (I don't even see
where this code path belongs to - do we have a
facitlity to show comments "from ... to"?), but
the current regexp is obviously wrong, and the
one suggested by @hannob is obviously
(syntactically) correct, so it should be no
problem to change that.

Fixes #655.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-04-20 08:54:25 +02:00
Thomas Hochstein 6ad0f0514f Truncate extension of media items to 5 chars.
That's the max length of the extension
database field.

Fixes #609.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-04-20 08:54:24 +02:00
Thomas Hochstein 37a04ec0a9 Relax active content check for renaming.
We don't need to check against the filename
without extension, because it's only the
extension that may be problematic.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-25 21:48:51 +01:00
Thomas Hochstein 5340fe4507 After release preparations.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-25 17:04:13 +01:00
Thomas Hochstein b9037fb158 Release 2.3.4
Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-25 16:58:28 +01:00
Thomas Hochstein 2b0f489e39 Release preparations.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-25 16:56:40 +01:00
Thomas Hochstein a2d7383c79 Fix typo (ML renaming code).
Fixes 2ccb43a271

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-25 16:23:54 +01:00
Thomas Hochstein c7c6a08c10 Wordwrap overly long words in comments via CSS.
Very long words may overflow the dashboard_widget
boundary on backend start page otherwise.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-25 15:37:42 +01:00
Thomas Hochstein b0971b67e9 Fix RCE vulnerability on Windows.
Steps to reproduce:

1) Upload a PHP script to the Media Libray,
   naming it "test" (or any other name
   without extension).
2) Rename it to "exploit.php." (trailing dot!)

On Linux, the file will be renamed to
"exploit.php..", which is safe and
cannot be exploited.

On Windows though, the file will be
renemad to "exploit.php" and is then
remotely executable by calling it
from "/uploads/exploit.php".

Thanks to Junyu Zhang <rgdz.eye@gmail.com>
for spotting this!

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-25 15:05:05 +01:00
Thomas Hochstein b22d51fbc0 Add missing active content check for renaming.
After fixing the other ML file renaming bugs,
it was now possible to rename a file without
extension into a file that *does* have an
extension - so we need to check against
active content.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-25 15:05:05 +01:00
Thomas Hochstein 3d4e6b8f65 Add NEWS entry for ML rename fixes.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-25 15:05:05 +01:00
Thomas Hochstein 364dda8595 Fix for "disappearing" media files after renaming.
The renaming code added a dot '.' to the
filename on disk even if the file hat no
extension. Therefore, the file name on disk was
different from the name in the database,
triggering the database purging code on the
next ML display.

(serendipity_displayImageList() will delete
files from the database that don't exist
any longer on disk.)

This code won't add spurious dots for
empty extensions, keeping disk and
database in sync.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-25 15:05:05 +01:00
Thomas Hochstein 0562dc0ca6 ML: Add error message when renaming fails.
Completing 1ed4b9e7ec

Cherry-picked from master.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-25 15:05:05 +01:00
Thomas Hochstein 9155a7b8a4 Add plugin source to list of plugins.
* plugin_api.inc.php:
  - Add static list of bundled plugins.
  - Add function to check if plugin is
    bundled.
* plugins.inc.php:
  - Set source of plugin
    (Spartacus, bundled or local).
* plugins.inc.tpl:
  - Display plugin source.
* Add language constants.

Add link to Spartacus for all plugins,
don't skip installed plugins.

Add author to details of installed plugins.

Cherry-picked from master.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-25 15:05:05 +01:00
Thomas Hochstein cb7819b4d9 "$cachedtype" was set twice.
"$cachedtype" is saved anayway before returning;
no need to set it here.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-24 16:13:47 +01:00
Thomas Hochstein a5f28d3eb0 Escape plugin author name in pluginlist.
Don't show HTML from author name field.

Cherry-picked from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-23 17:51:36 +01:00
Thomas Hochstein d4b1f7cd35 After release preparations.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-22 09:54:34 +01:00
Thomas Hochstein a32bcadd75 Release 2.3.3
Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-22 09:49:51 +01:00
Thomas Hochstein 25931b33c7 Release preparations.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-22 09:45:21 +01:00
Thomas Hochstein c9a7a44334 Fix typo.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-21 23:42:51 +01:00
Thomas Hochstein d319b9677b Sort NEWS file.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-21 23:13:08 +01:00
Thomas Hochstein 1632a172f3 Set empty limit to "" in serendipity_fetchEntries.
If $limit is empty(), no limit is set, so we can
set the LIMIT statement to "" to achieve the same.

But an empty() $limit can be "0", so the
generated SQL statement could end with "0"
instead of the LIMIT statement. We catch this
with forcing an empty() $limit to "".

Fixes #636.
(No matter that this shouldn't even happen.)

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-21 18:08:40 +01:00
Thomas Hochstein 95c71c36c9 [plugin_comments] Fix wordwrap at wound boundaries.
Add ChangeLog.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-21 16:18:15 +01:00
Thomas Hochstein 9709592b7c Escape version string in update notifier.
Fixes #674.

Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-20 19:11:23 +01:00
Thomas Hochstein 307f1c3dad Prevent renaming ML object into existing file.
When renaming objects in the Media Library,
s9y didn't check if a file with the same
name already exists, resulting in a file
name collision deleting both files from
the database _and_ from disk.

Add a check to avoid that.

An error message would be nice, too, but
that may be added later on.

Tested on s9y-stable test instance.

Cherry-picked from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-20 17:56:29 +01:00
surrim 1f31fd19c3 Changed parameters order for implode().
Thanks to @surrim.

Cherry-picked from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-20 16:55:22 +01:00
surrim 67aea1b623 Fix serendipity_killPath().
Cherry-picked from master.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-20 16:53:37 +01:00
onli d462580606 Fix trackback deletion from frontend, invalid referrer error
Was missing the token.

For context see https://board.s9y.org/viewtopic.php?f=10&t=24633

Cherry-picked from master branch.
2020-03-20 16:49:14 +01:00
Lothar Serra Mari 6accc81ad6 Don't allow requesting an archive page that doesn't exist
Cherry picked from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-20 16:46:50 +01:00
Stephan Brunker 3bf067c6ea functions_routing.php: set action to empty when serving JS
genpage is called but no action given -
the default page was generated at every call.

Cherry-picked from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-20 16:45:11 +01:00
onli ac81762eaa Make use of the video tag for videos in the ML.
Cherry-picked from master branch.
2020-03-20 16:42:11 +01:00
onli 5934de7a4e Fix links in ML not going to item when no image.
Cherry-picked from master branch.
2020-03-20 16:29:48 +01:00
onli 89351eb77b Fix: Remember where you stored images last
Fixes #652.

Cherry-picked from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-20 16:26:26 +01:00
Garvin Hicking a45c545ee3 [TASK] Uses single-asset insertion when only one asset has been selected to be inserted
See #651.

Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-20 16:23:43 +01:00
Thomas Hochstein d319ad16f1 Add "lower/upper roman" ordered list styles.
Add NEWS entry, bump version number.

Fixes #647.

Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-20 16:23:26 +01:00
Thomas Hochstein 66494fdbe3 Force positive values for fetchLimits.
The number of entries shown on the title
page and in the feed has to be at least "1",
as s9y can't cope with "0" or negative
values (and it shouldn't).

May be related to #636.

Backported from master.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2020-03-20 16:23:05 +01:00
Garvin Hicking cad25673cf [TASK] Adds ability to make plugins change the multi-media insertion gallery HTML 2019-12-03 15:54:24 +01:00
Garvin Hicking 4daa718362 [TASK] backport to 2.3 2019-12-03 15:52:05 +01:00
Garvin Hicking a1677ff0eb [TASK] Backport to 2.3.3 2019-12-03 14:27:01 +01:00
Garvin Hicking 15bc67ce8d [TASK] Updates serendipity_event_mailer: Prepend body option, force sending mails, fixed striptag label 2019-12-03 14:26:43 +01:00
Thomas Hochstein d7b4e93292 After release preparations.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-16 09:49:27 +02:00
Thomas Hochstein 26c7f9af75 Release 2.3.2.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-16 09:43:59 +02:00
Thomas Hochstein 4b1641b5bf Release preparations.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-16 09:39:47 +02:00
Garvin Hicking 2ea886396b [BUGFIX] Fixes missing referenced variable when $_GET['serendipity'] is not an array
refs #642
refs #653
2019-10-15 22:34:58 +02:00
Hanno 4a8616214f Avoid undefined index notices.
See #642.

Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:28:53 +02:00
Thomas Hochstein 5f8744e414 Assume uninitialized constant PLUGIN_LINK_SPARTACUS.
Fixes #638.

Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:09:08 +02:00
Thomas Hochstein a2ad0bd9b5 Fix mangling of auto-generated mails.
s9y will encode the body of its auto-generated
mails as quoted-printable when imap_8bit() is
available. imap_8bit() will use "\r\n" as
linebreaks as mandated for SMTP transfer.
The result will be transmitted via PHP's
mail() function, using direct SMTP on
Windows and piping it to a MTA on Unix.

Most MTAs will cope just fine with those
linebreaks, while qmail will not; it will
replace all "\n" linebreaks with "\r\n",
so we get "\r\r\n" in our case. We can't
"fix" qmail (as its maintainer, if there
even is one, does not consider this
behaviour wrong), but we can replace the
line endings we get from imap_8bit().

The fix does work with qmail and Exim and
should work with sendmail and Postfix and
other MTAs, too. It may break sending
mail on Windows (i.e. lose all linebreaks),
but I think that's acceptable, as we'll
have more qmail installation than Windows
servers out there.

A workaround could be to set
serendipity['forceBase64']=true in
serendipity_config_local.inc.php, but I'd
prefer this fix.

Fixes #644.

Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:08:59 +02:00
onli d36895b321 Document rotating images and figcaption fix.
Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:08:53 +02:00
onli f55c17ee4f Fix: rotate image did not rotate all thumbnails.
Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:08:48 +02:00
onli 38a7a3f60b Fix: Stop ckeditor from removing figures and figcaptions.
Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:08:44 +02:00
Garvin Hicking 2b9616276f [TASK] Prevents PHP warnings with type differences on $_REQUEST['serendipity'].
refs #642

Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:08:36 +02:00
Hanno f26a306026 Escape category images to avoid backend XSS.
Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:08:28 +02:00
Matthias Mees f30de8449f Fix sidebar not displayed in BS4 theme.
Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:08:08 +02:00
Matthias Mees ae0077f836 Fix typo in Skeleton theme.
Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:08:03 +02:00
Garvin Hicking 63217ef9c9 [BUGFIX] [SECURITY] Fixes only logging to .log and.txt filetype extensions.
Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:07:58 +02:00
Garvin Hicking ce191330c8 [CLEANUP] Changes release dates like before.
Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:07:55 +02:00
Garvin Hicking 9a27978179 [CLEANUP] Code formatting.
Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:07:50 +02:00
Garvin Hicking b653ed867c [BUGFIX] Fixes {$save_error} not showing when saving plugin API configuration.
Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:07:43 +02:00
Garvin Hicking 7e6027ebf9 Adds 'vagrant' to gitignore for local development.
Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:07:01 +02:00
Eike Rathke 7ce5408609 With MySQL use cast(okey as unsigned) instead of cast(okey as integer)
The autologin ("Save information") functionality in 2.3.1 is broken since

    commit 52a41b37d5
    CommitDate: Fri Mar 23 18:01:32 2018 +0100

	Rework autologin to use a token approach

Although a cookie serendipity[author_autologintoken] with correct
expiration (one month) which random data content is present as value
in the serendipity_options table with name autologin_Username and
correct timestamp as okey and that is found with manually executing
the SQL statement

  SELECT name, value, okey FROM serendipity_options WHERE name = 'autologin_Username' AND okey > 1565801743 LIMIT 1

like done in include/functions_config.inc.php
serendipity_checkAutologin(), the login is forgotten after 30 minutes
or so. That was not the case with 2.1.5 where the login was valid for
weeks.

Of

    if (stristr($serendipity['dbType'], 'sqlite')) {
        $cast = "okey";
    } else {
        // Adds explicits casting for mysql, postgresql and others.
        $cast = "cast(okey as integer)";
    }

from which $cast then is used in the SQL statement instead of a plain
okey; when doing that manually with

  SELECT name, value, okey FROM serendipity_options WHERE name = 'autologin_Username' AND cast(okey as integer) > 1565801743 LIMIT 1

it produces the MySQL error

  #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'integer) > 1565801743 LIMIT 1' at line 1

This also with $serendipity['dbType'] = 'mysqli' for the above code.

Indeed, cast(okey as integer) is invalid in MySQL and should be
cast(okey as unsigned) instead which then also works manually, see
https://stackoverflow.com/a/12127022 and
https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_cast

Same in serendipity_issueAutologin().

Changing those two places accordingly resolves the autologin not
persistent problem.

Additionally, inspecting the serendipity_options table revealed loads
of old serendipity[author_authorinformation] cookie information that
was never deleted in serendipity_issueAutologin() with the

  OR (okey LIKE 'l_%' AND $cast < " . (time() - 1814400) . ")")

expression producing a MySQL error. This has to be done manually
once as also 2.3.1 will not delete it anymore.

Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-10-13 18:06:50 +02:00
Thomas Hochstein e2c0c82aeb Revert "Fix pagination for "stable archives" in themes."
This reverts commit 4e662bf17c
in parts.

With this - now reverted - commit, the prev/next
arrows in pagination were swapped because they
were the wrong way around. Unfortunately, later on,
the root cause was fixes by "unswapping" the prev/next
links in core, so now the pagination arrows were
... eh ... wrongly swapped. So this commit has to
be reverted.

Backported from master branch.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-24 08:58:59 +02:00
Thomas Hochstein 40113925b6 After release preparations.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-21 07:34:37 +02:00
Thomas Hochstein a3a2b51848 Release 2.3.1
Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-21 07:29:51 +02:00
Thomas Hochstein f944eb4cd3 Release preparations.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-21 07:25:34 +02:00
Thomas Hochstein 2e5e601ea2 Fix ML mass delete, enhance i18n.
* Fix media library (mass) delete.

* I18n for multimove.
  + Add MEDIA_DIRECTORY_MOVE.
  + Change German translation of "Move" to
    "Verschieben".

Cherry-picked from master.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-17 13:57:54 +02:00
Thomas Hochstein 1bc7c4bd0f [event_spamblock] Don't overwrite "moderate" flag.
Unconditionally setting $serendipity['csuccess']
to 'true' will override a "moderate" flag set by
another (spamblock) plugin.

Cherry-picked from master.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-17 13:57:54 +02:00
Thomas Hochstein 4e662bf17c Fix pagination and links for "stable archives".
* Fix core pagination for "stable archives".

  The current page will always be the current page,
  regardless of archive sorting order. Page 76 of
  86 pages will remain page 76, even if the archive
  sorting is changed; it won't become page 10.

* Fix pagination for "stable archives" in themes.

  Timeline and Bulletproof have pagination.
  Both need to swap the prev/next links for
  stable archives, as the sorting order has
  been reversed.

* Fix prev/next page links for stable archives.

  We shouldn't swap prev/next links for archive
  pages. With stable archives, the title page is
  the last page of the archive, not the first, so
  all other pages are "previos", and we should
  display it like that.

Cherry-picked from master.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-17 01:02:38 +02:00
Thomas Hochstein cd3464be70 Add i18n and German translations.
* "PLUGIN_ALL_UPDATED" was hardcoded.
* Add some missing German translation
  and fix some others.
* Add new constants to other languages
  via addlang.sh
* Remove wrongly added constants from
  plugin_lang.php

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-17 00:59:33 +02:00
Thomas Hochstein b88f789655 Add Spartacus links to plugin lists.
Quite some information is missing from
the list of installed plugins; and the
list of installable plugins has some
more information, but not everything
that is present on Spartacus, i.e.
the last modification date.

So let's add a link to the plugin entry
on Spartacus (in the chosen language
version).

Fixes #471.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-17 00:58:32 +02:00
Thomas Hochstein 19fe3715bd Add changes to NEWS.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-11 13:46:34 +02:00
Thomas Hochstein 2d4285bd52 Fix typo / unify PHP and smarty variable names.
"requirement_failures" from PHP is saved in
"requirements_failues" - "requirements" as
in plural, and with a typo. That doesn't make
sense. Let's use "requirement_failures"
everywhere.

Backported from master.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-11 03:01:18 +02:00
Thomas Hochstein 71331f5e07 Wording changes for plugin version display.
"Version" should be capitalized in German -
and anywhere at the start of a sentence or
line.

Furthermore, "UPGRADE_TO_VERSION" is not
the current version ("aktuelle version"),
but the version one could upgrade to.

Backported from master.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-11 03:01:18 +02:00
Thomas Hochstein 90b35f7933 ML delete file: add "?" to conformation question.
Backported from master.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-11 00:46:04 +02:00
Thomas Hochstein 15f0be45a2 [event_spartacus] Don't cache wrong plugin list.
Declaring $pluginlist as static will cache the
database query results and always return the same
list of plugins - no matter which type is queried
(sidebar or event).

This cache must be busted if another type of
plugins is queried.

Backported from master.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-11 00:45:39 +02:00
Thomas Hochstein 0240816507 2.3.x in the 2.3 branch is now our stable line.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2019-08-10 12:23:46 +02:00
120 changed files with 1016 additions and 353 deletions
+1
View File
@@ -22,3 +22,4 @@ DEADJOE
.editorconfig
*.git
tests/phpunit.xml
vagrant/*
+153 -5
View File
@@ -1,4 +1,152 @@
Version 2.3.0 (10.08.2019)
Version 2.3.5 (April 25th, 2020)
------------------------------------------------------------------------
* Fix: CSS: Restrict block display of summary to trackbacks. (#703)
* Fix: Don't strip HTML from comments body in serendipity_plugin_comments
before serendipity_event_unstrip_tags can convert the HTML tags
(being called via frontend_display hook). (#702)
* Fix: [CKE] Don't remove <details> and <summary> elements from
WYSIWYG editor.
* Fix: Don't delete extend properties from the entryproperties
plugin when publishing from dashboard (or sending
delayed trackbacks). (#695)
* Fix: SQL error in serendipity_plugin_history present since we
"don't allow requesting an archive page that doesn't exist"
(2.3.3). (#694)
* Fix: Entry title in backend list of entries was double escaped.
* Fix: Don't drop upgraded_version from local plugin cache.
* Fix: Regular expression in functions_routing.inc.php
* Fix: Truncate extension of media items to 5 chars (which ist the
max length of the corresponding database field). (#609)
Thanks to @mmitch!
Version 2.3.4 (March 25th, 2020)
------------------------------------------------------------------------
* Security: Fix RCE on Windows.
Thanks to Junyu Zhang <rgdz.eye@gmail.com>!
* Fix: ML: Fixed filename generation when renaming and added
some error messages on rename failures.
* Display source of plugins (Spartacus, bundled or locally installed).
Version 2.3.3 (March 22nd, 2020)
------------------------------------------------------------------------
* #651: When using checkboxes to insert multiple media files, if only
one asset has been selected, do not use the gallery mode,
but instead single-asset view. Also improves to click the title
of an asset to select its checkbox, and hides the 'Insert all'
button when no assets are selected. (garvinhicking)
* Use the video tag for videos in the Medialibrary, also when
inserting such a video into an entry
* media_choose.tpl: Fixes bad usage of
{serendipity_hookPlugin eventData=...} to {serendipity_hookPlugin eventData=}
and allow plugins to skip HTML block insertion to use their own
markup
* Updates mailer event plugin to support force sending mails on
published blog entries and ability to prepend a mail body.
Also fixes missing "keep strip tags" configuration option
* Fix serendipity_killPath().
Thanks to @surrim!
* Don't allow requesting an archive page that doesn't exist.
Thanks to @lotharsm!
* Fix: Set action to empty in functions_routing.php when serving JS;
otherwise the default page has been generated at every call.
* Fix: Add valid HTTP referrer when trying to delete a
trackback from the frontend.
* Fix: Wordwrap at word boundaries only in bundled plugin
serendipity_plugin_comments.
* Fix: Force empty limit to "" in serendipity_fetchEntries().
* Fix: Escape version string in update notifier to avoid XSS.
* Fix: Prevent renaming a ML object into an existing file,
resulting in deletion of both from disk and database.
* Fix: Items in Medialibrary that are not images now get
the correct link
* Fix: Remember where you stored images last (#652)
* Fix: [bbcode] Get roman numerals working in bbcode plugin.
Thanks to Fabien Chabreuil!
* Fix: Force positive limits for number of entries shown on
title page and in RSS feed. s9y doesn't work with 0 or
negative numbers, so force our default (15) in this case,
(#646)
Version 2.3.2 (October 16th, 2019)
------------------------------------------------------------------------
* Fix: Auto-generated mails submitted to qmail as MTA will get
mangled if encoded to quoted-printable due to qmail
changing "\r\n" linebreaks to "\r\r\n". Submit just "\n"
as linebreaks; other MTAs should cope with that.
* fix: Rotating an image did not rotate all responsive thumbnails
* fix: The wysiwyg editor stripped the figcaption element used
for image captions
* Only populate $serendipity['GET'], $serendipity['POST'] and
$serendipity['COOKIE'] with references to $_GET['serendipity'],
$_POST['serendipity'], $_COOKIE['serendipity'] if they are
transmitted as an array. Else, an empty array is used.
Prevents PHP warnings (Issue 642) thanks to @hannob
* Escape category images to avoid backend XSS.
Thanks to @hannob!
* Only allows .txt and .log files for spamblock logging.
Thanks to Gary O'Leary-Steele (CVE TBD)
* Fixes not properly displaying plugin save errors (validation)
* Fix autologin when using MySQL (thanks @Eike Rathke,
https://github.com/s9y/Serendipity/pull/632)
Version 2.3.1 (August 21st, 2019)
------------------------------------------------------------------------
* Enhance i18n of ML multimove.
* Fix ML multidelete.
* Change footer_info and prev/next links for archive pages for
"stable archives" sort order.
* Fix pagination in core for "stable archives" sort order and fix
prev/next links for pagination in timeline and bulletproof themes
when "stable archives" are active.
* Add Spartacus links ("more info") to plugin lists.
* Fix/Change: Wording of plugin display ("version") and PHP/smarty
variable names.
* Spartacus: Fix caching of plugin lists in getCachedPlugins().
Version 2.3.0 (August 10th, 2019)
------------------------------------------------------------------------
* Fix: Don't show "Array" under Update notification if autoupdate
@@ -6,7 +154,7 @@ Version 2.3.0 (10.08.2019)
* Fix PHP 7.4 issue in PEAR HTTP_Request2
Version 2.3-rc1 (03.08.2019)
Version 2.3-rc1 (August 3rd, 2019)
------------------------------------------------------------------------
* spamblock: Minor code change for PHP 7.4 compatibility (thanks
@@ -16,14 +164,14 @@ Version 2.3-rc1 (03.08.2019)
* bulletproof theme: Fix preview iframe.
Version 2.3-beta1 (26.04.2019)
Version 2.3-beta1 (April 26th 2019)
------------------------------------------------------------------------
* Activate stablearchive option by default for new blogs
* Fix: Smarty reference and PHP7.2 compatibility issue in timeline theme.
* Fix: PHP7.2 compatibility issue in clean-blog theme.
* Security: Fix XSS in Editor Preview by interpreted EXIF tags
(thanks @hannob!)
+2 -2
View File
@@ -1,2 +1,2 @@
stable:2.3.0
beta:2.3.0
stable:2.3.5
beta:2.3.5
+2 -1
View File
@@ -63,9 +63,10 @@ CKEDITOR.editorConfig = function( config ) {
- Allowed <span> to make life a bit easier!
- Reset <img[height,width]> Media Library image inserts to avoid ACF OFF removement of height attributes. (Dependency in ckeditor_s9y_plugin.js)
- Allow <pre[*attributes](*classes)> for custom attributes/classes in code blocks
- Allow <details> and <summary>
*/
// protect
config.extraAllowedContent = 'mediainsert[*]{*}(*);gallery[*]{*}(*);media[*]{*}(*);script[*]{*}(*);audio[*]{*}(*);div[*]{*}(*);span[*]{*}(*);img[height,width];pre[*](*);code;';
config.extraAllowedContent = 'mediainsert[*]{*}(*);gallery[*]{*}(*);media[*]{*}(*);script[*]{*}(*);audio[*]{*}(*);div[*]{*}(*);span[*]{*}(*);img[height,width];pre[*](*);code;figure[*]{*}(*);figcaption[*]{*}(*);details[*]{*}(*);summary[*]{*}(*);';
// Do not use auto paragraphs, added to these allowed tags (only!). Please regard that this was marked deprecated by CKE 4.4.5, but is a need for (our use of) extraAllowedContent - check this again by future versions!
config.autoParagraph = false; // defaults(true)
+6 -2
View File
@@ -132,7 +132,7 @@ switch ($serendipity['GET']['adminAction']) {
break;
}
// case bulk multimove (leave the fake oldDir being send as an empty dir)
if (isset($serendipity['POST']['newDir'])) {
if (!empty($serendipity['POST']['newDir'])) {
$messages = array();
$multiMoveImages = $serendipity['POST']['multiDelete']; // The 'multiDelete' key name should better be renamed to 'multiCheck', but this would need to change 2k11/admin/serendipity_editor.js, images.inc.tpl, media_items.tpl, media_pane.tpl and this file
unset($serendipity['POST']['multiDelete']);
@@ -181,7 +181,11 @@ switch ($serendipity['GET']['adminAction']) {
if (!serendipity_checkFormToken() || !serendipity_checkPermission('adminImagesDelete')) {
return;
}
serendipity_renameFile($serendipity['GET']['fid'], $serendipity['GET']['newname']);
$result = serendipity_renameFile($serendipity['GET']['fid'], $serendipity['GET']['newname']);
if (!empty($result) && $result !== TRUE) {
# serendipity_renameFile returned an error
$data['messages'] = $result;
}
break;
case 'properties':
+16 -3
View File
@@ -155,6 +155,7 @@ if (isset($_GET['serendipity']['plugin_to_conf'])) {
$data['adminAction'] = 'addnew';
$data['type'] = $serendipity['GET']['type'];
# get plugin data from Spartacus
$foreignPlugins = $pluginstack = $errorstack = array();
serendipity_plugin_api::hook_event('backend_plugins_fetchlist', $foreignPlugins);
$pluginstack = array_merge((array)$foreignPlugins['pluginstack'], $pluginstack);
@@ -173,6 +174,7 @@ if (isset($_GET['serendipity']['plugin_to_conf'])) {
$foreignPlugins = array_merge($foreignPlugins, $foreignPluginsTemp);
}
# load data for installed plugins
$plugins = serendipity_plugin_api::get_installed_plugins();
$classes = serendipity_plugin_api::enum_plugin_classes(($serendipity['GET']['type'] === 'event'));
if ($serendipity['GET']['only_group'] == 'UPGRADE') {
@@ -192,7 +194,7 @@ if (isset($_GET['serendipity']['plugin_to_conf'])) {
$plugin->introspect($bag);
// If a foreign plugin is upgradable, keep the new version number.
if (isset($foreignPlugins['pluginstack'][$class_data['name']]) && $foreignPlugins['pluginstack'][$class_data['name']]['upgradable']) {
if (isset($foreignPlugins['pluginstack'][$class_data['name']]) && isset($foreignPlugins['pluginstack'][$class_data['name']]['upgrade_version'])) {
$class_data['upgrade_version'] = $foreignPlugins['pluginstack'][$class_data['name']]['upgrade_version'];
}
@@ -237,7 +239,6 @@ if (isset($_GET['serendipity']['plugin_to_conf'])) {
$props['local_documentation'] = 'plugins/' . $props['pluginPath'] . '/README';
}
}
$pluginstack[$class_data['true_name']] = $props;
} else {
// False is returned if a plugin could not be instantiated
@@ -249,6 +250,18 @@ if (isset($_GET['serendipity']['plugin_to_conf'])) {
$pluggroups = array();
$pluggroups[''] = array();
foreach($pluginstack AS $plugname => $plugdata) {
# add pluginsource to pluginstack
if (isset($foreignPlugins['pluginstack'][$plugdata['class_name']])) {
# remote plugin
$plugdata['pluginsource'] = 'Spartacus';
} elseif (serendipity_plugin_api::is_bundled_plugin($plugdata['class_name'])) {
# bundled plugin
$plugdata['pluginsource'] = PLUGIN_SOURCE_BUNDLED;
} else {
# everything else must be "local"
$plugdata['pluginsource'] = PLUGIN_SOURCE_LOCAL;
}
# create pluggroups
if ($serendipity['GET']['only_group'] == 'ALL') {
$pluggroups['ALL'][] = $plugdata;
} elseif ($serendipity['GET']['only_group'] == 'UPGRADE' && $plugdata['upgradable']) {
@@ -308,7 +321,7 @@ if (isset($_GET['serendipity']['plugin_to_conf'])) {
}
}
$data['requirements_failues'] = $requirement_failures;
$data['requirement_failures'] = $requirement_failures;
} elseif ( $serendipity['GET']['adminAction'] == 'renderOverlay' ) {
$data['adminAction'] = 'overlay';
} else {
+24 -6
View File
@@ -156,18 +156,18 @@ if (!function_exists('errorToExceptionHandler')) {
break;
}
// NOTE: We do NOT use ini_get('error_reporting'), because that would return the global error reporting,
// NOTE: We do NOT use ini_get('error_reporting'), because that would return the global error reporting,
// and not the one in our current content. @-silenced errors would otherwise never be caught on.
$rep = error_reporting();
// Bypass error processing because it's @-silenced.
if ($rep == 0) {
return false;
if ($rep == 0) {
return false;
}
// if not using Serendipity testing and user or ISP has set PHPs display_errors to show no errors at all, respect this:
if ($serendipity['production'] === true && ini_get('display_errors') == 0) {
return false;
if ($serendipity['production'] === true && ini_get('display_errors') == 0) {
return false;
}
// Several plugins might not adapt to proper style. This should not completely kill our execution.
@@ -178,7 +178,7 @@ if (!function_exists('errorToExceptionHandler')) {
$args = func_get_args();
/*
/*
* $serendipity['production'] can be:
*
* (bool) TRUE: Live-blog, conceal error messages
@@ -373,8 +373,26 @@ if (ini_get('magic_quotes_gpc')) {
}
// Merge get and post into the serendipity array
// It is vital that also an empty array is mapped as a reference
// because the s9y core actually sets new array key values sometimes in $_GET and
// sometimes in $serendipity['GET'] (and POST/COOKIE).
// TODO: This is being worked on currently to be unified see #650
if (!array_key_exists('serendipity', $_GET) || !is_array($_GET['serendipity'])) {
$_GET['serendipity'] = array();
}
$serendipity['GET'] = &$_GET['serendipity'];
if (!array_key_exists('serendipity', $_POST) || !is_array($_POST['serendipity'])) {
$_POST['serendipity'] = array();
}
$serendipity['POST'] = &$_POST['serendipity'];
if (!array_key_exists('serendipity', $_COOKIE) || !is_array($_COOKIE['serendipity'])) {
$_COOKIE['serendipity'] = array();
}
$serendipity['COOKIE'] = &$_COOKIE['serendipity'];
// Attempt to fix IIS compatibility
+1 -1
View File
@@ -538,7 +538,7 @@ function serendipity_sendMail($to, $subject, $message, $fromMail, $headers = NUL
if (LANG_CHARSET == 'UTF-8') {
if (function_exists('imap_8bit') && !$serendipity['forceBase64']) {
$maildata['headers'][] = 'Content-Transfer-Encoding: quoted-printable';
$maildata['message'] = imap_8bit($maildata['message']);
$maildata['message'] = str_replace("\r\n","\n",imap_8bit($maildata['message']));
} else {
$maildata['headers'][] = 'Content-Transfer-Encoding: base64';
$maildata['message'] = chunk_split(base64_encode($maildata['message']));
+8 -2
View File
@@ -435,8 +435,11 @@ function serendipity_issueAutologin($user) {
// Delete possible current cookie. Also delete any autologin keys that smell like 3-week-old, dead fish.
if (stristr($serendipity['dbType'], 'sqlite')) {
$cast = "okey";
} elseif (stristr($serendipity['dbType'], 'mysqli')) {
// Adds explicit casting for mysql.
$cast = "cast(okey as unsigned)";
} else {
// Adds explicits casting for mysql, postgresql and others.
// Adds explicit casting for postgresql and others.
$cast = "cast(okey as integer)";
}
@@ -460,8 +463,11 @@ function serendipity_checkAutologin($user) {
if (stristr($serendipity['dbType'], 'sqlite')) {
$cast = "okey";
} elseif (stristr($serendipity['dbType'], 'mysqli')) {
// Adds explicit casting for mysql.
$cast = "cast(okey as unsigned)";
} else {
// Adds explicits casting for mysql, postgresql and others.
// Adds explicit casting for postgresql and others.
$cast = "cast(okey as integer)";
}
+35 -14
View File
@@ -404,10 +404,31 @@ function &serendipity_fetchEntries($range = null, $full = true, $limit = '', $fe
if (!empty($limit)) {
if (isset($serendipity['GET']['page']) && ($serendipity['GET']['page'] > 1 || serendipity_db_bool($serendipity['archiveSortStable'])) && !strstr($limit, ',')) {
if (serendipity_db_bool($serendipity['archiveSortStable'])) {
$totalEntries = serendipity_getTotalEntries();
$totalPages = ceil($totalEntries / $limit);
// serendipity_fetchEntries() is mostly called in page context to
// deliver a list of entries to display on archive, search result
// or other pages, where $limit means the number of entries to
// display on each page. This code depends on that notion,
// catches request for non-existing pages and applies
// pagination.
// If you don't work in a page context, e.g. you just want to fetch
// a list of entries to display in a sidebar, you should think
// about saving and unsetting $serendipity['GET']['page'] before
// calling serendipity_fetchEntries() and reset it to the saved
// value afterwards.
// See https://github.com/s9y/Serendipity/issues/693 for context.
$totalEntries = serendipity_getTotalEntries();
$totalPages = ceil($totalEntries / $limit);
// Do not allow requesting a page that doesn't exist
// and do a fallback to the highest page number available
if ($totalPages > 0 && $serendipity['GET']['page'] > $totalPages) {
$serendipity['GET']['page'] = $totalPages;
}
if (serendipity_db_bool($serendipity['archiveSortStable'])) {
if ($totalPages <= 0 ) {
$totalPages = 1;
}
@@ -425,6 +446,15 @@ function &serendipity_fetchEntries($range = null, $full = true, $limit = '', $fe
}
$limit = serendipity_db_limit_sql($limit);
} else {
# if $limit was empty(), no limit was set;
# but empty() may also mean FALSE, "" or 0,
# so set it to "" to remove the LIMIT
# statement completely; should catch errors
# with a limit of 0 and some database drivers
# see <https://github.com/s9y/Serendipity/issues/636>
$limit = '';
}
$query = "SELECT $select_key
@@ -973,13 +1003,9 @@ function serendipity_printEntryFooter($suffix = '.html', $totalEntries = null) {
$uriArguments[] = 'P%s';
$serendipity['smarty']->assign('footer_totalEntries', $totalEntries);
$serendipity['smarty']->assign('footer_totalPages', $totalPages);
if (serendipity_db_bool($serendipity['archiveSortStable']) && $serendipity['GET']['action'] != 'search') {
$serendipity['smarty']->assign('footer_currentPage', $totalPages - $serendipity['GET']['page']);
} else {
$serendipity['smarty']->assign('footer_currentPage', $serendipity['GET']['page']);
}
$serendipity['smarty']->assign('footer_currentPage', $serendipity['GET']['page']);
$serendipity['smarty']->assign('footer_pageLink', str_replace('%2A', '*', serendipity_rewriteURL(implode('/', $uriArguments) . $suffix)));
$serendipity['smarty']->assign('footer_info', sprintf(PAGE_BROWSE_ENTRIES, serendipity_db_bool($serendipity['archiveSortStable']) && $serendipity['GET']['action'] != 'search' ? $totalPages - (int)$serendipity['GET']['page'] +1 : (int)$serendipity['GET']['page'], $totalPages, $totalEntries));
$serendipity['smarty']->assign('footer_info', sprintf(PAGE_BROWSE_ENTRIES, (int)$serendipity['GET']['page'], $totalPages, $totalEntries));
if ($serendipity['GET']['page'] < $totalPages) {
$uriArguments = $serendipity['uriArguments'];
@@ -987,11 +1013,6 @@ function serendipity_printEntryFooter($suffix = '.html', $totalEntries = null) {
$serendipity['smarty']->assign('footer_next_page', serendipity_rewriteURL(str_replace('//', '/', implode('/', $uriArguments)) . $suffix));
}
if (serendipity_db_bool($serendipity['archiveSortStable']) && $serendipity['GET']['action'] != 'search') {
$temp = $serendipity['smarty']->getTemplateVars('footer_prev_page');
$serendipity['smarty']->assign('footer_prev_page', $serendipity['smarty']->getTemplateVars('footer_next_page'));
$serendipity['smarty']->assign('footer_next_page', $temp);
}
}
/**
+47 -17
View File
@@ -309,7 +309,7 @@ function serendipity_updateImageInDatabase($updates, $id) {
foreach ($updates AS $k => $v) {
$q[] = $k ." = '" . serendipity_db_escape_string($v) . "'";
}
serendipity_db_query("UPDATE {$serendipity['dbPrefix']}images SET ". implode($q, ',') ." WHERE id = " . (int)$id . " $admin");
serendipity_db_query("UPDATE {$serendipity['dbPrefix']}images SET ". implode(',', $q) ." WHERE id = " . (int)$id . " $admin");
$i++;
// Check if this update changes important directory or filename attributes.
@@ -807,16 +807,19 @@ function serendipity_rotateImg($id, $degrees) {
}
$infile = $outfile = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $file['path'] . $file['name'] . (empty($file['extension']) ? '' : '.' . $file['extension']);
$infileThumb = $outfileThumb = $serendipity['serendipityPath'] . $serendipity['uploadPath'] . $file['path'] . $file['name'] . (!empty($file['thumbnail_name']) ? '.' . $file['thumbnail_name'] : '') . (empty($file['extension']) ? '' : '.' . $file['extension']);
$thumbnails = serendipity_getThumbnails($id);
if ($serendipity['magick'] !== true) {
serendipity_rotate_image_gd($infile, $outfile, $degrees);
serendipity_rotate_image_gd($infileThumb, $outfileThumb, $degrees);
foreach($thumbnails as $thumbnail) {
$infileThumb = $outfileThumb = $thumbnail;
serendipity_rotate_image_gd($infileThumb, $outfileThumb, $degrees);
}
} else {
/* Why can't we just all agree on the rotation direction? */
$degrees = (360 - $degrees);
/* Resize main image */
/* rotate main image */
$cmd = escapeshellcmd($serendipity['convert']) . ' -rotate ' . serendipity_escapeshellarg($degrees) . ' ' . serendipity_escapeshellarg($infile) . ' ' . serendipity_escapeshellarg($outfile);
exec($cmd, $output, $result);
if ( $result != 0 ) {
@@ -824,13 +827,16 @@ function serendipity_rotateImg($id, $degrees) {
}
unset($output, $result);
/* Resize thumbnail */
$cmd = escapeshellcmd($serendipity['convert']) . ' -rotate ' . serendipity_escapeshellarg($degrees) . ' ' . serendipity_escapeshellarg($infileThumb) . ' ' . serendipity_escapeshellarg($outfileThumb);
exec($cmd, $output, $result);
if ( $result != 0 ) {
echo '<span class="msg_error"><span class="icon-attention-circled" aria-hidden="true"></span> ' . sprintf(IMAGICK_EXEC_ERROR, $cmd, $output[0], $result) ."</span>\n";
/* rotate thumbnail */
foreach($thumbnails as $thumbnail) {
$infileThumb = $outfileThumb = $thumbnail;
$cmd = escapeshellcmd($serendipity['convert']) . ' -rotate ' . serendipity_escapeshellarg($degrees) . ' ' . serendipity_escapeshellarg($infileThumb) . ' ' . serendipity_escapeshellarg($outfileThumb);
exec($cmd, $output, $result);
if ( $result != 0 ) {
echo '<span class="msg_error"><span class="icon-attention-circled" aria-hidden="true"></span> ' . sprintf(IMAGICK_EXEC_ERROR, $cmd, $output[0], $result) ."</span>\n";
}
unset($output, $result);
}
unset($output, $result);
}
@@ -1833,6 +1839,7 @@ function serendipity_killPath($basedir, $directory = '', $forceDelete = false) {
static $serious = true;
if ($handle = @opendir($basedir . $directory)) {
$filestack = [];
while (false !== ($file = @readdir($handle))) {
if ($file != '.' && $file != '..') {
if (is_dir($basedir . $directory . $file)) {
@@ -2020,6 +2027,7 @@ function serendipity_uploadSecure($var, $strip_paths = true, $append_slash = fal
$var = str_replace(' ', '_', $var);
$var = preg_replace('@[^0-9a-z\._/-]@i', '', $var);
$var = preg_replace('@\.+$@i', '', $var); # remove trailing dots
if ($strip_paths) {
$var = preg_replace('@(\.+[/\\\\]+)@', '/', $var);
}
@@ -2032,6 +2040,13 @@ function serendipity_uploadSecure($var, $strip_paths = true, $append_slash = fal
}
}
# truncate extensions to 5 chars
# 1) (\.[^./\\\]{5}) up to five chars after a dot are captured
# 2) expression matches only if followed by anything that is no dot
# and has no / or \ at the end
# 3) if epxression matches, everything after the capture group is deleted
$var = preg_replace('@(\.[^./\\\]{5})[^./\\\]+$@', '$1', $var);
return $var;
}
@@ -2252,14 +2267,29 @@ function serendipity_renameFile($id, $newName, $path = null) {
$newName = serendipity_uploadSecure(serendipity_makeFilename($newName), true);
$imgBase = $serendipity['serendipityPath'] . $serendipity['uploadPath'];
$newPath = "{$imgBase}{$path}{$newName}.{$file['extension']}";
$newPath = $imgBase . $path . $newName . (empty($file['extension']) ? '' : '.' . $file['extension']);
if (serendipity_isActiveFile($newPath)) {
return sprintf('<span class="msg_error"><span class="icon-attention-circled" aria-hidden="true"></span> ' . ERROR_FILE_FORBIDDEN . "</span>\n", $newName);
}
if (file_exists($newPath)) {
return sprintf('<span class="msg_error"><span class="icon-attention-circled" aria-hidden="true"></span> ' . ERROR_FILE_EXISTS . "</span>\n", $newName);
}
rename("{$imgBase}{$file['path']}{$file['realname']}", $newPath);
serendipity_renameThumbnails($id, "{$path}$newName");
serendipity_updateImageInDatabase(array('name' => $newName, 'realname' => basename($newPath)), $id);
serendipity_updateImageInEntries($id, $file);
if (rename("{$imgBase}{$file['path']}{$file['realname']}", $newPath)) {
# if renaming was successfull, rename thumbnails and update
# databases and entries
serendipity_renameThumbnails($id, "{$path}$newName");
serendipity_updateImageInDatabase(array('name' => $newName, 'realname' => basename($newPath)), $id);
serendipity_updateImageInEntries($id, $file);
} else {
return '<span class="msg_error"><span class="icon-attention-circled" aria-hidden="true"></span> ' . MEDIA_RENAME_FAILED . "</span>\n";
}
return TRUE;
}
/**
+11 -1
View File
@@ -156,7 +156,17 @@ function show_plugins($event_only = false, $sidebars = null)
$desc = '<details class="plugin_data">';
$desc .= '<summary><var class="perm_name">'.$cname[0].'</var></summary>';
$desc .= '<div class="plugin_desc clearfix">' . serendipity_specialchars($bag->get('description')) . '</div>';
$desc .= '<span class="block_level">' . VERSION . ': ' . $bag->get('version') . '</span>';
if (!empty($plugin_data['path'])) {
if ($event_only) {
$spartacus_type = 'event';
} else {
$spartacus_type = 'sidebar';
}
$desc .= sprintf('<span class="block_level"><a href="http://spartacus.s9y.org/index.php?mode=bygroups_%s_%s#%s">%s</a></span>',
$spartacus_type, $serendipity['lang'], $plugin_data['path'], (defined('PLUGIN_LINK_SPARTACUS') ? PLUGIN_LINK_SPARTACUS : 'PLUGIN_LINK_SPARTACUS'));
}
$desc .= '<span class="block_level"><b>' . ucfirst(AUTHOR) . '</b>: ' . serendipity_specialchars($bag->get('author')) . '</span>';
$desc .= '<span class="block_level"><b>' . ucfirst(VERSION) . '</b>: ' . $bag->get('version') . '</span>';
$desc .= '</details>';
$title = serendipity_plugin_api::get_plugin_title($plugin, '[' . $name . ']');
+5 -1
View File
@@ -78,7 +78,7 @@ function serveComments() {
continue;
}
if (preg_match('@^(last|f|t|from|to)[\s_-]*([\d-/ ]+)$@', strtolower(urldecode($v)), $m)) {
if (preg_match('@^(last|f|t|from|to)[\s_-]*([\d/ -]+)$@', strtolower(urldecode($v)), $m)) {
if ($m[1] == 'last') {
$usetime = time() - ($m[2]*86400);
$serendipity['GET']['commentStartTime'] = $usetime;
@@ -132,6 +132,10 @@ function serveJS($js_mode) {
header('Content-type: application/javascript; charset=' . LANG_CHARSET);
$out = "";
// FIXFIX: including genpage without any given action will generate the
// default page which is unneccessary, set action to empty to only make
// the fix below
$serendipity['GET']['action'] = 'empty';
include(S9Y_INCLUDE_PATH . 'include/genpage.inc.php');
+6 -2
View File
@@ -551,7 +551,11 @@ function serendipity_smarty_hookPlugin($params, $smarty) {
}
if (!isset($params['data'])) {
$params['data'] = &$serendipity;
if (isset($params['eventData'])) {
$params['data'] = &$params['eventData'];
} else {
$params['data'] = &$serendipity;
}
}
if (!isset($params['addData'])) {
@@ -1225,4 +1229,4 @@ function serendipity_smarty_show($template, $data = null, $debugtype = null, $de
}
return $debug . $serendipity['smarty']->fetch('file:'. $tplfile);
}
}
+47 -1
View File
@@ -7,6 +7,40 @@ if (IN_serendipity !== true) {
die ('Don\'t hack!');
}
// List of bundled core plugins
define('BUNDLED_PLUGINS',
array(
'serendipity_event_bbcode',
'serendipity_event_creativecommons',
'serendipity_event_emoticate',
'serendipity_event_entryproperties',
'serendipity_event_mailer',
'serendipity_event_nl2br',
'serendipity_event_responsiveimages',
'serendipity_event_s9ymarkup',
'serendipity_event_spamblock',
'serendipity_event_spartacus',
'serendipity_event_templatechooser',
'serendipity_event_textile',
'serendipity_event_xhtmlcleanup',
'serendipity_plugin_archives',
'serendipity_plugin_calendar',
'serendipity_plugin_categories',
'serendipity_plugin_comments',
'serendipity_plugin_creativecommons',
'serendipity_plugin_entrylinks',
'serendipity_plugin_eventwrapper',
'serendipity_plugin_history',
'serendipity_plugin_html_nugget',
'serendipity_plugin_plug',
'serendipity_plugin_recententries',
'serendipity_plugin_remoterss',
'serendipity_plugin_superuser',
'serendipity_plugin_syndication',
'serendipity_plugin_templatedropdown'
)
);
include_once S9Y_INCLUDE_PATH . 'include/functions.inc.php';
/* Core API function mappings
@@ -671,7 +705,7 @@ class serendipity_plugin_api
* @access public
* @param string The filename of the plugin to get information about
* @param array A referenced array that holds information about the plugin instance (self::load_plugin() response)
* @param type The type of the plugin (local|spartacus|...)
* @param type The type of the plugin (sidebar|event)
* @return array Information about the plugin
*/
static function &getPluginInfo(&$pluginFile, &$class_data, $type)
@@ -999,6 +1033,18 @@ class serendipity_plugin_api
return $title;
}
/**
* Check if a plugin is bundled with s9y core
*
* @access public
* @param string Name of a plugin
* @return boolean
*/
static function is_bundled_plugin($name)
{
return in_array ($name, BUNDLED_PLUGINS);
}
/**
* Check if a plugin is an event plugin
*
+2
View File
@@ -108,3 +108,5 @@ foreach($const['missing'] AS $file => $constants) {
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1120,3 +1120,5 @@ $i18n_filename_to = array('-', 'a', 'A', 'b', 'B', 'v', 'V', 'g', 'G', 'd', 'D
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1130,3 +1130,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1159,3 +1159,5 @@ $i18n_filename_to = array (
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1160,3 +1160,5 @@ $i18n_filename_to = array (
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1127,3 +1127,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+23 -15
View File
@@ -32,7 +32,7 @@
@define('CREATE_NEW_CAT', 'Neue Kategorie');
@define('I_WANT_THUMB', 'Ich möchte die Vorschau im Eintrag haben.');
@define('I_WANT_BIG_IMAGE', 'Ich möchte das große Bild im Eintrag haben.');
@define('I_WANT_NO_LINK', 'Das Bild soll kein Link sein');
@define('I_WANT_NO_LINK', 'Das Bild soll kein Link sein.');
@define('I_WANT_IT_TO_LINK', 'Das Bild soll hierhin linken:');
@define('BACK', 'Zurück');
@define('FORWARD', 'Vorwärts');
@@ -79,7 +79,7 @@
@define('YOUR_SEARCH_RETURNED_BLAHBLAH', 'Die Suche nach "%s" ergab %s Treffer:');
@define('IMAGE', 'Bild');
@define('ERROR_FILE_NOT_EXISTS', ' Alte Datei existiert nicht!');
@define('ERROR_FILE_EXISTS', 'Fehler: Neuer Dateiname existiert schon, bitte einen anderen wählen.');
@define('ERROR_FILE_EXISTS', 'Fehler: Neuer Dateiname "%s" existiert schon, bitte einen anderen wählen.');
@define('ERROR_SOMETHING', 'Fehler: Irgend etwas stimmt nicht.');
@define('ADDING_IMAGE', 'Bild hinzufügen ...');
@define('THUMB_CREATED_DONE', 'Vorschau erstellt.<br />Fertig.');
@@ -645,7 +645,7 @@
@define('NONE', 'keine');
@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Voreinstellungen für neue Einträge');
@define('UPGRADE', 'Aktualisieren');
@define('UPGRADE_TO_VERSION', 'Aktuelle version %s');
@define('UPGRADE_TO_VERSION', 'Aktualisierbar auf Version %s.');
@define('DELETE_DIRECTORY', 'Verzeichnis löschen');
@define('DELETE_DIRECTORY_DESC', 'Sie sind dabei, den Inhalt eines Verzeichnisses zu löschen, in welchem Dateien enthalten sind, die möglicherweise in Blog-Einträgen verwendet werden!');
@define('FORCE_DELETE', 'ALLE Dateien dieses Verzeichnisses löschen, inklusive der Dateien, die Serendipity nicht katalogisiert hat');
@@ -858,8 +858,8 @@
@define('PLUGIN_AVAILABLE_COUNT', 'Gesamt: %d Plugins.');
@define('SYNDICATION_RFC2616', 'Strikte RFC2616 RSS-Feed Kompatibilität');
@define('SYNDICATION_RFC2616_DESC', 'Falls RFC2616 NICHT strikt ausgelegt wird, können alle Conditional GET Anfragen zu Serendipity die letzten Einträge seit dem letzten Client-Abruf zurückliefern - für Benutzer, die auch nach ihrem Urlaub alle Artikel lesen wollen, ist dies eine tolle Sache. Jedoch können dadurch einige spezielle Clients wie z.B. Planet aus dem Tritt gebracht werden, und neue Artikel ihres RSS-Feeds falsch interpretieren. Wenn diese Option also auf JA gesetzt wird, wird zwar die RFC befolgt, aber ihre RSS-Leser könnten Einträge verpassen wenn Sie länger nicht auf ihrer Seite waren. Wie auch immer sie sich entscheiden, entweder ärgern Sie damit Clients wie Planet oder Ihre Benutzer. Referenz: <a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1461728&amp;group_id=75065&amp;atid=542822" target="_blank" rel="nofollow">SourceForge</a>');
@define('SYNDICATION_RFC2616', 'Strikte RFC2616-RSS-Feed-Kompatibilität');
@define('SYNDICATION_RFC2616_DESC', 'Falls RFC2616 NICHT strikt ausgelegt wird, können alle Conditional-GET-Anfragen zu Serendipity die letzten Einträge seit dem letzten Client-Abruf zurückliefern - für Benutzer, die auch nach ihrem Urlaub alle Artikel lesen wollen, ist dies eine tolle Sache. Jedoch können dadurch einige spezielle Clients, wie z.B. Planet, aus dem Tritt gebracht werden, und neue Artikel ihres RSS-Feeds falsch interpretieren. Wenn diese Option also auf JA gesetzt wird, wird zwar der RFC befolgt, aber ihre RSS-Leser könnten Einträge verpassen, wenn Sie länger nicht auf ihrer Seite waren. Wie auch immer sie sich entscheiden, entweder ärgern Sie damit Clients wie Planet oder Ihre Benutzer.');
@define('MEDIA_PROPERTY_DATE', 'Verknüpftes Datum');
@define('MEDIA_PROPERTY_RUN_LENGTH', 'Laufzeit');
@define('FILENAME_REASSIGNED', 'Automagisch zugewiesener Dateiname: %s');
@@ -953,27 +953,27 @@
@define('MEDIA_PROPERTY_ALT', 'Bildinhalt (im ALT-Attribut)');
@define('MEDIA_TITLE', 'TITLE-Attribut (wird beim Überfahren mit der Maus angezeigt)');
@define('QUICKSEARCH_SORT', 'How should search-results be sorted?');
@define('QUICKSEARCH_SORT', 'Wie sollen Suchergebnisse sortiert werden?');
@define('QUICKSEARCH_SORT_RELEVANCE', 'Relevance');
@define('QUICKSEARCH_SORT_RELEVANCE', 'Relevanz');
@define('PERMISSION_HIDDENGROUP', 'Hidden group / Non-Author');
@define('SEARCH_FULLENTRY', 'Show full entry');
@define('SEARCH_FULLENTRY', 'Gesamten Eintrag anzeigen');
@define('NAVLINK_AMOUNT', 'Anzahl der Links in der Navigationsleiste (Themes verwalten-Seite muss danach neu geladen werden)');
@define('NAV_LINK_TEXT', 'Text des Navigationsleisten-Links');
@define('NAV_LINK_URL', 'URL des Navigationsleisten-Links');
@define('MODERATE_SELECTED_COMMENTS', 'Markierte Kommentare freischalten');
@define('WEBLOG', 'Weblog');
@define('ACTIVE_COMMENT_SUBSCRIPTION', 'Subscribed');
@define('PENDING_COMMENT_SUBSCRIPTION', 'Pending confirmation');
@define('NO_COMMENT_SUBSCRIPTION', 'Not subscribed');
@define('SUMMARY', 'Summary');
@define('ACTIVE_COMMENT_SUBSCRIPTION', 'Abonniert');
@define('PENDING_COMMENT_SUBSCRIPTION', 'Wartet auf Bestätigung');
@define('NO_COMMENT_SUBSCRIPTION', 'Nicht abonniert');
@define('SUMMARY', 'Übersicht');
// Next lines were translated on 2012/05/29
@define('ABOUT_TO_DELETE_FILES', 'Sie beabsichtigen mehrere Dateien auf einmal zu löschen.<br />Wenn Sie diese in ihren Einträgen verwenden, wird das Löschen Lücken erzeugen.<br />Soll trotzdem fortgefahren werden?<br /><br />');
@define('ARCHIVE_SORT_STABLE', 'Stable Archives');
@define('ARCHIVE_SORT_STABLE_DESC', 'Sort the archive-pages descending, so they are stable and search-crawler do not have to reindex them.');
@define('ARCHIVE_SORT_STABLE', 'Unveränderliche Archiv-Seiten');
@define('ARCHIVE_SORT_STABLE_DESC', 'Archiv-Seiten absteigend sortieren, so dass die ältesten Einträge sich auf Seite 1 finden, so dass sich die Inhalte nicht mehr ändern und Suchmaschinen die Seiten nicht ständig neu indizieren müssen.');
// added 2012-11-29
@define('PLAIN_ASCII_NAMES', '(keine Sonderzeichen, Umlaute)');
@@ -1009,7 +1009,7 @@
@define('PUBLISH_ERROR', 'Fehler bei der Veröffentlichung:');
@define('UPDATE_NOTIFICATION', 'Update-Hinweis');
@define('NEW_VERSION_AVAILABLE', 'Neue stabile Serendipity version verfügbar: ');
@define('MOVE', 'Bewegen');
@define('MOVE', 'Verschieben');
@define('MOVE_UP', 'Nach oben');
@define('MOVE_DOWN', 'Nach unten');
@define('INSTALL_NEW_SIDEBAR_PLUGIN', 'Seitenleisten-Plugin installieren');
@@ -1130,3 +1130,11 @@
@define('MAINTENANCE_MODE_TIME', 'Wartungsmodus aktiv bis');
@define('MAINTENANCE_MODE_ACTIVATE', 'Aktivieren');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deaktivieren');
@define('PLUGIN_LINK_SPARTACUS', 'Weitere Informationen');
@define('PLUGIN_ALL_UPDATED', 'Alle Plugins aktualisiert');
@define('MEDIA_DIRECTORY_MOVE', 'Dateien verschieben');
@define('SOURCE', 'Quelle');
@define('PLUGIN_SOURCE_BUNDLED', 'mitgeliefertes Plugin');
@define('PLUGIN_SOURCE_LOCAL', 'lokal installiert');
@define('MEDIA_RENAME_FAILED', 'Umbenennen fehlgeschlagen!');
+9 -1
View File
@@ -80,7 +80,7 @@
@define('SEARCH_TOO_SHORT', 'Your search-query must be longer than 3 characters. You can try to append * to shorter words, like: s9y* to trick the search into using shorter words.');
@define('IMAGE', 'Image');
@define('ERROR_FILE_NOT_EXISTS', 'Error: Old filename does not exist!');
@define('ERROR_FILE_EXISTS', 'Error: New filename already used, pick another!');
@define('ERROR_FILE_EXISTS', 'Error: New filename "%s" already used, pick another!');
@define('ERROR_SOMETHING', 'Error: Something is wrong.');
@define('ADDING_IMAGE', 'Adding image...');
@define('THUMB_CREATED_DONE', 'Thumbnail created.<br/>Done.');
@@ -1129,3 +1129,11 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
@define('MEDIA_DIRECTORY_MOVE', 'Move files to another directory');
@define('SOURCE', 'Source');
@define('PLUGIN_SOURCE_BUNDLED', 'bundled core plugin');
@define('PLUGIN_SOURCE_LOCAL', 'locally installed');
@define('MEDIA_RENAME_FAILED', 'Renaming failed!');
+2
View File
@@ -1146,3 +1146,5 @@ Melvin TODO [20060128]: What spanish word do we use for "referrers" ??
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1130,3 +1130,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1128,3 +1128,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1135,3 +1135,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1126,3 +1126,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1128,3 +1128,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1131,3 +1131,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1132,3 +1132,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1132,3 +1132,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1130,3 +1130,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1130,3 +1130,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1126,3 +1126,5 @@ $i18n_filename_to = array('_', 'a', 'A', 'a', 'A', 'b', 'B', 'c', 'C', 'c', 'C
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1132,3 +1132,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
@@ -1139,3 +1139,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1130,3 +1130,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1131,3 +1131,5 @@ $i18n_filename_to = array('_', 'a', 'A', 'b', 'B', 'v', 'V', 'g', 'G', 'd', 'D
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1047,3 +1047,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1128,3 +1128,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1118,3 +1118,5 @@ $i18n_filename_to = array (
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1127,3 +1127,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1132,3 +1132,5 @@ $i18n_unknown = 'tw';
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1132,3 +1132,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1133,3 +1133,5 @@ $i18n_unknown = 'tw';
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1128,3 +1128,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
-27
View File
@@ -81,30 +81,3 @@ foreach($const['missing'] AS $file => $constants) {
echo "---------------------------\n";
}
@define('SYNDICATION_PLUGIN_XML_DESC', 'Set to "none" if you only want to show a text link.');
@define('MULTICHECK_NO_ITEM', 'No item selected, please check at least one. <a href="%s">Return to previous page</a>.');
@define('MULTICHECK_NO_DIR', 'No directory selected, please choose one. <a href="%s">Return to previous page</a>.');
@define('BULKMOVE_INFO', 'Bulk-move info');
@define('BULKMOVE_INFO_DESC', 'You can select multiple files to bulk-move them to a new location. <strong>Note:</strong> This action cannot be undone, just like bulk-deletion of multiple files. All checked files will be physically moved, and referring blog entries are rewritten to point to the new location.');
@define('FIRST_PAGE', 'First Page');
@define('LAST_PAGE', 'Last Page');
@define('MEDIA_PROPERTIES_DONE', 'Properties of #%d changed.');
@define('DIRECTORY_INFO', 'Directory info');
@define('DIRECTORY_INFO_DESC', 'Directories reflect their physical folder directory name. If you want to change or move directories which contain items, you have two choices. Either create the directory or subdirectory you want, then move the items to the new directory via the media library and afterwards, delete the empty old directory there. Or completely change the whole old directory via the edit directory button below and rename it to whatever you like (existing subdir/ + newname). This will move all directories and items and change referring blog entries.');
@define('MEDIA_RESIZE_EXISTS', 'File dimensions already exist!');
@define('USE_CACHE', 'Enable caching');
@define('USE_CACHE_DESC', 'Enables an internal cache to not repeat specific database queries. This reduces the load on servers with medium to high traffic and improves page load time.');
@define('CONFIG_PERMALINK_PATH_DESC', 'Please note that you have to use a prefix so that Serendipity can properly map the URL to the proper action. You may change the prefix to any unique name, but not remove it. This applies to all path prefix definitions.');
@define('CONFIG_ALLOW_LOCAL_URL', 'Allow to fetch data from local URLs');
@define('CONFIG_ALLOW_LOCAL_URL_DESC', 'By default, it is forbidden due to security constrains to fetch data from local URLs to prevent Server Side Request Forgers (SSRF). If you use a local intranet, you can enable this option to allow fetching data.');
@define('REMOTE_FILE_INVALID', 'The given URL appears to be local and is not allowed to be fetched. You can allow this by setting the option "Allow to fetch data from local URLs" in your blog configuration.');
@define('URL_NOT_FOUND', 'The requested page could not be found (404). This is the default page.');
@define('INSERT_ALL', 'Insert All');
@define('COMMENT_NOT_DELETED', 'Could not delete comment #%s .');
@define('MAINTENANCE_MODE', 'Maintenance Mode');
@define('MAINTENANCE_MODE_DESC', 'Activate maintenance mode to prevent access from users that are not logged in.');
@define('MAINTENANCE_MODE_WARNING', "Do not log out, as you won't be able to log in again until maintenance mode expires!");
@define('MAINTENANCE_MODE_DURATION', 'Duration (in hours):');
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
+2
View File
@@ -1120,3 +1120,5 @@ $i18n_filename_to = array('-', 'a', 'A', 'b', 'B', 'v', 'V', 'g', 'G', 'd', 'D
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1130,3 +1130,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1159,3 +1159,5 @@ $i18n_filename_to = array (
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1160,3 +1160,5 @@ $i18n_filename_to = array (
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1127,3 +1127,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+23 -15
View File
@@ -32,7 +32,7 @@
@define('CREATE_NEW_CAT', 'Neue Kategorie');
@define('I_WANT_THUMB', 'Ich möchte die Vorschau im Eintrag haben.');
@define('I_WANT_BIG_IMAGE', 'Ich möchte das große Bild im Eintrag haben.');
@define('I_WANT_NO_LINK', 'Das Bild soll kein Link sein');
@define('I_WANT_NO_LINK', 'Das Bild soll kein Link sein.');
@define('I_WANT_IT_TO_LINK', 'Das Bild soll hierhin linken:');
@define('BACK', 'Zurück');
@define('FORWARD', 'Vorwärts');
@@ -79,7 +79,7 @@
@define('YOUR_SEARCH_RETURNED_BLAHBLAH', 'Die Suche nach "%s" ergab %s Treffer:');
@define('IMAGE', 'Bild');
@define('ERROR_FILE_NOT_EXISTS', ' Alte Datei existiert nicht!');
@define('ERROR_FILE_EXISTS', 'Fehler: Neuer Dateiname existiert schon, bitte einen anderen wählen.');
@define('ERROR_FILE_EXISTS', 'Fehler: Neuer Dateiname "%s" existiert schon, bitte einen anderen wählen.');
@define('ERROR_SOMETHING', 'Fehler: Irgend etwas stimmt nicht.');
@define('ADDING_IMAGE', 'Bild hinzufügen ...');
@define('THUMB_CREATED_DONE', 'Vorschau erstellt.<br />Fertig.');
@@ -645,7 +645,7 @@
@define('NONE', 'keine');
@define('USERCONF_CAT_DEFAULT_NEW_ENTRY', 'Voreinstellungen für neue Einträge');
@define('UPGRADE', 'Aktualisieren');
@define('UPGRADE_TO_VERSION', 'Aktuelle version %s');
@define('UPGRADE_TO_VERSION', 'Aktualisierbar auf Version %s.');
@define('DELETE_DIRECTORY', 'Verzeichnis löschen');
@define('DELETE_DIRECTORY_DESC', 'Sie sind dabei, den Inhalt eines Verzeichnisses zu löschen, in welchem Dateien enthalten sind, die möglicherweise in Blog-Einträgen verwendet werden!');
@define('FORCE_DELETE', 'ALLE Dateien dieses Verzeichnisses löschen, inklusive der Dateien, die Serendipity nicht katalogisiert hat');
@@ -858,8 +858,8 @@
@define('PLUGIN_AVAILABLE_COUNT', 'Gesamt: %d Plugins.');
@define('SYNDICATION_RFC2616', 'Strikte RFC2616 RSS-Feed Kompatibilität');
@define('SYNDICATION_RFC2616_DESC', 'Falls RFC2616 NICHT strikt ausgelegt wird, können alle Conditional GET Anfragen zu Serendipity die letzten Einträge seit dem letzten Client-Abruf zurückliefern - für Benutzer, die auch nach ihrem Urlaub alle Artikel lesen wollen, ist dies eine tolle Sache. Jedoch können dadurch einige spezielle Clients wie z.B. Planet aus dem Tritt gebracht werden, und neue Artikel ihres RSS-Feeds falsch interpretieren. Wenn diese Option also auf JA gesetzt wird, wird zwar die RFC befolgt, aber ihre RSS-Leser könnten Einträge verpassen wenn Sie länger nicht auf ihrer Seite waren. Wie auch immer sie sich entscheiden, entweder ärgern Sie damit Clients wie Planet oder Ihre Benutzer. Referenz: <a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1461728&amp;group_id=75065&amp;atid=542822" target="_blank" rel="nofollow">SourceForge</a>');
@define('SYNDICATION_RFC2616', 'Strikte RFC2616-RSS-Feed-Kompatibilität');
@define('SYNDICATION_RFC2616_DESC', 'Falls RFC2616 NICHT strikt ausgelegt wird, können alle Conditional-GET-Anfragen zu Serendipity die letzten Einträge seit dem letzten Client-Abruf zurückliefern - für Benutzer, die auch nach ihrem Urlaub alle Artikel lesen wollen, ist dies eine tolle Sache. Jedoch können dadurch einige spezielle Clients, wie z.B. Planet, aus dem Tritt gebracht werden, und neue Artikel ihres RSS-Feeds falsch interpretieren. Wenn diese Option also auf JA gesetzt wird, wird zwar der RFC befolgt, aber ihre RSS-Leser könnten Einträge verpassen, wenn Sie länger nicht auf ihrer Seite waren. Wie auch immer sie sich entscheiden, entweder ärgern Sie damit Clients wie Planet oder Ihre Benutzer.');
@define('MEDIA_PROPERTY_DATE', 'Verknüpftes Datum');
@define('MEDIA_PROPERTY_RUN_LENGTH', 'Laufzeit');
@define('FILENAME_REASSIGNED', 'Automagisch zugewiesener Dateiname: %s');
@@ -953,27 +953,27 @@
@define('MEDIA_PROPERTY_ALT', 'Bildinhalt (im ALT-Attribut)');
@define('MEDIA_TITLE', 'TITLE-Attribut (wird beim Überfahren mit der Maus angezeigt)');
@define('QUICKSEARCH_SORT', 'How should search-results be sorted?');
@define('QUICKSEARCH_SORT', 'Wie sollen Suchergebnisse sortiert werden?');
@define('QUICKSEARCH_SORT_RELEVANCE', 'Relevance');
@define('QUICKSEARCH_SORT_RELEVANCE', 'Relevanz');
@define('PERMISSION_HIDDENGROUP', 'Hidden group / Non-Author');
@define('SEARCH_FULLENTRY', 'Show full entry');
@define('SEARCH_FULLENTRY', 'Gesamten Eintrag anzeigen');
@define('NAVLINK_AMOUNT', 'Anzahl der Links in der Navigationsleiste (Themes verwalten-Seite muss danach neu geladen werden)');
@define('NAV_LINK_TEXT', 'Text des Navigationsleisten-Links');
@define('NAV_LINK_URL', 'URL des Navigationsleisten-Links');
@define('MODERATE_SELECTED_COMMENTS', 'Markierte Kommentare freischalten');
@define('WEBLOG', 'Weblog');
@define('ACTIVE_COMMENT_SUBSCRIPTION', 'Subscribed');
@define('PENDING_COMMENT_SUBSCRIPTION', 'Pending confirmation');
@define('NO_COMMENT_SUBSCRIPTION', 'Not subscribed');
@define('SUMMARY', 'Summary');
@define('ACTIVE_COMMENT_SUBSCRIPTION', 'Abonniert');
@define('PENDING_COMMENT_SUBSCRIPTION', 'Wartet auf Bestätigung');
@define('NO_COMMENT_SUBSCRIPTION', 'Nicht abonniert');
@define('SUMMARY', 'Übersicht');
// Next lines were translated on 2012/05/29
@define('ABOUT_TO_DELETE_FILES', 'Sie beabsichtigen mehrere Dateien auf einmal zu löschen.<br />Wenn Sie diese in ihren Einträgen verwenden, wird das Löschen Lücken erzeugen.<br />Soll trotzdem fortgefahren werden?<br /><br />');
@define('ARCHIVE_SORT_STABLE', 'Stable Archives');
@define('ARCHIVE_SORT_STABLE_DESC', 'Sort the archive-pages descending, so they are stable and search-crawler do not have to reindex them.');
@define('ARCHIVE_SORT_STABLE', 'Unveränderliche Archiv-Seiten');
@define('ARCHIVE_SORT_STABLE_DESC', 'Archiv-Seiten absteigend sortieren, so dass die ältesten Einträge sich auf Seite 1 finden, so dass sich die Inhalte nicht mehr ändern und Suchmaschinen die Seiten nicht ständig neu indizieren müssen.');
// added 2012-11-29
@define('PLAIN_ASCII_NAMES', '(keine Sonderzeichen, Umlaute)');
@@ -1009,7 +1009,7 @@
@define('PUBLISH_ERROR', 'Fehler bei der Veröffentlichung:');
@define('UPDATE_NOTIFICATION', 'Update-Hinweis');
@define('NEW_VERSION_AVAILABLE', 'Neue stabile Serendipity version verfügbar: ');
@define('MOVE', 'Bewegen');
@define('MOVE', 'Verschieben');
@define('MOVE_UP', 'Nach oben');
@define('MOVE_DOWN', 'Nach unten');
@define('INSTALL_NEW_SIDEBAR_PLUGIN', 'Seitenleisten-Plugin installieren');
@@ -1130,3 +1130,11 @@
@define('MAINTENANCE_MODE_TIME', 'Wartungsmodus aktiv bis');
@define('MAINTENANCE_MODE_ACTIVATE', 'Aktivieren');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deaktivieren');
@define('PLUGIN_LINK_SPARTACUS', 'Weitere Informationen');
@define('PLUGIN_ALL_UPDATED', 'Alle Plugins aktualisiert');
@define('MEDIA_DIRECTORY_MOVE', 'Dateien verschieben');
@define('SOURCE', 'Quelle');
@define('PLUGIN_SOURCE_BUNDLED', 'mitgeliefertes Plugin');
@define('PLUGIN_SOURCE_LOCAL', 'lokal installiert');
@define('MEDIA_RENAME_FAILED', 'Umbenennen fehlgeschlagen!');
+10 -2
View File
@@ -80,7 +80,7 @@
@define('SEARCH_TOO_SHORT', 'Your search-query must be longer than 3 characters. You can try to append * to shorter words, like: s9y* to trick the search into using shorter words.');
@define('IMAGE', 'Image');
@define('ERROR_FILE_NOT_EXISTS', 'Error: Old filename does not exist!');
@define('ERROR_FILE_EXISTS', 'Error: New filename already used, pick another!');
@define('ERROR_FILE_EXISTS', 'Error: New filename "%s" already used, pick another!');
@define('ERROR_SOMETHING', 'Error: Something is wrong.');
@define('ADDING_IMAGE', 'Adding image...');
@define('THUMB_CREATED_DONE', 'Thumbnail created.<br/>Done.');
@@ -859,7 +859,7 @@
@define('PLUGIN_AVAILABLE_COUNT', 'Total: %d plugins.');
@define('SYNDICATION_RFC2616', 'Activate strict RFC2616 RSS-Feed compliance');
@define('SYNDICATION_RFC2616_DESC', 'NOT Enforcing RFC2616 means that all Conditional GETs to Serendipity will return entries last modified since the time of the last request. With that setting to "false", your visitors will get all articles since their last request, which is considered a good thing. However, some Agents like Planet act weird, if that happens, at it also violates RFC2616. So if you set this option to "TRUE" you will comply with that RFC, but readers of your RSS feed might miss items in their holidays. So either way, either it hearts Aggregators like Planet, or it hurts actual readers of your blog. If you are facing complaints from either side, you can toggle this option. Reference: <a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1461728&amp;group_id=75065&amp;atid=542822" target="_blank" rel="nofollow">SourceForge</a>');
@define('SYNDICATION_RFC2616_DESC', 'NOT Enforcing RFC2616 means that all Conditional GETs to Serendipity will return entries last modified since the time of the last request. With that setting to "false", your visitors will get all articles since their last request, which is considered a good thing. However, some Agents like Planet act weird, if that happens, at it also violates RFC2616. So if you set this option to "TRUE" you will comply with that RFC, but readers of your RSS feed might miss items in their holidays. So either way, either it hearts Aggregators like Planet, or it hurts actual readers of your blog. If you are facing complaints from either side, you can toggle this option.');
@define('MEDIA_PROPERTY_DATE', 'Associated Date');
@define('MEDIA_PROPERTY_RUN_LENGTH', 'Run-Length');
@define('FILENAME_REASSIGNED', 'Automagically assigned new file name: %s');
@@ -1129,3 +1129,11 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
@define('MEDIA_DIRECTORY_MOVE', 'Move files to another directory');
@define('SOURCE', 'Source');
@define('PLUGIN_SOURCE_BUNDLED', 'bundled core plugin');
@define('PLUGIN_SOURCE_LOCAL', 'locally installed');
@define('MEDIA_RENAME_FAILED', 'Renaming failed!');
+2
View File
@@ -1146,3 +1146,5 @@ Melvin TODO [20060128]: What spanish word do we use for "referrers" ??
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1130,3 +1130,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1128,3 +1128,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1135,3 +1135,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1126,3 +1126,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1128,3 +1128,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1131,3 +1131,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1132,3 +1132,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1132,3 +1132,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1130,3 +1130,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1130,3 +1130,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1126,3 +1126,5 @@ $i18n_filename_to = array('_', 'a', 'A', 'a', 'A', 'b', 'B', 'c', 'C', 'c', 'C
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1132,3 +1132,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1139,3 +1139,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1130,3 +1130,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1131,3 +1131,5 @@ $i18n_filename_to = array('_', 'a', 'A', 'b', 'B', 'v', 'V', 'g', 'G', 'd', 'D
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1047,3 +1047,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1128,3 +1128,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1118,3 +1118,5 @@ $i18n_filename_to = array (
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1127,3 +1127,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1132,3 +1132,5 @@ $i18n_unknown = 'tw';
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1132,3 +1132,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1133,3 +1133,5 @@ $i18n_unknown = 'tw';
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
+2
View File
@@ -1128,3 +1128,5 @@
@define('MAINTENANCE_MODE_TIME', 'Will be active until');
@define('MAINTENANCE_MODE_ACTIVATE', 'Activate');
@define('MAINTENANCE_MODE_DEACTIVATE', 'Deactivate');
@define('PLUGIN_LINK_SPARTACUS', 'More information');
@define('PLUGIN_ALL_UPDATED', 'All Plugins updated');
@@ -17,7 +17,7 @@ class serendipity_event_bbcode extends serendipity_event
$propbag->add('description', PLUGIN_EVENT_BBCODE_DESC);
$propbag->add('stackable', false);
$propbag->add('author', 'Jez Hancock, Garvin Hicking');
$propbag->add('version', '2.10');
$propbag->add('version', '2.11');
$propbag->add('requirements', array(
'serendipity' => '1.6',
'smarty' => '2.6.7',
@@ -304,6 +304,12 @@ class serendipity_event_bbcode extends serendipity_event
.bb-list-ordered-ua {
list-style-type: upper-alpha;
}
.bb-list-ordered-lr {
list-style-type:lower-roman;
}
.bb-list-ordered-ur {
list-style-type:upper-roman;
}
/* serendipity_event_bbcode end */
@@ -1,3 +1,13 @@
1.41.5:
-------
* Fix accidental deletion of extended properties.
[1.41.4 not backported]
1.41.3:
-------
* Add missing English language constant.
1.38:
-----
* Fixed preview of extended properties by 1.37
@@ -5,4 +15,4 @@
1.37:
-----
* Added image preview to extended properties if value is image format (Don Chambers)
* Added image preview to extended properties if value is image format (Don Chambers)
@@ -19,7 +19,7 @@ class serendipity_event_entryproperties extends serendipity_event
$propbag->add('description', PLUGIN_EVENT_ENTRYPROPERTIES_DESC);
$propbag->add('stackable', false);
$propbag->add('author', 'Garvin Hicking');
$propbag->add('version', '1.41.2');
$propbag->add('version', '1.41.5');
$propbag->add('requirements', array(
'serendipity' => '1.6',
'smarty' => '2.6.27',
@@ -244,8 +244,12 @@ class serendipity_event_entryproperties extends serendipity_event
$property = serendipity_fetchEntryProperties($eventData['id']);
$supported_properties = serendipity_event_entryproperties::getSupportedProperties();
// serendipity_updertEntry may have been called from a plugin so $serendipity['POST']['properties']
// is not completely filled, so we_ always_ have to check that $serendipity['POST']['propertyform']
// is set (which will only happen if the form has been submitted) - not just in the foreach() below
// Cleanup properties first, if none disable_markups plugins were set, or a previous selected one was re-set
if (is_array($serendipity['POST']['properties']) && !is_array($serendipity['POST']['properties']['disable_markups'])) {
if (isset($serendipity['POST']['propertyform']) && is_array($serendipity['POST']['properties']) && !is_array($serendipity['POST']['properties']['disable_markups'])) {
$q = "DELETE FROM {$serendipity['dbPrefix']}entryproperties WHERE entryid = " . (int)$eventData['id'] . " AND property LIKE 'ep_disable_markup_%'";
serendipity_db_query($q);
}
@@ -253,14 +257,14 @@ class serendipity_event_entryproperties extends serendipity_event
// Special case for input type checkbox entryproperties
$reset_properties = array('is_sticky', 'no_frontpage', 'hiderss');
foreach($reset_properties AS $property) {
if (!isset($serendipity['POST']['propertyform']) && is_array($serendipity['POST']['properties']) && !in_array($property, $serendipity['POST']['properties'])) {
if (isset($serendipity['POST']['propertyform']) && is_array($serendipity['POST']['properties']) && !in_array($property, $serendipity['POST']['properties'])) {
$q = "DELETE FROM {$serendipity['dbPrefix']}entryproperties WHERE entryid = " . (int)$eventData['id'] . " AND property = 'ep_{$property}'";
serendipity_db_query($q);
}
}
// Special case for disable markups.
if (is_array($properties['disable_markups'])) {
if (isset($serendipity['POST']['propertyform']) && is_array($properties['disable_markups'])) {
$q = "DELETE FROM {$serendipity['dbPrefix']}entryproperties WHERE entryid = " . (int)$eventData['id'] . " AND property LIKE 'ep_disable_markup_%'";
serendipity_db_query($q);
@@ -370,7 +374,7 @@ class serendipity_event_entryproperties extends serendipity_event
case 'password':
?>
<div class="entryproperties_access_pw adv_opts_box adv_opts_box form_field">
<div class="entryproperties_access_pw adv_opts_box form_field">
<label for="properties_access_pw"><?php echo PASSWORD; ?>:</label>
<input type="password" name="ignore_password" value="" style="visibility: hidden; width: 1px">
<input id="properties_access_pw" name="serendipity[properties][entrypassword]" type="password" autocomplete="off" value="<?php echo serendipity_specialchars($password); ?>">
@@ -1034,4 +1038,4 @@ class serendipity_event_entryproperties extends serendipity_event
}
/* vim: set sts=4 ts=4 expandtab : */
?>
?>
@@ -0,0 +1,8 @@
1.60:
-----
* Add new field to prepend a mail body message for each mail
* Adds checkbox to allow force sending e-mails even when a blog entry is published already
* Fixes missing "Keep stripped tags" description
@@ -16,6 +16,9 @@
@define('PLUGIN_EVENT_MAILER_ISTOSENDIT', 'Diesen Eintrag per E-Mail versenden');
@define('PLUGIN_EVENT_MAILER_SENDTOALL', 'An alle Redakteure schicken');
@define('PLUGIN_EVENT_MAILER_STRIPTAGS', 'Bilder und Hyperlinks beibehalten, wenn HTML entfernt wird?');
@define('PLUGIN_EVENT_MAILER_STRIPTAGSDESC', 'Gilt nur, wenn HTML entfernt wird. Falls aktiviert, werden Bilder und Hyperlinks in der Mail enthalten bleiben (in eckigen Klammern). Falls deaktiviert, werden alle Bilder und Hyperlinks auch entfernt.');
@define('PLUGIN_EVENT_MAILER_KEEPSTRIPTAGS', 'Bilder und Hyperlinks beibehalten, wenn HTML entfernt wird?');
@define('PLUGIN_EVENT_MAILER_KEEPSTRIPTAGSDESC', 'Gilt nur, wenn HTML entfernt wird. Falls aktiviert, werden Bilder und Hyperlinks in der Mail enthalten bleiben (in eckigen Klammern). Falls deaktiviert, werden alle Bilder und Hyperlinks auch entfernt.');
@define('PLUGIN_EVENT_MAILER_FORCESEND', 'E-Mail-Versand erzwingen');
@define('PLUGIN_EVENT_MAILER_FORCESEND_DESC', 'Standardmäßig werden E-Mails nur beim erstmaligen Veröffentlichen eines Artikels versendet.');
@define('PLUGIN_EVENT_MAILER_MAILTEXT', 'Optionaler Text am Anfang der E-Mail (z.B. eine Grußbotschaft oder Begründung, warum der Blog-Artikel per E-Mail geschickt wird)');
@@ -16,6 +16,9 @@
@define('PLUGIN_EVENT_MAILER_ISTOSENDIT', 'Diesen Eintrag per E-Mail versenden');
@define('PLUGIN_EVENT_MAILER_SENDTOALL', 'An alle Redakteure schicken');
@define('PLUGIN_EVENT_MAILER_STRIPTAGS', 'Bilder und Hyperlinks beibehalten, wenn HTML entfernt wird?');
@define('PLUGIN_EVENT_MAILER_STRIPTAGSDESC', 'Gilt nur, wenn HTML entfernt wird. Falls aktiviert, werden Bilder und Hyperlinks in der Mail enthalten bleiben (in eckigen Klammern). Falls deaktiviert, werden alle Bilder und Hyperlinks auch entfernt.');
@define('PLUGIN_EVENT_MAILER_KEEPSTRIPTAGS', 'Bilder und Hyperlinks beibehalten, wenn HTML entfernt wird?');
@define('PLUGIN_EVENT_MAILER_KEEPSTRIPTAGSDESC', 'Gilt nur, wenn HTML entfernt wird. Falls aktiviert, werden Bilder und Hyperlinks in der Mail enthalten bleiben (in eckigen Klammern). Falls deaktiviert, werden alle Bilder und Hyperlinks auch entfernt.');
@define('PLUGIN_EVENT_MAILER_FORCESEND', 'E-Mail-Versand erzwingen');
@define('PLUGIN_EVENT_MAILER_FORCESEND_DESC', 'Standardmäßig werden E-Mails nur beim erstmaligen Veröffentlichen eines Artikels versendet.');
@define('PLUGIN_EVENT_MAILER_MAILTEXT', 'Optionaler Text am Anfang der E-Mail (z.B. eine Grußbotschaft oder Begründung, warum der Blog-Artikel per E-Mail geschickt wird)');
@@ -21,6 +21,8 @@
@define('PLUGIN_EVENT_MAILER_SENDING', 'Sending');
@define('PLUGIN_EVENT_MAILER_ISTOSENDIT', 'Send this entry via E-Mail');
@define('PLUGIN_EVENT_MAILER_SENDTOALL', 'Send to all authors');
@define('PLUGIN_EVENT_MAILER_STRIPTAGS', 'Keep images and hyperlinks when removing html?');
@define('PLUGIN_EVENT_MAILER_STRIPTAGSDESC', 'Only applies when removing HTML-tags from the mail. If enabled, images and hyperlinks will be put inside the text, when disabled those placeholders will also be removed.');
@define('PLUGIN_EVENT_MAILER_KEEPSTRIPTAGS', 'Keep images and hyperlinks when removing html?');
@define('PLUGIN_EVENT_MAILER_KEEPSTRIPTAGSDESC', 'Only applies when removing HTML-tags from the mail. If enabled, images and hyperlinks will be put inside the text, when disabled those placeholders will also be removed.');
@define('PLUGIN_EVENT_MAILER_FORCESEND', 'Forces sending an E-Mail on save');
@define('PLUGIN_EVENT_MAILER_FORCESEND_DESC', 'By default, E-Mails are only sent when publishing an entry for the first time');
@define('PLUGIN_EVENT_MAILER_MAILTEXT', 'Optional custom text to prepend to the E-Mail (like a greeting or explaining why this entry is being mailed)');
@@ -19,7 +19,7 @@ class serendipity_event_mailer extends serendipity_event
$propbag->add('description', PLUGIN_EVENT_MAILER_DESC);
$propbag->add('stackable', false);
$propbag->add('author', 'Sebastian Nohn, Kristian Koehntopp, Garvin Hicking');
$propbag->add('version', '1.54');
$propbag->add('version', '1.60');
$propbag->add('requirements', array(
'serendipity' => '1.6',
'smarty' => '2.6.7',
@@ -28,10 +28,11 @@ class serendipity_event_mailer extends serendipity_event
$propbag->add('event_hooks', array(
'backend_publish' => true,
'backend_display' => true,
'backend_save' => true,
));
$propbag->add('groups', array('FRONTEND_ENTRY_RELATED'));
$config = array('what', 'mailto', 'sendtoall', 'includelink', 'striptags', 'convertp', 'keepstriptags');
$config = array('what', 'mailto', 'sendtoall', 'includelink', 'striptags', 'keepstriptags', 'convertp', 'mailerbody');
$propbag->add('configuration', $config);
}
@@ -128,6 +129,13 @@ class serendipity_event_mailer extends serendipity_event
$propbag->add('default', 'false');
break;
case 'mailerbody':
$propbag->add('type', 'text');
$propbag->add('name', PLUGIN_EVENT_MAILER_MAILTEXT);
$propbag->add('description', '');
$propbag->add('default', '');
break;
default:
return false;
}
@@ -139,6 +147,110 @@ class serendipity_event_mailer extends serendipity_event
$title = $this->title;
}
function sendMail($eventData)
{
global $serendipity;
$mails = explode(' ', str_replace(',', '', $this->get_config('mailto')));
$to = array();
foreach($mails AS $mailto) {
$mailto = trim($mailto);
if (!empty($mailto)) {
$to[] = $mailto;
}
}
$this->performConfig($to);
if (is_array($this->data['cat'])) {
$selected = array();
if (is_array($eventData['categories'])) {
foreach($eventData['categories'] AS $idx => $cid) {
$selected[$cid] = true;
}
}
foreach($this->data['cat'] AS $cid => $cat) {
$mailto = trim($this->get_config('category_' . $cid));
if (!empty($mailto) && isset($selected[$cid])) {
$tos = explode(' ', str_replace(',', '', $mailto));
foreach($tos AS $mailtopart) {
$to[] = trim($mailtopart);
}
}
}
}
if ($serendipity['POST']['properties']['sendentry_all']) {
$mails = serendipity_db_query("SELECT DISTINCT email FROM {$serendipity['dbPrefix']}authors");
foreach($mails AS $mail) {
$to[] = trim($mail['email']);
}
}
$mail = array(
'subject' => $eventData['title'],
'body' => $eventData['body'] . $eventData['extended'],
// 'from' => $serendipity['blogTitle'] . ' - ' . $eventData['author'] . ' <' . $serendipity['serendipityEmail'] . '>'
'from' => $serendipity['serendipityEmail']
);
switch($this->get_config('what')) {
case 'all':
$mail['body'] = $eventData['body'] . $eventData['extended'];
break;
case 'body':
$mail['body'] = $eventData['body'];
break;
case 'extended':
$mail['body'] = $eventData['extended'];
break;
case 'none':
$mail['body'] = '';
break;
}
if (!empty($serendipity['POST']['properties']['mailerbody'])) {
$mail['body'] = $serendipity['POST']['properties']['mailerbody'] . "\n" . $mail['body'];
}
if (isset($serendipity['POST']['properties']['mailto'])) {
$mails = explode(' ', str_replace(',', '', $serendipity['POST']['properties']['mailto']));
foreach($mails as $mailto) {
$mailto = trim($mailto);
if (!in_array($mailto, $to)) {
$to[] = $mailto;
}
}
}
if (serendipity_db_bool($this->get_config('convertp', 'false'))) {
$mail['body'] = str_replace('</p>', "</p>\n", $mail['body']);
}
if (serendipity_db_bool($this->get_config('striptags', 'false'))) {
if (serendipity_db_bool($this->get_config('keepstriptags', 'true'))) {
$mail['body'] = preg_replace('@<a[^>]+href=["\']([^"\']*)["\'][^>]*>([^<]*)</a>@i', "$2 [$1]", $mail['body']);
$mail['body'] = preg_replace('@<img[^>]+src=["\']([^"\']*)["\'][^>]*>@i', "[" . IMAGE . ": $1]", $mail['body']);
} else {
$mail['body'] = preg_replace('@<a[^>]+href=["\']([^"\']*)["\'][^>]*>([^<]*)</a>@i', "", $mail['body']);
$mail['body'] = preg_replace('@<img[^>]+src=["\']([^"\']*)["\'][^>]*>@i', "", $mail['body']);
}
$mail['body'] = strip_tags($mail['body']);
}
if (serendipity_db_bool($this->get_config('includelink', 'false'))) {
$mail['body'] = serendipity_archiveURL($eventData['id'], $eventData['title'], 'baseURL', true, array('timestamp' => $eventData['timestamp'])) . "\n\n" . $mail['body'];
}
foreach($to AS $mailto) {
if (!empty($mailto)) {
echo serendipity_specialchars($mailto) . '...<br />';
serendipity_sendMail($mailto, $mail['subject'], $mail['body'], $mail['from']);
}
}
}
function event_hook($event, &$bag, &$eventData, $addData = null)
{
global $serendipity;
@@ -162,7 +274,13 @@ class serendipity_event_mailer extends serendipity_event
$sendtoall = serendipity_db_bool($this->get_config('sendtoall'));
}
?>
if (isset($serendipity['POST']['properties']['mailerbody'])) {
$mailerbody = $serendipity['POST']['properties']['mailerbody'];
} else {
$mailerbody = $this->get_config('mailerbody');
}
?>
<fieldset class="entryproperties">
<span class="wrap_legend"><legend><?php echo PLUGIN_EVENT_MAILER_NAME; ?></legend></span>
@@ -178,108 +296,40 @@ class serendipity_event_mailer extends serendipity_event
<input id="sendall" type="checkbox" value="true" name="serendipity[properties][sendentry_all]" <?php echo ($sendtoall ? 'checked="checked"': ''); ?>>
<label title="<?php echo PLUGIN_EVENT_MAILER_SENDTOALL; ?>" for="sendall"><?php echo PLUGIN_EVENT_MAILER_SENDTOALL; ?></label>
</div>
<?php if (!serendipity_db_bool($eventData['isdraft'])) { // Only show this for entries that are published ?>
<div class="form_check">
<input id="forcesend" type="checkbox" value="true" name="serendipity[properties][forcesend]">
<label title="<?php echo PLUGIN_EVENT_MAILER_FORCESEND; ?>" for="forcesend"><?php echo PLUGIN_EVENT_MAILER_FORCESEND; ?></label>
<br />
<em><?php echo PLUGIN_EVENT_MAILER_FORCESEND_DESC; ?></em>
</div>
<?php } ?>
<div class="form_check">
<label for="mailerbody"><?= PLUGIN_EVENT_MAILER_MAILTEXT; ?></label>
<textarea id="mailerbody" rows="5" name="serendipity[properties][mailerbody]" ><?php echo serendipity_specialchars($mailerbody); ?></textarea>
</div>
</fieldset>
<?php
break;
case 'backend_save':
if (serendipity_db_bool($eventData['isdraft'])) {
// Never send e-mails for drafts.
return true;
}
if (isset($serendipity['POST']['properties']['forcesend']) && $serendipity['POST']['properties']['forcesend']) {
$this->sendMail($eventData);
} else {
echo PLUGIN_EVENT_MAILER_NOTSENDDECISION . '<br />';
}
break;
case 'backend_publish':
if (isset($serendipity['POST']['properties']) && !isset($serendipity['POST']['properties']['sendentry'])) {
echo PLUGIN_EVENT_MAILER_NOTSENDDECISION . '<br />';
} else {
$mails = explode(' ', str_replace(',', '', $this->get_config('mailto')));
$to = array();
foreach($mails AS $mailto) {
$mailto = trim($mailto);
if (!empty($mailto)) {
$to[] = $mailto;
}
}
$this->performConfig($to);
if (is_array($this->data['cat'])) {
$selected = array();
if (is_array($eventData['categories'])) {
foreach($eventData['categories'] AS $idx => $cid) {
$selected[$cid] = true;
}
}
foreach($this->data['cat'] AS $cid => $cat) {
$mailto = trim($this->get_config('category_' . $cid));
if (!empty($mailto) && isset($selected[$cid])) {
$tos = explode(' ', str_replace(',', '', $mailto));
foreach($tos AS $mailtopart) {
$to[] = trim($mailtopart);
}
}
}
}
if ($serendipity['POST']['properties']['sendentry_all']) {
$mails = serendipity_db_query("SELECT DISTINCT email FROM {$serendipity['dbPrefix']}authors");
foreach($mails AS $mail) {
$to[] = trim($mail['email']);
}
}
$mail = array(
'subject' => $eventData['title'],
'body' => $eventData['body'] . $eventData['extended'],
// 'from' => $serendipity['blogTitle'] . ' - ' . $eventData['author'] . ' <' . $serendipity['serendipityEmail'] . '>'
'from' => $serendipity['serendipityEmail']
);
switch($this->get_config('what')) {
case 'all':
$mail['body'] = $eventData['body'] . $eventData['extended'];
break;
case 'body':
$mail['body'] = $eventData['body'];
break;
case 'extended':
$mail['body'] = $eventData['extended'];
break;
case 'none':
$mail['body'] = '';
break;
}
if (isset($serendipity['POST']['properties']['mailto'])) {
$mails = explode(' ', str_replace(',', '', $serendipity['POST']['properties']['mailto']));
foreach($mails as $mailto) {
$mailto = trim($mailto);
if (!in_array($mailto, $to)) {
$to[] = $mailto;
}
}
}
if (serendipity_db_bool($this->get_config('convertp', 'false'))) {
$mail['body'] = str_replace('</p>', "</p>\n", $mail['body']);
}
if (serendipity_db_bool($this->get_config('striptags', 'false'))) {
if (serendipity_db_bool($this->get_config('keepstriptags', 'true'))) {
$mail['body'] = preg_replace('§<a[^>]+href=["\']([^"\']*)["\'][^>]*>([^<]*)</a>§i', "$2 [$1]", $mail['body']);
$mail['body'] = preg_replace('§<img[^>]+src=["\']([^"\']*)["\'][^>]*>§i', "[" . IMAGE . ": $1]", $mail['body']);
} else {
$mail['body'] = preg_replace('§<a[^>]+href=["\']([^"\']*)["\'][^>]*>([^<]*)</a>§i', "", $mail['body']);
$mail['body'] = preg_replace('§<img[^>]+src=["\']([^"\']*)["\'][^>]*>§i', "", $mail['body']);
}
$mail['body'] = strip_tags($mail['body']);
}
if (serendipity_db_bool($this->get_config('includelink', 'false'))) {
$mail['body'] = serendipity_archiveURL($eventData['id'], $eventData['title'], 'baseURL', true, array('timestamp' => $eventData['timestamp'])) . "\n\n" . $mail['body'];
}
foreach($to AS $mailto) {
if (!empty($mailto)) {
echo serendipity_specialchars($mailto) . '...<br />';
serendipity_sendMail($mailto, $mail['subject'], $mail['body'], $mail['from']);
}
}
$this->sendMail($eventData);
}
break;
@@ -295,4 +345,3 @@ class serendipity_event_mailer extends serendipity_event
}
/* vim: set sts=4 ts=4 expandtab : */
?>
@@ -0,0 +1,2 @@
1.88.2: Don't overwrite "moderate" flags from other plugins.
($serendipity['csuccess'])
@@ -1,7 +1,7 @@
<?php
/**
* @version
* @version
* @author Translator Name <yourmail@example.com>
* EN-Revision: Revision of lang_en.inc.php
*/
@@ -147,3 +147,4 @@
@define('PLUGIN_EVENT_SPAMBLOCK_SPAM', 'Spam');
@define('PLUGIN_EVENT_SPAMBLOCK_NOT_SPAM', 'Not spam');
@define('PLUGIN_EVENT_SPAMBLOCK_LOGFILE_VALIDATE', 'Only file extensions .log and .txt are allowed');
@@ -25,7 +25,7 @@ class serendipity_event_spamblock extends serendipity_event
'smarty' => '2.6.7',
'php' => '4.1.0'
));
$propbag->add('version', '1.88.1');
$propbag->add('version', '1.88.2');
$propbag->add('event_hooks', array(
'frontend_saveComment' => true,
'external_plugin' => true,
@@ -353,6 +353,8 @@ class serendipity_event_spamblock extends serendipity_event
$propbag->add('name', PLUGIN_EVENT_SPAMBLOCK_LOGFILE);
$propbag->add('description', PLUGIN_EVENT_SPAMBLOCK_LOGFILE_DESC);
$propbag->add('default', $serendipity['serendipityPath'] . 'spamblock-%Y-%m-%d.log');
$propbag->add('validate', '@\.(log|txt)$@imsU');
$propbag->add('validate_error', PLUGIN_EVENT_SPAMBLOCK_LOGFILE_VALIDATE);
break;
case 'logtype':
@@ -876,7 +878,9 @@ class serendipity_event_spamblock extends serendipity_event
if (!is_array($eventData) || serendipity_db_bool($eventData['allow_comments'])) {
$this->checkScheme();
$serendipity['csuccess'] = 'true';
if (!isset($serendipity['csuccess'])) {
$serendipity['csuccess'] = 'true';
}
$logfile = $this->logfile = $this->get_config('logfile', $serendipity['serendipityPath'] . 'spamblock.log');
$required_fields = $this->get_config('required_fields', '');
$checkmail = $this->get_config('checkmail');
@@ -1122,8 +1126,8 @@ class serendipity_event_spamblock extends serendipity_event
}
// Check for forced comment moderation (X days)
if ($addData['type'] == 'NORMAL' && $moderation_auto == true && (
( $forcemoderation == 0 ) ||
if ($addData['type'] == 'NORMAL' && $moderation_auto == true && (
( $forcemoderation == 0 ) ||
( $forcemoderation > 0 && $eventData['timestamp'] < (time() - ($forcemoderation * 60 * 60 * 24)) ) ) ) {
$this->log($logfile, $eventData['id'], $forcemoderation_treat, PLUGIN_EVENT_SPAMBLOCK_REASON_FORCEMODERATION, $addData);
if ($forcemoderation_treat == 'reject') {
@@ -1,3 +1,7 @@
2.37.6:
-------
* Fix wrong caching of plugin lists regardless of type.
2.37.5:
-------
* Fix missing reset to default after dropping netmirror.
@@ -27,7 +27,7 @@ class serendipity_event_spartacus extends serendipity_event
$propbag->add('description', PLUGIN_EVENT_SPARTACUS_DESC);
$propbag->add('stackable', false);
$propbag->add('author', 'Garvin Hicking');
$propbag->add('version', '2.37.5');
$propbag->add('version', '2.37.6');
$propbag->add('requirements', array(
'serendipity' => '1.6',
));
@@ -711,6 +711,12 @@ class serendipity_event_spartacus extends serendipity_event
{
global $serendipity;
static $pluginlist = null;
static $cachedtype = null;
if (isset($cachedtype) && $cachedtype != $type) {
// bust cache if called with other type
$pluginlist = null;
}
if ($pluginlist === null) {
$pluginlist = array();
@@ -736,6 +742,8 @@ class serendipity_event_spartacus extends serendipity_event
}
}
}
// save type of cached pluginlist
$cachedtype = $type;
return $pluginlist;
}
@@ -0,0 +1,9 @@
Version 1.17:
------------------------------------------------------------------------
* Fix: Don't strip HTML tags from comment body before truncating if
serendipity_event_unstrip_tags is active, so it may actually
preserve the tags (and replace them with entities).
Version 1.16:
------------------------------------------------------------------------
* Fix: wordwrap at word boundaries instead of "truncating" the lines
@@ -20,7 +20,7 @@ class serendipity_plugin_comments extends serendipity_plugin
$propbag->add('description', PLUGIN_COMMENTS_BLAHBLAH);
$propbag->add('stackable', true);
$propbag->add('author', 'Garvin Hicking, Tadashi Jokagi, Judebert, G. Brockhaus');
$propbag->add('version', '1.15');
$propbag->add('version', '1.17');
$propbag->add('requirements', array(
'serendipity' => '1.6',
'smarty' => '2.6.7',
@@ -193,10 +193,17 @@ class serendipity_plugin_comments extends serendipity_plugin
if ($sql && is_array($sql)) {
foreach($sql AS $key => $row) {
if (function_exists('mb_strimwidth')) {
$comment = mb_strimwidth(strip_tags($row['comment']), 0, $max_chars, " [...]", LANG_CHARSET);
# don't strip HTML tags if serendipity_event_unstrip_tags is active
if (!class_exists('serendipity_event_unstrip_tags')) {
$comment = strip_tags($row['comment']);
} else {
$comments = wordwrap(strip_tags($row['comment']), $max_chars, '@@@', 1);
$comment = $row['comment'];
}
# truncate comment to $max_chars
if (function_exists('mb_strimwidth')) {
$comment = mb_strimwidth($comment, 0, $max_chars, " [...]", LANG_CHARSET);
} else {
$comments = wordwrap($comment, $max_chars, '@@@', 1);
$aComment = explode('@@@', $comments);
$comment = $aComment[0];
if (count($aComment) > 1) {
@@ -228,14 +235,29 @@ class serendipity_plugin_comments extends serendipity_plugin
$user = PLUGIN_COMMENTS_ANONYMOUS;
}
if (function_exists('mb_strimwidth')) {
# wrap lines at $wordwrap
if (function_exists('mb_strimwidth') && function_exists('mb_strrpos') && function_exists('mb_substr')) {
$pos = 0;
$parts = array();
$enc = LANG_CHARSET;
$comment_len = mb_strlen($comment, $enc);
# iterate over the (truncated) comment and wrap each line at $wordwrap
while ($pos < $comment_len) {
$part = mb_strimwidth($comment, $pos, $wordwrap, '', $enc);
# do we still need to wrap this line or is it shorter than $wordwrap?
if ($comment_len - $pos > $wordwrap) {
# location of first space
$spacepos = mb_strrpos(mb_substr($comment, $pos, $wordwrap, $enc), ' ', $enc);
# wrap at word boundary if we have at least one space
$part = ( $spacepos > 0 ) ? mb_substr($comment, $pos, $spacepos, $enc) : mb_strimwidth($comment, $pos, $wordwrap, '', $enc);;
} else {
# wrap "hard", i.e. truncate words that are too long
$part = mb_substr($comment, $pos, $wordwrap, $enc);
}
# forward the pointer
$pos += mb_strlen($part, $enc);
# remove leading spaces
$part = ltrim($part);
# re-assemble the lines, i.e. add our current line
$parts[] = $part;
}
$comment = implode("\n", $parts);
@@ -174,12 +174,19 @@ class serendipity_plugin_history extends serendipity_plugin
}
$oldLim = $serendipity['fetchLimit'];
if (isset($serendipity['GET']['page'])) {
$oldPage = $serendipity['GET']['page'];
unset($serendipity['GET']['page']);
}
$nowts = serendipity_serverOffsetHour();
$maxts = mktime(23, 59, 59, date('m', $nowts), date('d', $nowts), date('Y', $nowts));
$mints = mktime(0, 0, 0, date('m', $nowts), date('d', $nowts), date('Y', $nowts));
$e = serendipity_fetchEntries(array(($mints-$max_age*86400),
($maxts-$min_age*86400)), $full, $max_entries);
$serendipity['fetchLimit'] = $oldLim;
if (isset($oldPage)) {
$serendipity['GET']['page'] = $oldPage;
}
echo (empty($intro)) ? '' : '<div class="serendipity_history_intro">' . $intro . '</div>' . "\n";
if (!is_array($e)) {
+4 -2
View File
@@ -47,7 +47,7 @@ if (defined('USE_MEMSNAP')) {
}
// The version string
$serendipity['version'] = '2.3.0';
$serendipity['version'] = '2.3.5';
// Setting this to 'false' will enable debugging output. All alpha/beta/cvs snapshot versions will emit debug information by default. To increase the debug level (to enable Smarty debugging), set this flag to 'debug'.
@@ -376,9 +376,11 @@ if (isset($_SESSION['serendipityAuthorid'])) {
$serendipity['lang'] = serendipity_getPostAuthSessionLanguage();
}
// Ensure that these limits do not contain strings
// Ensure that these limits do not contain strings and have positive values
$serendipity['fetchLimit'] = (int)$serendipity['fetchLimit'];
if ($serendipity['fetchLimit'] < 1) $serendipity['fetchLimit'] = 1;
$serendipity['RSSfetchLimit'] = (int)$serendipity['RSSfetchLimit'];
if ($serendipity['RSSfetchLimit'] < 1) $serendipity['RSSfetchLimit'] = 1;
// Try to fix some path settings. It seems common users have this setting wrong
// when s9y is installed into the root directory, especially 0.7.1 upgrade users.
+1 -1
View File
@@ -142,7 +142,7 @@
</div>
{/if}
<h3><a href="?serendipity[action]=admin&amp;serendipity[adminModule]=entries&amp;serendipity[adminAction]=edit&amp;serendipity[id]={$entry.id}" title="#{$entry.id}: {$entry.title|escape}">{$entry.title|escape}</a></h3>
<h3><a href="?serendipity[action]=admin&amp;serendipity[adminModule]=entries&amp;serendipity[adminAction]=edit&amp;serendipity[id]={$entry.id}" title="#{$entry.id}: {$entry.title}">{$entry.title}</a></h3>
<ul class="plainList clearfix actions">
{if $entry.preview || (!$showFutureEntries && ($entry.timestamp >= $serverOffsetHour))}
+67 -32
View File
@@ -3,13 +3,29 @@
{else}
{if $medias}
<script>
block = '<ul class="s9y_gallery plainList">';
var blockSkip = false;
var block = '';
{serendipity_hookPlugin hookAll=true hook='frontend_image_add_prepend' addData="galleryListing"}
if (!blockSkip) {
block = '<ul class="s9y_gallery plainList">';
}
{foreach $medias as $media}
{* generate the images of the gallery with their markup *}
{serendipity_hookPlugin hookAll=true hook='frontend_image_add_unknown' eventData=$media}
block += '<li class="s9y_gallery_item"><a class="serendipity_image_link" href="{$media.file.links.imagelinkurl}"><!-- s9ymdb:{$media.file.id} --><img class="s9y_gallery_image" src="{$media.file.full_thumbHTTP|escape}" alt=""></a></li>';
{serendipity_hookPlugin hookAll=true hook='frontend_image_add_unknown' data=$media addData="galleryListing"}
if (blockSkip) {
// Plugins can emit this variable and also assign their own "block" variable, which will override the s9y default
} else {
block += '<li class="s9y_gallery_item"><a class="serendipity_image_link" href="{$media.file.links.imagelinkurl}"><!-- s9ymdb:{$media.file.id} --><img class="s9y_gallery_image" src="{$media.file.full_thumbHTTP|escape}" alt=""></a></li>';
}
{/foreach}
block += '</ul>';
blockSkip = false;
{serendipity_hookPlugin hookAll=true hook='frontend_image_add_append' addData="galleryListing"}
if (!blockSkip) {
block += '</ul>';
}
if (parent.self.opener == undefined) {
// in iframes, there is no opener, and the magnific popup is wrapped
@@ -29,13 +45,13 @@
<div class="clearfix">
{if $media.file.is_image}
{serendipity_hookPlugin hook="frontend_image_selector" eventData=$media.file hookAll=true}
{serendipity_hookPlugin hook="frontend_image_selector" data=$media.file hookAll=true}
<h1>{$CONST.YOU_CHOSE|sprintf:$media.file.realname}</h1>
<img src="{$media.file.imgsrc}" alt="">
<form id="imageForm" name="serendipity[selForm]" action="#" method="GET">
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_hiddenfields' eventData=$media.file}
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_hiddenfields' data=$media.file}
<input name="imgThumbWidth" type="hidden" value="{$media.file.thumbWidth}">
<input name="imgThumbHeight" type="hidden" value="{$media.file.thumbHeight}">
<input name="imgWidth" type="hidden" value="{$media.file.dimensions_width}">
@@ -54,7 +70,7 @@
{/if}
{if $media.file.fast_select}
<script>
{serendipity_hookPlugin hookAll=true hook='frontend_image_add_filenameonly' eventData=$media.file}
{serendipity_hookPlugin hookAll=true hook='frontend_image_add_filenameonly' data=$media.file}
serendipity.serendipity_imageSelector_done('{$media.textarea|escape}');
</script>
{else}
@@ -72,7 +88,7 @@
<label for="radio_link_yes">{$CONST.I_WANT_BIG_IMAGE}</label>
</div>
</div>
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_imagesize' eventData=$media.file}
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_imagesize' data=$media.file}
</fieldset>
{if NOT $media.filename_only}
<fieldset id="image_alignment">
@@ -94,7 +110,7 @@
<label for="image_align_right"><img src="{serendipity_getFile file='img/img_align_right.png'}" alt="{$CONST.ALIGN_RIGHT}"></label>
</div>
</div>
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_imagealign' eventData=$media.file}
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_imagealign' data=$media.file}
</fieldset>
<fieldset id="image_as_link">
@@ -116,7 +132,7 @@
{if $media.file.hotlink}
<input id="media_file_path" name="serendipity[url]" type="text" value="{$media.file.path}">
{else}
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_link_url' eventData=$media.file.links}
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_link_url' data=$media.file.links}
<input id="media_file_path" name="serendipity[url]" type="text" value="{$media.file.links.imagelinkurl}">
{/if}
</div>
@@ -130,7 +146,7 @@
<option value="plugin" {'target'|ifRemember:'plugin':false:'selected'}>{$CONST.MEDIA_ENTRY}</option>
<option value="_blank" {'target'|ifRemember:'_blank':false:'selected'}>{$CONST.MEDIA_TARGET_BLANK}</option>
</select>
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_imagelink2' eventData=$media.file}
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_imagelink2' data=$media.file}
<label for="select_image_target">{$CONST.MEDIA_TARGET}</label>
</div>
</fieldset>
@@ -138,33 +154,33 @@
<div id="image_comment" class="form_area">
<label for="serendipity_imagecomment">{$CONST.COMMENT}</label>
<textarea id="serendipity_imagecomment" name="serendipity[imagecomment]" rows="5">{$media.file.props.base_property.COMMENT1|escape|escape}</textarea>
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_imagecomment' eventData=$media.file}
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_imagecomment' data=$media.file}
</div>
<div id="image_alttext" class="form_field">
<label for="serendipity_alt">{$CONST.MEDIA_ALT}</label>
<input id="serendipity_alt" name="serendipity[alt]" type="text" value="{$media.file.props.base_property.ALT|escape}">
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_alt' eventData=$media.file}
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_alt' data=$media.file}
</div>
<div id="image_title" class="form_field">
<label for="serendipity_title">{$CONST.MEDIA_TITLE}</label>
<input id="serendipity_title" name="serendipity[title]" type="text" value="{$media.file.props.base_property.TITLE|escape}">
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_title' eventData=$media.file}
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_title' data=$media.file}
</div>
{/if}
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_more' eventData=$media.file}
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_more' data=$media.file}
<div class="form_buttons">
<input class="go_back" type="button" value="{$CONST.BACK}">
<input type="button" value="{$CONST.DONE}" onclick="serendipity.rememberMediaOptions(); {$media.file.origfinishJSFunction}">
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_submit' eventData=$media.file}
{serendipity_hookPlugin hookAll=true hook='frontend_image_selector_submit' data=$media.file}
</div>
{/if}{* else fast_select end *}
</form>
{else}{* if $media.file.is_image end *}
{if $media.filename_only}
<script>
{serendipity_hookPlugin hookAll=true hook='frontend_image_add_filenameonly' eventData=$media}
{serendipity_hookPlugin hookAll=true hook='frontend_image_add_filenameonly' data=$media}
if (parent.self.opener == undefined) {
// in iframes, there is no opener, and the magnific popup is wrapped
parent.self = window.parent.parent.$.magnificPopup;
@@ -174,21 +190,40 @@
parent.self.close();
</script>
{else}
<script>
block = '<a class="block_level opens_window" href="{$media.file.full_file}" title="{$media.file.realname|escape}"><!-- s9ymdb:{$media.file.id} -->{$media.file.realname|escape}</a>';
{serendipity_hookPlugin hookAll=true hook='frontend_image_add_unknown' eventData=$media}
if (parent.self.opener == undefined) {
// in iframes, there is no opener, and the magnific popup is wrapped
parent.self = window.parent.parent.$.magnificPopup;
parent.self.opener = window.parent.parent;
}
if (parent.self.opener.editorref) {
parent.self.opener.editorref.surroundHTML(block, '');
} else {
parent.self.opener.serendipity.serendipity_imageSelector_addToBody(block, '{$media.textarea}');
}
parent.self.close();
</script>
{if $media.file.mediatype == 'video'}
<script>
block = '<video src="{$media.file.full_file}" controls><!-- s9ymdb:{$media.file.id} --><a class="block_level opens_window" href="{$media.file.full_file}" title="{$media.file.realname|escape}">{$media.file.realname|escape}</a></video>';
{serendipity_hookPlugin hookAll=true hook='frontend_image_add_unknown' data=$media}
if (parent.self.opener == undefined) {
// in iframes, there is no opener, and the magnific popup is wrapped
parent.self = window.parent.parent.$.magnificPopup;
parent.self.opener = window.parent.parent;
}
if (parent.self.opener.editorref) {
parent.self.opener.editorref.surroundHTML(block, '');
} else {
parent.self.opener.serendipity.serendipity_imageSelector_addToBody(block, '{$media.textarea}');
}
parent.self.close();
</script>
{else}
<script>
block = '<a class="block_level opens_window" href="{$media.file.full_file}" title="{$media.file.realname|escape}"><!-- s9ymdb:{$media.file.id} -->{$media.file.realname|escape}</a>';
{serendipity_hookPlugin hookAll=true hook='frontend_image_add_unknown' data=$media}
if (parent.self.opener == undefined) {
// in iframes, there is no opener, and the magnific popup is wrapped
parent.self = window.parent.parent.$.magnificPopup;
parent.self.opener = window.parent.parent;
}
if (parent.self.opener.editorref) {
parent.self.opener.editorref.surroundHTML(block, '');
} else {
parent.self.opener.serendipity.serendipity_imageSelector_addToBody(block, '{$media.textarea}');
}
parent.self.close();
</script>
{/if}
{/if}
{/if}{* if $media.file.is_image is something else end *}
</div>
+17 -7
View File
@@ -55,10 +55,6 @@
{$img_alt="{$file.mime}"}
{/if}
{/if}
{* builds a ML objects link for step 1, to pass to media_choose.tpl file section: passthrough media.filename_only scripts - do not use "empty($link) AND" here, since that would require a reset before! *}
{if (!$file.is_image OR $file.is_image == 0) AND $file.mediatype != 'image' AND $file.realfile}
{$link="?serendipity[adminModule]=images&amp;serendipity[adminAction]=choose&amp;serendipity[noBanner]=true&amp;serendipity[noSidebar]=true&amp;serendipity[noFooter]=true&amp;serendipity[fid]={$file.id}&amp;serendipity[filename_only]={$media.filename_only}&amp;serendipity[textarea]={$media.textarea}&amp;serendipity[htmltarget]={$media.htmltarget}"}
{/if}
<article id="media_{$file.id}" class="media_file {if $media.manage AND $media.multiperm}manage {/if}{cycle values="odd,even"}">
<header class="clearfix">
@@ -84,9 +80,23 @@
<div class="clearfix equal_heights media_file_wrap">
<div class="media_file_preview">
<a {if $media.manage AND $media.multiperm}class="media_fullsize"{/if} href="{$link}" title="{$CONST.MEDIA_FULLSIZE}: {$file.realname}" data-pwidth="{$file.popupWidth}" data-pheight="{$file.popupHeight}">
<img src="{$img_src}" title="{$img_title}" alt="{$img_alt}">
</a>
{if $file.mediatype == 'video'}
<video src="{$file.imgsrc}" controls>
<img src="{$img_src}" title="{$img_title}" alt="{$img_alt}">
</video>
<br />
{if NOT $media.manage}
{* we need a link to go to the next step when inserting into an entry *}
<a {if $media.manage AND $media.multiperm}class="media_fullsize"{/if} href="{$link}" title="{$CONST.MEDIA_FULLSIZE}: {$file.realname}" data-pwidth="{$file.popupWidth}" data-pheight="{$file.popupHeight}">
{$CONST.VIDEO}
</a>
{/if}
{else}
<a {if $media.manage AND $media.multiperm}class="media_fullsize"{/if} href="{$link}" title="{$CONST.MEDIA_FULLSIZE}: {$file.realname}" data-pwidth="{$file.popupWidth}" data-pheight="{$file.popupHeight}">
{* even files that are not images get aplaceholder image from the backend *}
<img src="{$img_src}" title="{$img_title}" alt="{$img_alt}">
</a>
{/if}
<footer id="media_file_meta_{$file.id}" class="media_file_meta additional_info">
<ul class="plainList">
{if $file.hotlink}
+1 -1
View File
@@ -287,7 +287,7 @@
<input type="hidden" id="newDir" name="serendipity[newDir]">
</form>
<div id="move-popup" class="mfp-hide">
<h3>Move images to directory</h3>
<h3>{$CONST.MEDIA_DIRECTORY_MOVE}</h3>
<form>
<div class="form_select">
<select >

Some files were not shown because too many files have changed in this diff Show More