Mischa POSLAWSKY [Tue, 4 Feb 2020 20:19:29 +0000 (21:19 +0100)]
login: redirection message if pending page
Assume ?goto page required authorisation.
Mischa POSLAWSKY [Tue, 4 Feb 2020 19:52:00 +0000 (20:52 +0100)]
page: article method to find handler code
Mischa POSLAWSKY [Mon, 30 Dec 2019 06:42:11 +0000 (07:42 +0100)]
page: separate method to load page contents
Mischa POSLAWSKY [Wed, 15 Jan 2020 13:43:39 +0000 (14:43 +0100)]
reply: ignore empty image uploads
Fix invalid image appended for UPLOAD_ERR_NO_FILE.
Mischa POSLAWSKY [Sun, 5 Jan 2020 21:23:56 +0000 (22:23 +0100)]
reply: accept html input from admins
Forgo html formatting if text starts with an element such as <p>.
Restricted for safety since it's not validated. Intermediate solution to
support rich contents (wysiwyg editor can be added later for accessibility).
Mischa POSLAWSKY [Sun, 5 Jan 2020 21:21:25 +0000 (22:21 +0100)]
reply: accept image uploads with messages
Mischa POSLAWSKY [Sun, 5 Jan 2020 21:18:06 +0000 (22:18 +0100)]
issue: move photo icon before replies
Most common parts last for more stable appearance.
Mischa POSLAWSKY [Sun, 5 Jan 2020 19:56:37 +0000 (20:56 +0100)]
login/post: require user to access
Redirect to login to avoid incomprehensible error message.
Reported-by: Heleen Terlouw <heleen.terlouw.2910@gmail.com>
Mischa POSLAWSKY [Wed, 1 Jan 2020 11:06:15 +0000 (12:06 +0100)]
issue: derive page metadata from row data
Mischa POSLAWSKY [Wed, 1 Jan 2020 05:44:40 +0000 (06:44 +0100)]
page: fix titleless article teaser fallback
Broken since commit
v4.0-28-gb3aec6cf1c (2019-11-09)
[page: replace output caching by article object].
Mischa POSLAWSKY [Sat, 30 Nov 2019 21:13:07 +0000 (22:13 +0100)]
thumb: delete subsequent animation frames
Convert animated GIFs and accidental video to still frame.
Mischa POSLAWSKY [Mon, 30 Dec 2019 06:43:03 +0000 (07:43 +0100)]
page: fix variable dependencies in error headers
Editor checks broken in page.inc.php being called from fail() function.
Mischa POSLAWSKY [Mon, 30 Dec 2019 08:54:02 +0000 (09:54 +0100)]
issue: common icon glyphs for improved fallback
Irrelevant after styling, but improves compatibility if unstyled:
- RIGHT SPEECH BUBBLE is a common emoji available on at least android;
- CAMERA is more specific for the expected usage, and similar to other
popular sites such as Twitter.
Mischa POSLAWSKY [Mon, 30 Dec 2019 08:24:38 +0000 (09:24 +0100)]
issue: unicode characters of indicator icons
Replace ASCII placeholders by semantic equivalents, which can be styled by
custom fonts to maintain full client compatibility.
Mischa POSLAWSKY [Mon, 30 Dec 2019 08:30:29 +0000 (09:30 +0100)]
issue: code cleanup breaking up row attributes
Identical results using separate, more maintainable statements.
Mischa POSLAWSKY [Sun, 1 Dec 2019 22:14:15 +0000 (23:14 +0100)]
issue: indicate image presence in overview
Advertise uploads as they are proverbially worth more than text replies.
Mischa POSLAWSKY [Sat, 30 Nov 2019 23:12:46 +0000 (00:12 +0100)]
reply: convert CR in line breaks
Store submitted network/dos newlines as expected unix LF.
Mischa POSLAWSKY [Sat, 30 Nov 2019 23:05:19 +0000 (00:05 +0100)]
issue: do not immediately close inserted rows
Database fix applied earlier.
Mischa POSLAWSKY [Sat, 30 Nov 2019 23:00:15 +0000 (00:00 +0100)]
page: convert error messages to html strings
Exception objects need to be converted to strings for usage as placeholders,
and while at it, xml characters should be escaped for proper display.
Mischa POSLAWSKY [Sat, 30 Nov 2019 22:57:20 +0000 (23:57 +0100)]
page: reload error page within fail handler
Catch errors during display (such as an invalid placeholder value fixed in
the next commit) instead of ignoring subsequent displays causing empty
output.
Mischa POSLAWSKY [Sat, 30 Nov 2019 22:51:38 +0000 (23:51 +0100)]
page: capture multiline titles in article contents
Fix recent page (doc/alv/2019-11-26/cv) containing subtitle.
Mischa POSLAWSKY [Fri, 29 Nov 2019 22:09:15 +0000 (23:09 +0100)]
doclist: background width to end line at last item
Assuming stylesheet draws a line by background-image, calculate its size to
target the earliest item.
Mischa POSLAWSKY [Mon, 18 Nov 2019 15:12:26 +0000 (16:12 +0100)]
doclist: sublists of multiple dates grouped by year
Mischa POSLAWSKY [Fri, 29 Nov 2019 21:19:34 +0000 (22:19 +0100)]
doclist: code cleanup and preparation
Mischa POSLAWSKY [Sat, 16 Nov 2019 20:47:53 +0000 (21:47 +0100)]
doclist: timeline styling to position links by age
Calculate absolute "left" position based on average date lengths,
to be optionally used by the site's stylesheet.
Mischa POSLAWSKY [Tue, 26 Nov 2019 16:24:05 +0000 (17:24 +0100)]
issue: populate ticket data before reply include
Reorder in commit
v4.1-34-gc83e7f0379 (2019-11-25) [issue: include replies
before issue retrieval] breaks admin features due to missing $Issue.
Update row data on update instead.
Mischa POSLAWSKY [Tue, 26 Nov 2019 23:13:19 +0000 (00:13 +0100)]
page: filter login/logout classes on any html element
Needed on <ul>, but extend to cover any future usage.
Mischa POSLAWSKY [Mon, 25 Nov 2019 15:20:32 +0000 (16:20 +0100)]
issue: include replies before issue retrieval
Load reply data before row query to reflect changes directly.
Mischa POSLAWSKY [Mon, 25 Nov 2019 15:15:18 +0000 (16:15 +0100)]
issue: wrap items to allow containment
Fix contents from appearing in next <li> with lower screen width.
Similar to column lists in commit
v3.4-0-g72d8db8c87 (2018-07-08)
[login/list: wrap each item to allow containment].
Mischa POSLAWSKY [Mon, 25 Nov 2019 14:45:54 +0000 (15:45 +0100)]
issue: metadata in sidebar container
Separate list of global summary information, allowing a more hidden (aside)
styling keeping focus on discussion and clarifying repetitions (most items
are also represented as changes).
Mischa POSLAWSKY [Mon, 25 Nov 2019 20:14:28 +0000 (21:14 +0100)]
upload: replace double line breaks by paragraphs in text input
Mischa POSLAWSKY [Mon, 25 Nov 2019 20:12:33 +0000 (21:12 +0100)]
upload: common function to parse user text input
Move duplicate code from issue and reply pages.
Mischa POSLAWSKY [Fri, 8 Nov 2019 01:29:05 +0000 (02:29 +0100)]
reply: omit empty messages like issue page
Copy recent update in formatting.
Mischa POSLAWSKY [Wed, 20 Nov 2019 23:31:27 +0000 (00:31 +0100)]
page: restore meta tags for editors
Mischa POSLAWSKY [Wed, 20 Nov 2019 23:19:01 +0000 (00:19 +0100)]
auth: append login to formatted user names
Mischa POSLAWSKY [Thu, 24 Oct 2019 05:08:27 +0000 (07:08 +0200)]
foto: increase thumbnail height for exceptional rows
Even with the configured maximum of 200*1.25=250px, resulting sizes appear
to regularly exceed that, with anything up to 262px being quite common and
easily reproducible (in Lijtweg historisch).
Mischa POSLAWSKY [Thu, 24 Oct 2019 04:58:04 +0000 (06:58 +0200)]
foto: keep static images of height 250
Drop dynamic source replacement to match actual client sizes, as the quality
loss from downsizing a _larger_ image is minimal.
Originally introduced in lijtweg commit
v2.5-7-gcd93e774e6 (2017-10-11)
[foto: replace justified thumbnails by height-optimised versions]
with visible improvements probably due to using the target size of 200px
without adjusting for up to 1.25x enlargement to fit.
Testing originals of 250px on modern browsers with (bilinear) rescaling
is hard to distinguish (not significantly more blurry) and depends on only
a single thumbnail resolution to be created for significantly reduced
resource requirements. May be slightly larger on average, but likely much
smaller without reloads and considering caching opportunities.
Mischa POSLAWSKY [Wed, 20 Nov 2019 12:57:01 +0000 (13:57 +0100)]
issue: styling class on closed rows
Link tag does not cover metadata. Keep strike-through for compatibility,
but with equivalent <s> as <strike> has been deprecated in HTML5.
Mischa POSLAWSKY [Fri, 8 Nov 2019 00:02:50 +0000 (01:02 +0100)]
issue: feed subpage for atom xml formatting
Feature of news articles lost during database transition.
Include adapted from nieuws/feed/index.php for different object structure
(to be merged again later if possible).
Mischa POSLAWSKY [Mon, 18 Nov 2019 21:20:45 +0000 (22:20 +0100)]
login/commits: escape html characters in commit messages
Mischa POSLAWSKY [Sun, 17 Nov 2019 13:51:08 +0000 (14:51 +0100)]
widget/contact: accept non-word characters in sender email addresses
Allow any remotely valid address, including <hans.verlinden@planet.nl>.
Mischa POSLAWSKY [Fri, 8 Nov 2019 01:23:18 +0000 (02:23 +0100)]
reply: list attribute changes for each row
Mischa POSLAWSKY [Fri, 8 Nov 2019 01:22:31 +0000 (02:22 +0100)]
reply: identify textual journal columns
Mischa POSLAWSKY [Fri, 8 Nov 2019 00:21:45 +0000 (01:21 +0100)]
issue: count number of replies in overview
Mischa POSLAWSKY [Thu, 7 Nov 2019 16:50:05 +0000 (17:50 +0100)]
reply: omit header from mandatory output
Can be prepended manually if wanted.
Mischa POSLAWSKY [Thu, 7 Nov 2019 16:49:58 +0000 (17:49 +0100)]
issue: inline ticket body like replies
Mischa POSLAWSKY [Thu, 7 Nov 2019 05:13:53 +0000 (06:13 +0100)]
issue: display assignments in overview
Mischa POSLAWSKY [Thu, 7 Nov 2019 05:13:34 +0000 (06:13 +0100)]
issue: resolve author logins to full names
Mischa POSLAWSKY [Thu, 7 Nov 2019 04:56:00 +0000 (05:56 +0100)]
issue: select restricted by current page
Allow setup of multiple distinct categories.
Mischa POSLAWSKY [Thu, 7 Nov 2019 04:51:30 +0000 (05:51 +0100)]
issue: record row changes in journal
Mischa POSLAWSKY [Thu, 7 Nov 2019 04:23:30 +0000 (05:23 +0100)]
issue: admin option to close or reopen
Mischa POSLAWSKY [Thu, 7 Nov 2019 04:04:59 +0000 (05:04 +0100)]
issue: assignment text field for admins
Mischa POSLAWSKY [Thu, 7 Nov 2019 04:04:09 +0000 (05:04 +0100)]
reply: share parent data from issue page
Provide easy access to selected metadata.
Mischa POSLAWSKY [Thu, 7 Nov 2019 03:59:13 +0000 (04:59 +0100)]
reply: set method to abstract update queries
Extend insert, renamed to generic "set", to allow updates using the same
syntax with an additional select parameter.
Mischa POSLAWSKY [Thu, 7 Nov 2019 03:43:53 +0000 (04:43 +0100)]
issue: database insert method to keep array values
Feature to apply literal SQL with optional arguments, stolen from other
projects modeled after DBIx::Simple.
Mischa POSLAWSKY [Thu, 24 Oct 2019 21:53:24 +0000 (23:53 +0200)]
issue: closed at bottom, option ?open to exclude
Mischa POSLAWSKY [Sun, 20 Oct 2019 04:16:49 +0000 (06:16 +0200)]
issue: display ticket creation date
Mischa POSLAWSKY [Sun, 20 Oct 2019 04:07:07 +0000 (06:07 +0200)]
issue: order by last update, changed on reply
Initial value determined by:
UPDATE issues SET updated = greatest(created, closed, (
SELECT max(created) FROM comments WHERE page = issues.link
));
Mischa POSLAWSKY [Sun, 20 Oct 2019 03:49:22 +0000 (05:49 +0200)]
issue: append and ignore page titles in links
Preserve names of replaced files, and improve recognition of sent targets
as well as seo score.
Mischa POSLAWSKY [Sun, 20 Oct 2019 03:47:19 +0000 (05:47 +0200)]
issue: track messages in database
Replace file storage by PostgreSQL table, similar to comments in commit
v4.0-21-g0cc6251412 (2019-10-27) [nieuws/replies: read contents from database].
Existing files are imported similar to earlier comments:
ls melding/2*/*.html | perl -MFile::Slurp -lnE ' #/
my ($page, $date, $name) = split m{/};
$name =~ s/(\d+-\d+)-// and $date .= "-$1";
my $closed = qx(stat -c%y "$page/.tags/opgelost/$date-$name" 2>/dev/null);
chomp $closed;
$name =~ s/\.html$//;
my $html = read_file($_);
$html =~ s{<h2>(.*?)</h2>\n+}{}; my $title = $1;
chomp, s/\\\K/\\/g, s/\n/\\n/g, s/\t/\\t/g for $html;
say join "\t", $page, $date, $name, $title, $html, $closed || "\\N";
' | psql lijtweg -c 'COPY issues (page, created, link, subject, body, closed) FROM STDIN'
Afterwards, the following queries can be executed to convert and clean up
these imported rows further:
-- rename issue references to new page ids
UPDATE comments c SET page = (SELECT coalesce((SELECT page||'/'||id
FROM issues WHERE c.page LIKE page || '/%-' || link), c.page));
-- move authorship contents to dedicated column
SELECT id, regexp_matches(body, '<p class="right">(?:Ingediend door |<em>)?([^<]*)')
FROM issues WHERE body ~ 'right';
UPDATE issues SET author = 'cees' WHERE body ~ '<p class="right">.*Cees';
UPDATE issues SET author = '301' WHERE body ~ '<p class="right">.*de Roos';
UPDATE issues SET body = regexp_replace(body, E'\n+<p class="right">.*</p>$', '')
WHERE body ~ 'right';
Mischa POSLAWSKY [Thu, 7 Nov 2019 16:34:09 +0000 (17:34 +0100)]
reply: restrict submission form to users
Assumed as much on insert.
Mischa POSLAWSKY [Thu, 31 Oct 2019 18:26:45 +0000 (19:26 +0100)]
nieuws: authorise admins by edit subpermissions
Treat news maintenance like any other edit location.
Mischa POSLAWSKY [Sat, 26 Oct 2019 00:00:34 +0000 (02:00 +0200)]
login/edit: move admin block to distinct widget
Mischa POSLAWSKY [Fri, 25 Oct 2019 23:59:54 +0000 (01:59 +0200)]
login/edit: user override in page code
Mischa POSLAWSKY [Fri, 25 Oct 2019 23:20:06 +0000 (01:20 +0200)]
login/edit: admin event dates (creation, setup, visit)
Mischa POSLAWSKY [Mon, 28 Oct 2019 02:36:22 +0000 (03:36 +0100)]
edit/page: keep page named after existing directory
Allow either subdir.html or subdir/index.html, preventing edit from creating
conforming duplicates.
Reported-by: Arie van Marion
Mischa POSLAWSKY [Mon, 28 Oct 2019 04:02:49 +0000 (05:02 +0100)]
page: silence object warnings on missing pages
Mischa POSLAWSKY [Thu, 24 Oct 2019 21:49:46 +0000 (23:49 +0200)]
page: replace output caching by article object
Mischa POSLAWSKY [Thu, 24 Oct 2019 21:54:05 +0000 (23:54 +0200)]
nieuws: avoid invalid date access for missing articles
Broken since page objects introduced in commit
v3.9-11-g234326791b
(2019-06-28) [page: promote news article class to represent all pages].
Mischa POSLAWSKY [Mon, 21 Oct 2019 06:44:48 +0000 (08:44 +0200)]
reply: setup database to fetch objects
Avoid repetition on each fetch in upcoming usage.
Mischa POSLAWSKY [Mon, 21 Oct 2019 06:23:42 +0000 (08:23 +0200)]
nieuws: rename nieuws/replies widget to generic reply
Can be placed on any page (such as upcoming issues), not specific to nieuws.
Mischa POSLAWSKY [Mon, 4 Nov 2019 23:20:54 +0000 (00:20 +0100)]
widget/contact: current user overrides login, email fallback
Mischa POSLAWSKY [Thu, 17 Oct 2019 03:53:55 +0000 (05:53 +0200)]
nieuws/replies: insert method to add database rows
Minimal database abstraction for code maintainability
(feature similar to perl DBIx::Simple).
Mischa POSLAWSKY [Thu, 17 Oct 2019 03:52:48 +0000 (05:52 +0200)]
nieuws/replies: database class with query method
Code cleanup preparing for more extensive database support
(where default php is somewhat lacking).
Mischa POSLAWSKY [Thu, 17 Oct 2019 03:20:55 +0000 (05:20 +0200)]
nieuws/replies: read contents from database
Replace file storage by a PostgreSQL table. Resign to the additional
dependency for this kind of social feature since it's much more appropriate
(especially with upcoming extensions), and optional similar to external
comment services.
Identical results after importing existing files:
ls melding/2*/*/*.html | perl -MFile::Slurp -lnE '
my ($page, $meta) = m{(.*)/(.*)};
my ($time, $author) = split /[:.]/, $meta;
$time .= "00" while length($time) < 14;
$time =~ s/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/$1-$2-$3 $4:$5:/g;
my $html = read_file($_);
chomp, s/\\\K/\\/g, s/\n/\\n/g, s/\t/\\t/g for $html;
say join "\t", $page, $author, $time, $html;
' | psql -c 'COPY comments (page, author, created, message) FROM STDIN'
Mischa POSLAWSKY [Thu, 24 Oct 2019 03:31:40 +0000 (05:31 +0200)]
auth: admin edit permissions for page (sub)directories
Allow edit parameters to match parent directories; for example "edit doc"
to maintain all but only documents.
Mischa POSLAWSKY [Tue, 22 Oct 2019 03:11:28 +0000 (05:11 +0200)]
auth: admin subpermission check for edit pages
Check for specific "edit $path" rights in addition to full "edit",
allowing for partial access.
Mischa POSLAWSKY [Sat, 19 Oct 2019 16:01:05 +0000 (18:01 +0200)]
sitemap: skip subdirectories containing .gitignore
Assume html files stored in (partially) untracked directories are not meant
for public distribution. Fixes unintended inclusion of profile/ pages and
archived documents in data/, and avoids a costly search in thumb/.
Mischa POSLAWSKY [Thu, 24 Oct 2019 19:47:33 +0000 (21:47 +0200)]
login/post: ignore ?login override for non user admins
Confidential data was not secure from people who acquired these urls.
Mischa POSLAWSKY [Fri, 18 Oct 2019 19:22:25 +0000 (21:22 +0200)]
login/edit: password generation for user admins
Option to reset users of Lijtweg.
Mischa POSLAWSKY [Fri, 18 Oct 2019 19:18:38 +0000 (21:18 +0200)]
login/edit: allow setup form for missing users
Fix creation since validation added in commit
v3.6-0-gd1fc7642f0
(2018-08-11) [login/emulate: request page as different user].
Mischa POSLAWSKY [Fri, 18 Oct 2019 19:15:09 +0000 (21:15 +0200)]
login/edit: reconfigure size attribute
Ignored since syntax change in commit
v3.7-15-g1888ccc749 (2018-11-13)
[login/edit: generic setup of input attributes].
Mischa POSLAWSKY [Fri, 18 Oct 2019 19:14:46 +0000 (21:14 +0200)]
login/edit: remaining access from user object
Some optional code paths broken by commit
v3.9-8-g882347cba8 (2019-06-28)
[auth: store global user metadata in User object].
Mischa POSLAWSKY [Wed, 16 Oct 2019 21:53:56 +0000 (23:53 +0200)]
widget/doclist: show hidden files to edit admins
Include private files as alternate options for editors. Presence of html
still takes precedence, and extension formats are considered a last resort
and no longer include sizes.
Mischa POSLAWSKY [Thu, 17 Oct 2019 00:59:47 +0000 (02:59 +0200)]
sitemap.xml: calculate priority from path names
Mischa POSLAWSKY [Tue, 15 Oct 2019 03:56:38 +0000 (05:56 +0200)]
sitemap.xml: common protocol listing all pages
Minimal implementations of sitemap for make benefit glorious engines of
search.
Mischa POSLAWSKY [Thu, 17 Oct 2019 00:05:09 +0000 (02:05 +0200)]
page: include partial templates from *.inc.html
Rename system files to be distinguishable from public pages.
Mischa POSLAWSKY [Thu, 17 Oct 2019 00:28:24 +0000 (02:28 +0200)]
widget/sitemap: move find code to global PageSearch class
Mischa POSLAWSKY [Tue, 15 Oct 2019 03:33:43 +0000 (05:33 +0200)]
widget/sitemap: linkref part to format a single page
Mischa POSLAWSKY [Tue, 15 Oct 2019 03:29:23 +0000 (05:29 +0200)]
login/edit: admin links to doc/post user pages
Mischa POSLAWSKY [Tue, 15 Oct 2019 03:17:25 +0000 (05:17 +0200)]
login/post: prepend print button
Mischa POSLAWSKY [Tue, 15 Oct 2019 03:22:02 +0000 (05:22 +0200)]
login/post: handler renamed from emulate page
Mischa POSLAWSKY [Tue, 15 Oct 2019 03:17:08 +0000 (05:17 +0200)]
login/emulate: serve subpages instead of redirects
Mischa POSLAWSKY [Tue, 15 Oct 2019 03:16:13 +0000 (05:16 +0200)]
login/emulate: user override from optional ?login parameter
Replace mandatory path argument.
Mischa POSLAWSKY [Tue, 15 Oct 2019 02:26:15 +0000 (04:26 +0200)]
auth: admin permissions per function
Replace generic .admin files by lines of right identifiers.
Check specific rights for: edit, user, site, news, foto.
Mischa POSLAWSKY [Fri, 12 Jul 2019 02:57:33 +0000 (04:57 +0200)]
thumb: jpeg content type for cached images
Generated files should be image/jpeg regardless of extension.
Mischa POSLAWSKY [Fri, 12 Jul 2019 00:38:43 +0000 (02:38 +0200)]
thumb: omit immutable caching for derived results
Even if the originals are treated as immutable, prefer an option to update
conversions since options may be changed later to improve quality.
Mischa POSLAWSKY [Fri, 12 Jul 2019 00:35:46 +0000 (02:35 +0200)]
thumb: indicate 1 month caching of generated output
Same header as set by Apache for static results.
Mischa POSLAWSKY [Fri, 12 Jul 2019 00:33:50 +0000 (02:33 +0200)]
thumb: flatten transparent images to white background
Ensure consistent background for some SVG and PNG originals.
Mischa POSLAWSKY [Fri, 12 Jul 2019 00:28:47 +0000 (02:28 +0200)]
thumb: ensure exception message in X-Error header
Multiline convert warnings would be ignored; the first line should suffice.
Include the expected header regardless of fallback output.