<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cccms/app/models, branch master</title>
<subtitle>[no description]</subtitle>
<id>https://erdgeist.org/gitweb/cccms/atom?h=master</id>
<link rel='self' href='https://erdgeist.org/gitweb/cccms/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/'/>
<updated>2026-06-27T19:43:55Z</updated>
<entry>
<title>Stage 7 click-testing fixes (2)</title>
<updated>2026-06-27T19:43:55Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-27T19:43:55Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=8957808536e53bb9329cb6ae12835fde7835210b'/>
<id>urn:sha1:8957808536e53bb9329cb6ae12835fde7835210b</id>
<content type='text'>
- nodes_controller: permit staged_slug and staged_parent_id in node
  params; these were silently dropped since strong parameters migration,
  breaking the two-phase slug/parent change workflow
- file_attachment: add SVG support; vector files are copied to all style
  directories without rasterisation, preserving scalability in the browser
- assets index/show: constrain image display with max-width/max-height
  via admin.css td img rule; fixes oversized SVG thumbnails while leaving
  raster variants unaffected
</content>
</entry>
<entry>
<title>Stage 7 click-testing fixes</title>
<updated>2026-06-27T19:14:48Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-27T19:14:48Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=a627a650fda4e22107245a3269465347bb778258'/>
<id>urn:sha1:a627a650fda4e22107245a3269465347bb778258</id>
<content type='text'>
- aggregate: switch to shortcode syntax [aggregate ...]; fix paragraph
  wrapping by excising the shortcode and its surrounding &lt;p&gt; before
  sanitize, concatenating collection output outside sanitized content
- page.rb: remove aggregate XML unwrapping from rewrite_links_in_body
  (no longer needed with shortcode approach)
- rss builders: explicit CGI.escapeHTML on title/abstract; Builder 3.3.0
  does not escape when target buffer is html_safe (ActionView default)
- tinymce: disable menubar and promotion nag; add code plugin, remove
  paste plugin (built into TinyMCE 8 core); configure via admin_interface.js
  directly (config/tinymce.yml affects tinymce() helper only, not tinymce.init)
</content>
</entry>
<entry>
<title>Stage 7: Rails 7.2 → 8.1 on Ruby 3.2.11</title>
<updated>2026-06-27T14:58:53Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-27T14:58:53Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=420506e58fdfc84f1a5bede0a01dedf0af3bb4f3'/>
<id>urn:sha1:420506e58fdfc84f1a5bede0a01dedf0af3bb4f3</id>
<content type='text'>
- Bump Rails to 8.1.3 (Ruby unchanged at 3.2.11, new gemset rails8-upgrade)
- config.load_defaults 8.1; merge app:update diffs for all environment files
- Remove routing-filter 0.7.0; replace with native scope '(:locale)' in
  routes.rb and default_url_options in ApplicationController
- Delete config/initializers/routing_filter_rails71_patch.rb
- Replace vendored TinyMCE 3.x (~200 files) with tinymce-rails ~&gt; 8.3;
  migrate admin_interface.js from jQuery .tinymce()/advanced theme to
  tinymce.init(); add config/tinymce.yml; note: TinyMCE 7+ is GPL
- rails-i18n ~&gt; 8.0 added explicitly (previously indirect dependency)
- awesome_nested_set, acts-as-taggable-on pinned to git main/master
  (gemspec activerecord &lt; 8.1 ceiling; no functional incompatibility;
  repin to version once upstream releases updated gemspecs)
- globalize ~&gt; 7.0, libxml-ruby ~&gt; 5.0, nokogiri ~&gt; 1.18, pg ~&gt; 1.5
- sass-rails, coffee-rails, uglifier moved from :assets group to main
  (Sprockets 4 convention; :assets group no longer meaningful)
- Node: head, draft, lock_owner marked belongs_to optional: true
- Page: node, user, editor marked belongs_to optional: true
- Static assets in public/images/ and public/javascripts/ referenced via
  plain HTML tags; Rails 8 load_defaults raises on pipeline helpers for
  undeclared assets
- sessions_controller_test.rb: remove stale require and dead rescue_action
- users_controller_test.rb: assert button[type=submit] not input[type=submit]
  (Rails 8 button_to renders &lt;button&gt; not &lt;input&gt;)
- test_helper.rb: node.reload after children.create! (awesome_nested_set
  3.9.0 does not refresh parent in memory after callback)
- 129 runs, 339 assertions, 3 failures, 0 errors — identical baseline to 7.2
</content>
</entry>
<entry>
<title>Stage 6 click-testing fixes and production setup</title>
<updated>2026-06-27T00:39:55Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-27T00:39:55Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=b4f850e97aeb12369399d8e1ab354f66d3b88e40'/>
<id>urn:sha1:b4f850e97aeb12369399d8e1ab354f66d3b88e40</id>
<content type='text'>
- file_attachment.rb: delete old upload directory before writing replacement
  files; fixes orphaned variants when filename or mime type changes
- assets/edit.html.erb: add file upload field and current file display;
  the form was previously empty and non-functional
- admin.css: fix button_to hover styling; buttons now show orange hover
  to signal interactivity
- test/controllers/users_controller_test.rb: assert input[type=submit]
  not anchor tag for destroy action (button_to change)
- test/test_helper.rb: add I18n.locale reset in setup block
- doc/rc.d_cccms: fix cccms_chdir, add start_precmd for log/pid dirs,
  PATH export for bash wrapper, user/pid/tcp_nopush unicorn fixes
