Jump to content

Version Control


teppo

Recommended Posts

  • 2 weeks later...

Hey @Manon!

This seems like a good idea, so I've gone ahead and implemented it in Version Control 2.x (available via the dev branch int the GitHub repository). Note that if you're using Version Control 1.x, this update is not available there — I'm planning to merge the dev branch into master soon (this year at least), making 2.x the default version, and as such I'm not going to make any additional feature updates for 1.x releases.

Link to comment
Share on other sites

On 6/26/2020 at 7:49 PM, Jan Romero said:

But also, one thing, does anyone else feel that the diff should always be old to new? Right now when you open the history and click the most recent compare button, it’s the other way around. Wikipedia gives you one radio button for each version to compare and simply doesn’t let you select old to new. It’s kind of awkward and over-engineered, but I think the spirit of not going backwards in time is intuitive.

I guess it depends on your point of view. I can see how "always compare old to new" might make sense, but personally I prefer current approach, which is basically just "selected revision compared to any other revision".

At least for now I think that current approach is straightforward and makes sense (without requiring additional UI tricks, such as the one used by Wikipedia) 🤷‍♂️🙂

Link to comment
Share on other sites

In my site I use a templating system Template Engine Factory and I'm having a small issue when trying to visualize the preview revision inside the History tab, I get this error, the way the template engine passes variables between the controller and the view is not recognized  ($view->set('myvar',$myvar)), is something fixable? Thanks

image.thumb.png.47babb1b4e579622608022c0387708a6.png

Link to comment
Share on other sites

Hey @Sevarf2. Which version of Template Engine Factory is this? If it's 2.x, do you have auto_page_render setting enabled via module config?

I'm not particularly well versed in the inner workings of said module, but my initial assumption would be that it's related to the way it chooses which pages to render. It may also have something to do with hook priority, etc.

Anyway, let me know which version you're using, and I'll see if I can set up a quick test case.

Link to comment
Share on other sites

6 hours ago, teppo said:

Hey @Sevarf2. Which version of Template Engine Factory is this? If it's 2.x, do you have auto_page_render setting enabled via module config?

I'm not particularly well versed in the inner workings of said module, but my initial assumption would be that it's related to the way it chooses which pages to render. It may also have something to do with hook priority, etc.

Anyway, let me know which version you're using, and I'll see if I can set up a quick test case.

mmhhh never knew there was a 2.0 version...I was always relying on the automatic upgrade module and the 1.3 was the latest available...I'm gonna try it, maybe the issue will solve itself with the newer version, thanks

Link to comment
Share on other sites

  • 2 months later...

Curious if there is a use case for this module in conjunction with ProDrafts. Is there still utility in being able to callback past version of field values outside the realm of full page drafts? Is it redundant to have both Version Control and ProDrafts on a site? Does having drafts enabled for a template/field make things more confusing for VC?

Link to comment
Share on other sites

Thanks for a great module Teppo.

I don't suppose anyone has had success recording version control changes with front-end inline editing? I'm using inline editing on a personal project with just one specific field which is a large textarea (the rest use dialogue editor - works great).

Edit: Silly me, Version Control changes are indeed recorded with in-line editing. The field is within a repeater, so the front-end editor only saves changes to the repeater ID. It's still saved to the appropriate Version Control database tables.

  • Like 1
Link to comment
Share on other sites

  • 4 weeks later...

Has anyone been able to install any of the 2.x versions of Version Control with PW 3.0.165? I keep running into the following error:

Quote

[04-Jan-2021 18:49:50 America/Denver] PHP Fatal error:  Uncaught TypeError: Argument 1 passed to ProcessWire\Modules::setModuleConfigData() must implement interface ProcessWire\Module, string given, called in /home/word/public_html/wire/core/Wire.php on line 397 and defined in /home/word/public_html/wire/core/Modules.php:3697
Stack trace:
#0 /home/word/public_html/wire/core/Wire.php(397): ProcessWire\Modules->setModuleConfigData('ProcessVersionC...')
#1 /home/word/public_html/wire/core/WireHooks.php(823): ProcessWire\Wire->_callMethod('setModuleConfig...', Array)
#2 /home/word/public_html/wire/core/Wire.php(465): ProcessWire\WireHooks->runHooks(Object(ProcessWire\Modules), 'setModuleConfig...', Array)
#3 /home/word/public_html/site/modules/VersionControl/ProcessVersionControl.module(75): ProcessWire\Wire->__call('setModuleConfig...', Array)
#4 /home/word/public_html/wire/core/Modules.php(557): ProcessWire\ProcessVersionControl->__construct()
#5 /home/word/public_html/wire/core/Modules.php(1878): ProcessWire\Modules->newModule( in /home/word/public_html/wire/core/Modules.php on line 3697

 

