trunk (unreleased) * bumpver css * work around overlength release notes (HTML remnants) * update to GraphQL query * Add fossforce, remove xyz-apps.org (dead for good?, albeit kde had a similar app store now) * Logging function for submit failures * Log submit failures * Transition to microformats2 * Introduce twitter tags. * Rephrase notes in "Publish" section. (Note that multiple edits are possible, instead of offputting "proofread". And it's IndieAuth/OpenID now.) * Prevent garbage filltext spam * Fix forum (PHP7.4 compat for Parsedown, stray empty name= in template, didn't test for emtpy lastInsertedId) * bump version of openid/indieauth include * More shortags (use `phptags --long` to reverse...) * Comment out some test snippets * Case-insensitive title match * Note about changed cloudflare API, but code not updated yet. * Add cash* spamwords. * Add background image for IndieAuth logon button, remove some debug messages. * Use some short tags * fix missing /section * Move auth section after utility includes * Introduce IndieAuth logins * Fixed title/description extraction. * Add freshermeat, repology to /links page; aux: more current spam keywords. * Remove linux.com software * Check for UTF-8 encoding mismatches before piping row to feed. Also: add `summary` field. * Additional howto/comments on login page regarding `lock` field requiring proper password hash or OpenID handle. * Recent updates to basic spam blacklist. * Hash any literal passwords. * Fixed HTML escaping for password field. * Change `f_version()` back to allow meta characters `~+()#/@:` in release versions. * A bit more padding-top * Add `debian` changelog autoupdating method. * Raise version to 0.8.3, add freshfoss.com as toplink. * Edit spam filter. * Allow delayed inserts (releases.json with preset t_published timestamp) * Add basic spam checks. * Introduce &offset= parameter for xfer.json feed, as memory gets depleted too quickly from assembling the JSON structure (and json_encode uses twice as much afterwards). * Introduce $renamed_proj[] aliasing. * Archive screenshots to ALL.txz for mirrors. * Change "Update infos" to "Update project". * Change minimum `name` length to 2…33 * Filter duplicate entries from SF.net file feed. * Summarized changes directly from /changelog * Return just HTTP 200 status with project:{name:null} on non-existing entries. Alias "hide" and "hidden" fields. * Separate 501-Not-Implemented for unknown request methods. Copy "image" URL as literal field, but use "image" link from urls{} dict only with valid file "extensions". Use 495-Cert-Error for SSL authorization (status code from nginx). Use HTTP_USER_AGENT now generally as `submitter_openid` placeholder. * Introduced "summary" field on /submit form. Currently .semi-visible because it's not displayed yet anywhere, and existing project entries need update first. * Broke up main RewriteRule for readability and constraining subpage input. * Prepared default filter for short project `summary` field. Limited to 200 chars in the DB, but just 160 for current usage. (Still needs UI/submit form integration anyway.) * Marked state_tag and scope_tags as static. * Removed spurious $_SESSION dumping. * Fixed testing php warning log. Disabled $OBSOLETE placeholder fields for GET requests. Consolidated state/scope population from `release_tags`. Fixed license_tags collection. Filter out empty urls{}. Removed `submitter` from fields, now just `author`, and always there. Separated out requires_ssl_cert(); still disabled for testing. Return HTTP 204 Empty Content, include {project{name:null}} along error msg. * Brought API handler in line with documentation, and current field normalizations `project_tags`, `release_tags` and `license_list`. Some older names still mapped/aliased. * Add $OBSOLETE stub entries for old field names. * Just use "g+" for Google plus link instead of Unicode glyph. * Implement v0.5 API, untested/debugging verison, locked to test.db. Only URLs field needs special handling now. Unpacking/repacking separated out. JSON request payload "project", "release" and "urls" rejoining prepared. * For resiliency support `set_password` update in session handler. Prepare login page for complaints about visible text field. (Alternatively just placeholder=notice for login feedback). * Add `summary` table field (oneliner, to be used in rss/search/twitter, and somewhen later frontpage listings). * API locked against `test.db` (needs an inspection UI still) for now. Mostly untested implementation of CREATE/new_project() method with SSL cert requirement. * Support for per-project password locking and login. * API default SSL cert for CREATE /projects/new.json requests. 0.8.0 (2015-04-05) * Remove "already". Reads like a bug, when it should just be informational. * Width limit for sidebar. * Firefox misinterprets `whitespace:no-wrap` again. * Fixed "TUV" link. And raise preview size to 120x90 now. * Cut down the title length to 64 chars beforehand. (New layout expands too much else.) * Full sized preview image 160x120 * Fix spacing to header block. Correct nowrap issue for title/version/datetime in .project headers (Firefox). * Spread out project name letters further (ABC, DEF, GHIJ, KL, MN, OPQ, RS, TUV, WXYZ, 0-9) to match up with current distribution. * Mini template includes for new table #mainsplit and .container-width * Updated stylesheet to use table-layout for #main/#sidebar split. Padding still needs work. * Autoupdate support for LaunchPad project URLs. (Uses `release_notes` field from Launchpad devel API.) * Fix launchpadlibrarian user image lookup, and github avatar url regex. * Don't keep destroyed2 state. * Allow only 1-letter proj_name suffixes. * Omit `deleted` entrys from spotlight. * Filter addition for spammy GitHub releases. * Remove doubled `em` tag. * Launchpad-releases for frontpage sidebar. * Introduce `launchpad-releases` page. Updated polling with less delay. (So far only 30% of projects information received, less than 12% of release infos.) * Make freecode/freshmeat.club just aliases of main freshcode.club domain. * Updated user agent string with concrete version number. * Workaround for session cookie / CF issues. * DrChangelog: removed template rules, added regex rule info for `changelog` module, mention current github querying breakage. * Experimental launchpad project+release polling. (Not using OAuth, so decidedly slow-running; gonna take two weeks before it gets any results.) * Friendlier placeholder page in case of SQLite locks / running update scripts. * Add extra Unicode backtick to allowed input::_text filter. * Make tag/ pages and search results NOINDEX for spiders. * COLLATE NOCASE for version_exists() check * Addition of redir/ script for obfuscated URLs (not sure if needed though). * Addition of gtkapps, kdeapps, qtapps, cliapps to feed list. * Detect other Twitter URL variations. * Forum: threads with new submissions order on top now. * Prevent recollapsing of forum entries when editing within the reply/form fields. * Make actual timeout for session also 7 days. * One-time SQL fixing scripts for submitter_image. * Fix again (like the fifth time) the user image updating logic. Partial $newdata submissions had $this[submitter] still empty, therefore stripped previous user icon url/hash. * Add opendesktop.org/gtkapps/kdeapps/etc. to frontpage sidebar * Text: clear up that CC-BY-SA only covers the project description/text, not the project itself * Compare search term also against plain project `name`. * UI-tag as 0.7.7 * Document new gravatar/identicon options @github / @sourceforge / @launchpad. * Add ->nl newline conversion, ->f_version filter, and url_user_icon() utilization (@github / @sourceforge / @launchpad), keep local part from email-style (gravatar/etc.) submitter if plain nick is absent, fix comparison to previous submitter name (else emptying `submitter_image`). * Introduce `f_version()` filter to compact spaces, and strip leading "v". Complexer `url_user_icon()` to convert @github, @sourceforge and @launchpad user names to gravatar/user images. * Set db()/SQlite timeout to 15sec. * Update header_stats 3x per day * Retain via: field from spooled entries, spupport cmdline flag --now for instant insertions. * Block `wagic` (auto-regenerated master release stamps). * Added transactions as suggested by Lothar. * No more .trimmed for github-releases sidebar block. * Introduce `X-Content-License:` HTTP header. * Security fix: unescaped original input in diff/page_rc. * Remove redundant border=/align= from frontpage project index. v0.7.6, readd header "beta" marker+color, Twitter icon in footer. * Change explanation for `image` field ("leave empty" for autogenerated homepage screenshot). * Better description for versioned_url() regex pattern. * Lessen delay for incoming/ imports to around 6 entries per day. * Reveal incoming/ spool files in moderator stats. * Updated description. * Added contact mail address alternatively. * p_key_value() with configurable \S+ placeholder, used by lib/autoupdate to match exclude=1,2,3 versions. Prepared import_spool for deferred / autoupdate-injected updates. * Switch uneeded include() for readfile(), all feed templates are static. * Raise delay to around 4 hours. (3 was too frequent.) * Five tags maximum copied per tweet (still shuffled), JSON API debug msg. * Add allowed `,` separator to cron specifiers. * Add #flags/#incoming count to stats (for moderators). * Add linuxgamenews.biz as news source. * Introduce `IS_ADMIN` shortcut, header stats for moderator infos, fix flagged entry clearing. * Decode sourceforge URLs to skip %20 for version extraction, also try to capture -beta and -rc suffixes. * Omit tags with just one reference from tag"cloud"; scale text down a bit. * Rename QPL to QtPL * Automated cronjob re-registration from `x-cron:` plugin meta fields. * Switch to raw `twurl` requests for Twitter updates, as that allows to embed screenshots easily. 0.7.5 (2014-11-19) * Beta stage, declare version 0.7.5. * versioned_urls: Permit version-tuple access ("$version0-$version1-$version2") as well. * Add 0.7 DB scheme extensions: via, editor_note, autoupdate_delay * Switch to manual dependency loading * Xfer cron.job for freshcode.clb JSON feed importing. * empty default files * Exchange feed selection, add template stubs * Allow direct invocations, remove [END] and API mapping. * Remove uneeded pages, cron-jobs, doc/*, templates for FC-mirrors. * Empty default SQlite store (for mirroring) * Create new branch named "mirror" * Current (0.7.5) sqlite database scheme (added: via, editor_note, autoupdate_delay) * New links to Linux Games DB, Gtk-Apps, openDesktop, Portable Linux Games, TuxArena, LinuxSoftNews.WP, and FOSSHUB. * Forgotten fix to manually split up projectname.ext which the recent change to allow language-suffixes necessitates. ($ext will no longer consume .json or .rss and .atom by itself). * Revert back to slightly more spacing between project title, description, release notes, and tag list. * Reduce extracted ::scope_tags() per unique() * Twitter feed of recent releases. * CSS for audio tag, .editor_note (submit form), more narrow frontpage listings, styles for "GitHub releases" entries. * Introduction of releases `via` (= "form", "api" or "autoupdate" and "spool") and `editor_note` fields (raw HTML, displayed per-project in /submit form). * Added plugin meta for current cron hook timing. * Added plugin meta for current cron hook timing. More elaborate import-delay calculation. Field `description` condensed. * Added plugin meta for current cron hook timing. Output html attributes now double-quoted (plain htmlspecialchars usage), more constrained github.releases SELECT. * Allow singular language .suffix in proj_name() identifiers. New gimmick: "theme-song" in URLs will transform into HTML5 <audio> (specifically for OpenBSD entry). * Add github-releases to RewriteRule dispatcher, config: set default user-agent string for cURL *and* PHP streams. * Add CloudFlare and DB statistics to frontpage (replacing no-ads whitebox). * For absent results, allow singular ->property_row access to silently return NULL. * Avoid lengthy loops with SQL SELECT queries in cron jobs, to eschew SQLite database locking up meanwhile. * GitHub/Archive/API polling job. * Add GitHub/Archive list and cache database polling. * Split news feeds and fossies.org scraping. * int typecast for revision date display * Hide (only log) absent session/admin flag * raise to 150 character description for project name list * Fix project-name normalization for raw incoming/pool imports. * Introduce structured metadata (HTML5 itemscope/itemtype) for Google display. * Add beOpen to news and page_links * Print full license name as title= attribute for tags. * Fix version-cleanup for release::exists() check, again. * allow up to 22 entries from fossies.org * Fix spool for partial updating (instead of overwriting new entries). * Switch to current working directory in config.php, to avoid relative path handling in cron scripts. * Add implicit SourceForge= url for SF-imports. * Highlight every major N.0.0 project release. * Prepared submissions from incoming/ text files. * Add title=description to list of project /names. * Renamed feed names to just /projects.rss|atom|json (instead of internal /projects/xfer.rss|atom|etc). * Add input::nl() newline filter (normalize CRLF to just LF) * Added MPL-1 * Normalize version number for release::exists() check (to avoid mismatch for autoupdate, which probes existing versions before inserting new release) * Merge `description` and `changes` for RSS feeds. * RSS skipHours, fixed ?ext= handling for Atom (gonna get dropped however), and some HTTP cache-control * initialize empty $_SESSION array either way * Missing `event` argument for .preventDefault() in forum callback * Capture non-existant favicon.ico (log is growing excessively else) 0.7.0 (2014-08-29) * More colorization for index links, default css color classes, a few more links/ * Filter out deleted and hidden release from feeds. * Capture OpenID failures (still not working with self-signed certs). * Convert relative links into /root based resources. Try base href=/index. (Googlebot tripped over something). * Add formatted timestamp to log. Unpack project_tags array. Use `deleted` flag instead of `hidden` per default, unset both on submitting new revision. Map homepage on GET /urls, and accept "website" as alias when populating afresh. Remove `submitter_image` unless authorized, and rename with_permission() to requires_permission(). * Reintroduced API logging. Names in Other URLs field are no longer lowercased. * Reordered index sidebar blocks (new fossies.org links) * Added specific extractor for fossies.org, copies dates along (like for DistroWatch), and retains summary as link title= * Display matching project (per tag or exact search phrase) as full release entry instead of search excerpt. * Fix version regex for sourceforge feed. * Use 10 release.tags for populating `tags` table. Plain arrays, reduce SQL result set. * Limit /RC to 100 entries per page. * Allow .json as explicit feed/ suffix. * Fix default $value to $map[] assignment * remove obsolete include(lib/openid.php) * Add tags, submitter and urls for extraction; default to `name-releases.json` for export file. * Project extraction cmdline tool for freecode.com produces a `releases.json` for easy importing of previous releases per Autoupdate. * Relax editing timeframe for empty versions, also don't apply anyway if it's just an edit for version-less projects. * Reduce flagging impact (minimum of 2 before flagging opacity on frontpage sets in, to allow for project-owner flags) * Split up letter ranges (O-Q and R-T) * Frontpage project entry opacity based on `flag` (so flagging gives visual fallback for first votes, until entry is gone.) * Added a few more project hosters/forges. * Missing $data parameter for release{} update post-checks. * $image instead of $miniature for forum post editing, as to not show prior encoded URL, but only default gravatar email if any. * Mention /?format=rss shortcuts for feeds (inherited from freecode) * Smoother forum post unfolding, double escaping for edits removed. * Colorize meta/forum link. * Add db() placeholder documentation ASCII table. * ::http filter was too strict (leading numbers in URLs) * Add curl()->assert() to be run after ->exec() * Invalid autoupdate() invocation * Stop lowercasing project URLs. 0.6.5 (2014-08-11) * Use non-autoupdating autoloader. * Add basic /meta forum, separate handler and database structure. * Split Browser Projects by Tag into /names and /tags links. * Introduce project /names browsing. * Filtering also sourceforge project links (recurring changesto same project dump). * Introduced config.local.php, so primary config can match check-in. 0.6.0 (2014-08-08) * Debugging output $project->update() wrapper for DrChangelog (also fixed lib/autoupdate.php _rxu rule extraction order.) * Reduced number of url-label= examples for empty submit form. * Make `$version` replacement work on complete text input (RegExp/g) * Using diff now for /admin pages and /rc * Reordered gallery, added Fossies.org * Add /rc page (RecentChanges diff) * Externalized update_rules() - which currently just hides previously submitted empty-version project entries. * Added img alt= Unicode glyphs for homepage/download * Allow search to look for multiple licenses. * Removed manual curl() loading. * Added popup samples for Dr.Changelog * Added small #search_q box in #tools header * Split out gravatar email into separate database field `submitter_image`. (In templates still called `submitter_img` however.) * Updated autoupdate testing descriptions. * Introduced "Dr.ChangeLog" for testing autoupdate rulesets (regex,xpath,jquery release notes scraping). * Three new gallery links: IceWalkers, OpenHatch, OpenSourceArcade * Make ->list not forgo absent keys, but substitute values with NULL. * Added "Project Spotlight" to page footer, and a cron-job for rotating 3 random projects in there. * Moved defaults into static ::$defaults to also override UserAgent * DW in sidebar, a bit more API feed filtering * Introduced non-placeholder example key=url list for `Other URLs` in submit form; also better filtering prior display. * added DistroWatch feed and general version number highlighting * New additions: Linux AppFinder, Find Best OpenSource, FOSS Wiki, Libre Projects, and Zwodnik, a few more links in the sidebar. * Patched fc-submit for Python3 and using `requests` instead of `urllib2`; which is kind of necessary due to required SNI for SSL/TLS, usage of verify=cacert.pem should be possibly patched in as well * Made `?auth_code` optional for dispatching onto freecode API handler (else it would show up regular page instead of filtered JSON). * Query only last revision for tags. * Remove debugging output. 0.5.5 (2014-07-30) * New revisions with version number will now hide previous entries without. * URL updating verified for function, also updates separate homepage and download fields now * freecode-submit with minor adaptions for freshcode.club * freecode-submit 2.9 * API handler now supports some of the FC-3 interface, including update_core, publish, and withdraw, and URL reading. Made release{} partial updates look into the right data source for name+version. * Remove extraneous GROUP BY name, which broken [release_versions] order * Add ::scope_tags() and ::state_tag() extraction helper * initial API handler (just GET/query project info as of now) * Add colorization to trove list * Switch __get to parent::offsetGet * Add data-tag=$key on trove list optgroup * Revert autoupdate_module dropdown for autoselection. * Fix prepared $trove[] passing by typecasting COUNT() comparison with 1*? * Fixed feed aliases (due to RewriteRule recursion) * Introduce Trove tag selection on page_tags, tags: removed some natural languages, added new programming languages. Add JS .action links in submit page. HTML5shim for IE in header. * Utilize new :* expression placeholder for search query (binding though does not work for count()=? for some reason) * Introduced Trove-tags select box. * Added sourceforge project import, and allow PKG_INFO to understand LSM, Debian control files, and RPM spec * urlencode() tags links * Too many args for into() wrapper (should better use reflection after all..) * Allowed optgroups for select_form_options generator. * initial Trove map * Updated ::map_license and ::trove_to_tags * Template for frontpage listings 0.5 (2014-07-23) * New logo, initial tags:: handling, canonic autoloader (shared.phar). * Introduce language-specific links (Accept-Language), and Javascript confirm() for StackExchange sites. * Move /submit form into template/submit_* and introduce project imports (DOAP, JSON, PKG-INFO, freecode) * Move tags handling into separate tags:: module. * updated autoloader map * removed manual include(lib/feeder) * Expanding posts in forum/ * Reallowed numbers for start of project id * Fixed `key` quoting for expand_assoc_* * repackaged HtmlPurifier * Openfontlibrary added links gallery * linuxgames and sourceforge-files added * Frontpage feeds now feature linuxgames, sourceforge-files * moved img/logo.png * prepare for forum/ * package external lib/ into zip-phars * (no comment) * Restructured db_wrap{} and :* expression substitution. * More optional parameters for ->into() wrapping * Default user agent. * Trivial error message page. * Spaces in wrap_tags() links. Optional $$version substitution prefix. CSRF token filter fixed to ->name (instead of ->id). * Restructured per-project db() query to be only issued once, fallback message for non-existent pages. * Unescaped delimiter in strip_markup * Honor "hidden" flag on frontpage. * Allow `$version` URL placeholder to substitute dots with e.g. `$_$version` * Allow $title injection, make links protocol-relative. * Add project name to $title. * Fix "hidden" flag generation, take $prefill_flags into accounts. * Fixed RSS/Atom pubDate injection. * Use subquery for tags search, opacity & font-size for search entry `smallify` * Proper tags normalization (f_tags input filter) * Adapt links from /tag/xy to /search?tag= and ?user= link now to /search. * Introduce search/ function. * Move JS functionality out of template/header, to prepare for tags-editing * Moved projects_ and index_ output into template/ Made pagination() reusable into aux.php * Remove [x] And it's not spam checkbox (not descriptive, and faux form catcher sufficient). Use <code> and <var> for some field docs. * p_key_value_rx() now only in Autoupdate{} * Add ->into() now when retrieving ArrayObject results. * Move preg_replace_callbacks into methods * Split out some templates/ from projects/ description. * Workaround [END] for Apache 2.2 * Reuse API I-O to fetch social bookmarking counts. 0.4.5 (2014-07-10) * Minor presentational fixes. * Add pagination, use 40 per page for now (Freecode had around 25); later introduce auto-scrolling jquery.. * Fix version ->exists() check (always returned 0 due to UNION workaround) * Introduce doc/ directory, also for sources etc. * Introduced constrained, nicer SQL table definition export. * Workaround for linux.com broken encoding. * Added social share counter output. Fixed "csrf" typo; yes, again. * Moved to lib/ * Allow @ in ->text() filter * Added atom/rss feed aliases * new links http://www.opensourcescripts.com/ and http://www.linuxgames.com/ * Fixed dangling db_identifier() reference * Gravatar image added. * Explain link scheme in detail. * Added gravatar support for submitter name. * Prepare partial update() from Autoupdate * Commercial script directories removed. 0.4 (2014-07-08) * Copy current sidebar setup of //freshcode.club * Introduce ./template/ * Cut off at 7 tags. * ./lib/ movement * Fixed license moniker typo "LPGL", and typo in csrf() array, versioned_urls regex to check for \b and underscore, lowercase p_key_value arrays, allow hyphens in keys, → * Switched to standard db()-foreach instead of pdo::fetchAll() * Dependencies in /lib * Opacity for absent download link targets, Shadow border for /links images, and #sidebar .absolute-foat alternative * Removed white background pixels. * Favicon, version meta, and $header_add for injected RSS/Atom links. * Fixed project ID maiming, and release sorting. Added RSS/Atom injection. * Now utilizing release{} for update logic. * Added ?ext=format support, prevent direct *.php invocation using [END] rule (requires Apache 2.4), so only virtual resource names /project/etc can be invoked and mod_rewrite hence pre-filters allowable project IDs. * Added Atom/RSS output support * Removed commercial links, prepared for some generic community link groups in the sidebar. * Utility code moved into lib/ * Slight restructuring of db() hybrid method to shadow db_wrap{} class * Use arctan for proportions * Consolidate release/project database interaction. * lowercase tags, scope, state fields, add csrf(), fix openid copying as submitter_openid * Fixed /login link * prepared minimal CSRF token use * Fixed `wrapping` for db_identifiers. * Use custom `proj_name` input filter (keep dashes in project-name, but lowercase implicitly) * adapt db() queries to reuse `release_versions` or alike subset. * Add ?num= param for /feed/xfer * Introduce a coarse `strip_markup` filter, only for common presentational HTML (no `strip_tags` substitute, leaves lone angle brackets alone) * Make shadow a bit stronger again for /links page. * Make login required for /flag in either case. * Precautiously add a little spambot diversion. * (no comment) 0.3 (2014-06-30) * curl() wrapper * Populate `tags` table. * Moved utility code to (misnomer) layout_aux. * Utilize HTML5 pattern= regex and maxlength= validation, nicer help texts added, select_form_fields now preserves default non-standard values, $licenses had been moved to config.php, and input form data and field formats are now constrained individually. * Reimplemented `key` wrapping, rename ->broken to ->in_clause (also not needed with current SQlite anymore), and display PCRE /e with _callback. * `tags` table * Added jQuery and .trimmed sections hooks. * Added logout facility, JS links to populate form with a few common OpenID providers, and unsets some $_SESSION fields here instead. * social media buttons * Add empty `name` and `openid` defaults for uninitialized session. * Capture /login page as well. * Removed/fixed default * selector overrideing font sizes, styling for /links gallery, social media buttons, .trimmed project summaries. * Utilize release_versions view, add social media share links. * Smaller icons for changes and tags. * callStatic filtering now without prefix * Add optional /login page. * Switch to AGPL for now, utilize new `release_versions` view. * Tag cloud and searching projects via split-up `tags` table; proportional need a better quantification formula. * Link list is now a board of buttons. * Initial exchange format /feed/xfer and per-project /feed/linux JSON release lists. * New indexes and views. * config.php placeholder * Add [license] drop down menu with abbreviated names * Remove debugging output in session, prettify login box, input::has() and ::no() correctly accept list of key names, add jquery 0.1 (2014-06-25) * Initial website implementation: project submit, index listing, projects/ page, and moderation flags. * initial empty check-in