- doc/INSTALL.md: new installation guide covering all non-obvious steps
- Remove parked search migration from doc/ (now in db/migrate/)
</content>
</entry>
<entry>
<title>Fix I18n::InvalidLocale :root errors</title>
<updated>2026-06-26T22:32:17Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-26T22:32:17Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=e7d5d0b2c32b172ecdaa80555bf5804043fd87a0'/>
<id>urn:sha1:e7d5d0b2c32b172ecdaa80555bf5804043fd87a0</id>
<content type='text'>
- Fix Page.find(self.head) → self.head in node.rb wipe_draft!
- Migration to delete 407 spurious 'root' locale records from
  page_translations (Globalize artefact, all had nil titles and
  duplicate de/en translations existed for all affected pages)
</content>
</entry>
<entry>
<title>Enable full-text search via PostgreSQL tsvector on page_translations</title>
<updated>2026-06-26T20:11:52Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-26T20:11:52Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=c2b3f184df4a60a872eea77971cd83ea6d8297b0'/>
<id>urn:sha1:c2b3f184df4a60a872eea77971cd83ea6d8297b0</id>
<content type='text'>
- Restore search vector migration (was parked in doc/ pending PostgreSQL upgrade)
- Restore Node.search using plainto_tsquery with simple dictionary
- Cross-locale keyword search, no stemming, works for both de and en content
</content>
</entry>
<entry>
<title>Fix ImageMagick 7: use 'magick' instead of deprecated 'convert'</title>
<updated>2026-06-26T20:04:42Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-26T20:04:42Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=289ec85be338c6c9085497820f53f57ee714b9b7'/>
<id>urn:sha1:289ec85be338c6c9085497820f53f57ee714b9b7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Stage 5 fixes: RouteWithParams removal, Globalize fallbacks, search stub, to_s(:db) → to_fs(:db), LockedByAnotherUser autoload, test environment config</title>
<updated>2026-06-26T03:19:28Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-26T03:19:28Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=a1ddc25da0d2aa79a4d9216ef7792f26233bd38e'/>
<id>urn:sha1:a1ddc25da0d2aa79a4d9216ef7792f26233bd38e</id>
<content type='text'>
- Remove safe_path helper and content_path shim from link_helper.rb
- Update all safe_path call sites in views to use named route helpers directly
- Fix Globalize fallbacks via config.i18n.fallbacks in application.rb, remove i18n initializer
- Stub Node.search returning none (search disabled pending PostgreSQL upgrade)
- Replace to_s(:db) with to_fs(:db) in node.rb, nodes_helper.rb, link_helper.rb, admin view
- Move LockedByAnotherUser to app/models/locked_by_another_user.rb for Zeitwerk autoloading
- Fix config/environments/test.rb: config.assets removed, cache_classes → enable_reloading,
  test_order removed, minitest pinned to ~&gt; 5.25
- Fix config/environments/development.rb: cache_classes → enable_reloading
- Park search vector migration in doc/ pending PostgreSQL and plpgsql availability
</content>
</entry>
<entry>
<title>Stage 5: Rails 6.1 → 7.2 on Ruby 3.2.11</title>
<updated>2026-06-26T02:05:04Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-26T02:05:04Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=fa0ccc43010297c0c10e3075095c0a9171989498'/>
<id>urn:sha1:fa0ccc43010297c0c10e3075095c0a9171989498</id>
<content type='text'>
- Bump Rails to 7.2.3, Ruby to 3.2.11 (new gemset rails7-upgrade)
- pg pinned to 1.4.6 (bridge: Ruby 3.2 compatible, PostgreSQL 9.6 tolerant)
- acts-as-taggable-on → 12.x (Rails 7.2 + Ruby 3.2 support)
- awesome_nested_set → 3.7.0 (Rails 7.2 support, avoids 3.9.0 lft/rgt bug)
- globalize → 7.0 (Rails 7.x required)
- libxml-ruby → 5.x (Ruby 3.2 required)
- unicorn → 6.x; fix unicorn.rb: RAILS_ROOT→Rails.root, RAILS_ENV→ENV,
  File.exists?→File.exist?
- Add puma for development server
- Remove dead initializers: assets.rb, ruby2.rb, backtrace_silencers.rb,
  new_rails_defaults.rb
- Fix File.exists? → File.exist? in page.rb and authors_importer.rb
- Add routing_filter_rails71_patch.rb (restores params[:locale] on Rails 7.1+)
</content>
</entry>
<entry>
<title>Stage 4: Rails 5.2 -&gt; 6.1 on Ruby 2.7.2</title>
<updated>2026-06-25T23:59:57Z</updated>
<author>
<name>erdgeist</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-06-25T23:59:57Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/cccms/commit/?id=c06723ee715512c2033c7786c48f15674585b56b'/>
<id>urn:sha1:c06723ee715512c2033c7786c48f15674585b56b</id>
<content type='text'>
- routing-filter 0.6.3 -&gt; 0.7.0 (Rails 6.1 compatibility)
- RSS named routes rss_xml/rss_rdf added
- RouteWithParams workarounds: will_paginate_patch, content_path shim, safe_path helper
- Paperclip removed, replaced with FileAttachment concern (preserves URL scheme)
- Assets resource moved to /admin/assets (Sprockets middleware conflict)
- ApplicationRecord base class added, all models migrated
- Strong parameters added to Assets, Occurrences, Events, MenuItems controllers
- update_attributes -&gt; update throughout
- render :nothing -&gt; head :ok/:not_found throughout
- language_selector rewritten (removes :overwrite_params)
- Environment files updated for Rails 6.1 (eager_load, public_file_server, ActionMailer)
- Arel::Visitors::DepthFirst and Integer/Float duration patches removed from test_helper
- AssetsController tests added (10 tests covering upload, variants, destroy, auth)
- ImageMagick geometry: 460x250! for headline crop (not # which is invalid in IM6)

129 runs, 311 assertions, 5 failures (all pre-existing), 0 errors
</content>
</entry>
</feed>