Link to comment
Share on other sites

  • 1 month later...
1 hour ago, adrian said:

@Arcturus - I think you should be using the dev branch - I believe that the 2.0 branch is obsolete. @teppo ?

I'm pretty sure that aforementioned issue is now fixed in all the branches — but yes, you're correct, 2.0 branch is deprecated and the ones that are maintained — sort of — are dev (2.x) and master (1.x) 🙂

  • Like 1
Link to comment
Share on other sites

  • 3 months later...

@teppo Thank you very much for this module. I have enable version control on some fields at the user template. I'm using PHP 7.4.9 and when I visit a user page I'm getting this PHP Notice:

Trying to access array offset on value of type int in C:\laragon\www\mysite\wire\core\WireDatabasePDOStatement.php on line 107

 

Link to comment
Share on other sites

Hey @PWaddict!

So far I've been unable to reproduce that. I'm running PHP8, which should be close enough, but there are no warnings for me.

The error you've mentioned — assuming that you're using recent ProcessWire version — seems to point to WireDatabasePDOStatement::setDebugParam(), and more precisely it getting an integer as the param name. I've no idea how that could happen, and at the very least I can't find anything in Version Control that should (directly) cause it.

So... if you have any additional details, like where in the Version Control this error might originate, that'd be great. Also: which version of ProcessWire and which version of Version Control are you using?

Link to comment
Share on other sites

5 hours ago, teppo said:

Hey @PWaddict!

So far I've been unable to reproduce that. I'm running PHP8, which should be close enough, but there are no warnings for me.

The error you've mentioned — assuming that you're using recent ProcessWire version — seems to point to WireDatabasePDOStatement::setDebugParam(), and more precisely it getting an integer as the param name. I've no idea how that could happen, and at the very least I can't find anything in Version Control that should (directly) cause it.

So... if you have any additional details, like where in the Version Control this error might originate, that'd be great. Also: which version of ProcessWire and which version of Version Control are you using?

I guess you have to switch to 7.4.x to actually get the notice. I'm using the PW master version 3.0.165 and the 1.3.1 of Version Control. It happens only on the pages where I have enabled Version Control. I tested it also on a brand new PW installation where only Padloper module installed and I'm getting the same notice on the php_errors.log.

Link to comment
Share on other sites

5 hours ago, PWaddict said:

I guess you have to switch to 7.4.x to actually get the notice. I'm using the PW master version 3.0.165 and the 1.3.1 of Version Control. It happens only on the pages where I have enabled Version Control. I tested it also on a brand new PW installation where only Padloper module installed and I'm getting the same notice on the php_errors.log.

Generally speaking PHP 7 and 8 tend to work similarly in these situations — PHP 5 was more "forgiving" 🙂

Anyway, it could be related to VC 1.3.1. I've been using VC 2.x for a very long time, will have to set up a test site for 1.x.

Edit: turns out it's an issue affecting PW < 3.0.166. At least this particular instance of it is pretty easy to circumvent; I've prepared a fix, but will have to test carefully before releasing it.

  • Like 1
Link to comment
Share on other sites

  • 4 weeks later...
  • 3 weeks later...
19 hours ago, tires said:

Is there an easy way to echo the number of page edits / versions?

Currently you could get this from the versionControlRevisions property of the page. The value of said property is an array of all existing revisions, or null if none were found, so passing it to count() will tell you how many of those there were:

echo count($page->versionControlRevisions);
  • Like 2
Link to comment
Share on other sites

On 7/14/2021 at 8:11 PM, teppo said:

Currently you could get this from the versionControlRevisions property of the page. The value of said property is an array of all existing revisions, or null if none were found, so passing it to count() will tell you how many of those there were:

echo count($page->versionControlRevisions);

Thanks for your answer!

But it outputs nothing although there are about 10 versions.

When i do a "print_r" it outputs a "1":

print_r($page->versionControlRevisions)

Any ideas?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Robin S
      This module lets you add some custom menu items to the main admin menu, and you can set the dropdown links dynamically in a hook if needed.
      Sidenote: the module config uses some repeatable/sortable rows for the child link settings, similar to the ProFields Table interface. The data gets saved as JSON in a hidden textarea field. Might be interesting to other module developers?
      Custom Admin Menus
      Adds up to three custom menu items with optional dropdowns to the main admin menu.
      The menu items can link to admin pages, front-end pages, or pages on external websites.
      The links can be set to open in a new browser tab, and child links in the dropdown can be given an icon.
      Requires ProcessWire v3.0.178 or newer.
      Screenshots
      Example of menu items

      Module config for the menus

      Link list shown when parent menu item is not given a URL

      Advanced
      Setting child menu items dynamically
      If needed you can set the child menu items dynamically using a hook.
      Example:
      $wire->addHookAfter('CustomAdminMenus::getMenuChildren', function(HookEvent $event) { // The menu number is the first argument $menu_number = $event->arguments(0); if($menu_number === 1) { $colours = $event->wire()->pages->findRaw('template=colour', ['title', 'url', 'page_icon']); $children = []; foreach($colours as $colour) { // Each child item should be an array with the following keys $children[] = [ 'icon' => $colour['page_icon'], 'label' => $colour['title'], 'url' => $colour['url'], 'newtab' => false, ]; } $event->return = $children; } }); Create multiple levels of flyout menus
      It's also possible to create multiple levels of flyout submenus using a hook.

      For each level a submenu can be defined in a "children" item. Example:
      $wire->addHookAfter('CustomAdminMenus::getMenuChildren', function(HookEvent $event) { // The menu number is the first argument $menu_number = $event->arguments(0); if($menu_number === 1) { $children = [ [ 'icon' => 'adjust', 'label' => 'One', 'url' => '/one/', 'newtab' => false, ], [ 'icon' => 'anchor', 'label' => 'Two', 'url' => '/two/', 'newtab' => false, 'children' => [ [ 'icon' => 'child', 'label' => 'Red', 'url' => '/red/', 'newtab' => false, ], [ 'icon' => 'bullhorn', 'label' => 'Green', 'url' => '/green/', 'newtab' => false, 'children' => [ [ 'icon' => 'wifi', 'label' => 'Small', 'url' => '/small/', 'newtab' => true, ], [ 'icon' => 'codepen', 'label' => 'Medium', 'url' => '/medium/', 'newtab' => false, ], [ 'icon' => 'cogs', 'label' => 'Large', 'url' => '/large/', 'newtab' => false, ], ] ], [ 'icon' => 'futbol-o', 'label' => 'Blue', 'url' => '/blue/', 'newtab' => true, ], ] ], [ 'icon' => 'hand-o-left', 'label' => 'Three', 'url' => '/three/', 'newtab' => false, ], ]; $event->return = $children; } }); Showing/hiding menus according to user role
      You can determine which menu items can be seen by a role by checking the user's role in the hook.
      For example, if a user has or lacks a role you could include different child menu items in the hook return value. Or if you want to conditionally hide a custom menu altogether you can set the return value to false. Example:
      $wire->addHookAfter('CustomAdminMenus::getMenuChildren', function(HookEvent $event) { // The menu number is the first argument $menu_number = $event->arguments(0); $user = $event->wire()->user; // For custom menu number 1... if($menu_number === 1) { // ...if user does not have some particular role... if(!$user->hasRole('foo')) { // ...do not show the menu $event->return = false; } } });  
      https://github.com/Toutouwai/CustomAdminMenus
      https://processwire.com/modules/custom-admin-menus/
    • By tcnet
      This module for ProcessWire sends a notification email for each failed login attempt. Similar modules exists already in the module directory of ProcessWire. However, this module is designed to notify, even if specified user doesn't exist.
      Settings
      The settings for this module are located in the menu Modules=>Configure=>LoginFailNotifier.
      Notification email
      Specifies the email address to which the notification emails should be sent.
        Email subject
      Specifies the subject line for the notification email.
        Post variables
      Specifies the $_POST variables to be included in the notification email. Each variable must be separated by a comma. For example: login_name,login_pass
        Server variables
      Specifies the $_SERVER variables to be included in the notification email. Each variable must be separated by a comma. For example: REMOTE_ADDR,HTTP_USER_AGENT
      Link to ProcessWire module directory:
      https://processwire.com/modules/login-fail-notifier/
      Link to github.com:
      https://github.com/techcnet/LoginFailNotifier
    • By Fokke
      ProcessWire 3.x markup module for rendering meta tags in HTML document head section. Note that this module is not a full-blown SEO solution, but rather a simple tool for rendering meta tags based on module configuration. Adding custom meta tags is also supported.
      Built-in meta tags
      The following meta tags are supported out-of-the-box:
      Document title consisting of page title and site name Character set Canonical Viewport Description Keywords Hreflang tags Open Graph og:title og:site_name og:type og:url og:description og:image og:image:width og:image:height Twitter meta tags twitter:card twitter:site twitter:creator twitter:title twitter:description twitter:image Facebook meta tags fb:app_id The full documentation with configurable options can be found here: https://github.com/Fokke-/MarkupMetadata
       
      Requirements:
      ProcessWire>=3.0.0 PHP >=7.1 Installation using Composer
      composer require fokke/markup-metadata Manual installation
      Download latest version from https://github.com/Fokke-/MarkupMetadata/archive/master.zip Extract module files to site/modules/MarkupMetadata directory.
    • By m.sieber
      ITRK-Service for ProcessWire
      Module for the automated transfer of imprint, data protection declaration and terms and conditions from IT-Recht Kanzlei to your ProcessWire installation
      What is ITRK Service for ProcessWire?
      ITRK-Service for ProcessWire is a free module for ProcessWire CMS. It provides an interface to the update service of IT-Recht Kanzlei, via which the legal texts of your online presence are automatically updated. In this way, the texts remain legally secure and warning-proof in the long term. Imprint, data protection declaration, revocation and general terms and conditions are currently supported.
      You can find our documentation (in german language) here: https://www.pupit.de/itrk-service-for-processwire/dokumentation/

      Download: https://www.pupit.de/itrk-service-for-processwire/
      Github: https://github.com/pupit-de/pwItrkServiceConnector
    • By LuisM
      Symprowire is a PHP MVC Framework based and built on Symfony using ProcessWire 3.x as DBAL and Service-Provider
      It acts as a Drop-In Replacement Module to handle the Request/Response outside the ProcessWire Admin. Even tough Symfony or any other mature MVC Framework could be intimidating at first, Symprowire tries to abstract Configuration and Symfony Internals away as much as possible to give you a quick start and lift the heavy work for you.
      The main Goal is to give an easy path to follow an MVC Approach during development with ProcessWire and open up the available eco-system.
      You can find the GitHub Repo and more Information here: https://github.com/Luis85/symprowire
      Documentation
      The Symprowire Wiki https://github.com/Luis85/symprowire/wiki How to create a simple Blog with Symprowire https://github.com/Luis85/symprowire/wiki/Symprowire-Blog-Tutorial Last Update
      16.07.2021 // RC 1 v0.6.0 centralized ProcessWire access trough out the Application by wrapping to a Service https://github.com/Luis85/symprowire/releases/tag/v0.6.0-rc-1 Requirements
      PHP ^7.4 Fresh ProcessWire ^3.0.181 with a Blank Profile Composer 2 (v1 should work, not recommended) The usual Symfony Requirements Features
      Twig Dependency Injection Monolog for Symprowire Support for .env YAML Configuration Symfony Console and Console Commands Symfony Webprofiler Full ProcessWire access inside your Controller and Services Webpack Encore support Caveats
      Symfony is no small Framework and will come with a price in terms of Memory Usage and added Overhead. To give you a taste I installed Tracy Debugger alongside to compare ProcessWire profiling with the included Symfony Webprofiler

      So in a fresh install Symprowire would atleast add another 2MB of Memory usage and around 40ms in response time, should be less in production due to the added overhead of the Webprofiler in dev env
       
×
×
  • Create New...