Leaderboard
Popular Content
Showing content with the highest reputation on 05/13/2023 in all areas
-
Following up from the module mentioned last week, the PageEditRestore module has been released and here's a new blog post with all the details. This module helps to prevent page edits in the admin from getting lost when the user’s session is lost— https://processwire.com/blog/posts/page-edit-restore-module/4 points
-
It wouldn’t be too difficult using ProcessWireUpgradeCheck::getModuleVersions. You can also have a look at ProcessWireUpgradeCheck::loginHook to see how it's used. Something like: $wire->addHook("LazyCron::everyMonth", function(HookEvent $event) { $checker = $event->modules->get("ProcessWireUpgradeCheck"); if(!$checker) return; $upgrades = $checker->getModulesVersions(true); // we only want modules with new versions if(!count($upgrades)) return; $subject = "There are " . count($upgrades) . " modules to update on $config->httpHost"; $body = "Hi!\n\nAn upgrade is available for these modules on $config->httpHost:\n\n"; foreach($upgrades as $name => $info) { $body .= "- $name ($info[remote])\n"; } $body .= "\nHead to " . $event->pages->get("process=ProcessWireUpgrades")->url . " to upgrade"; // not sure if this `get` would work? $mail = new wireMail(); $mail->from("upgrade@$config->httpHost") ->to("you@mail.com") ->subject($subject) ->body($body) ->send(); }); (non tested code written from my phone, so please forgive the formatting and/or mistakes ?)4 points
-
I am working on and thinking about automating quite some tasks in ProcessWire and just stumbled about the thought to take updates into my list of possible tasks. Has anyone an idea if it's possible to hook LazyCron into/or hook directly into ProcessWireUpgrades to look for updates with this module (including updating the directory listings) and go from there, like sending an email with all existing updates/changes? As far as I could tell the answer is probably: NO Any ideas or thoughts? First of all my main goal is receiving an email once in a while for each instance in which updates could be done/are available. No automated updates (I am not an adrenalin enthusiast)! Oh, and yes... please feel free to "steal" this idea for a module if you like or add a recipe for this.3 points
-
This is brilliant! Just minor tweaks. You already did 99,9% of the job. Awesome! Thank you. wire()->addHookAfter("LazyCron::every4Weeks", function(HookEvent $event) { $checker = $event->modules->get("ProcessWireUpgradeCheck"); if(!$checker) return; $upgrades = $checker->getModuleVersions(true); // we only want modules with new versions if(!count($upgrades)) return; $subject = "There are " . count($upgrades) . " modules to update"; $body = "Hi!\n\nAn upgrade is available for these modules on " . wire('config')->httpHost . ":\n\n"; foreach($upgrades as $name => $info) { $body .= "- $name ($info[remote])\n"; } $body .= "\nHead to " . $event->pages->get("process=ProcessWireUpgrade")->httpUrl . " to upgrade."; // not sure if this `get` would work? $mail = wireMail(); $mail->from("wwwuser@example.com") ->to("admin@example.com") ->subject($subject) ->body($body) ->send(); }); Just added this to an existing site. Works perfectly fine. Follow up Added public recipe for all: https://processwire.recipes/recipes/automate-module-upgrade-check/2 points
-
Support thread for the PageEditRestore module. This module helps to prevent page edits in the admin from getting lost when the user’s session is lost. Blog post about Page Edit Restore Module directory page GitHub page2 points
-
A module for ProcessWire CMS to integrate a user registration/login functionality based on the FrontendForms module. This module creates pages and templates during the installation for faster development. The intention for the development of such a module was to provide a ready-to-use solution for user management, which can be installed and put into operation in a few minutes. It works out of the box, but it provides a lot of configuration settings in the backend: Highlights "One-click" integration of an user login/registration system without the hazzle of creating all pages and forms by hand "One-click" switch between login or login and registration option Double opt-in with activation link on new registrations Option for automatic sending of reminder mails, if account activation is still pending Option for automatic deletion of unverified accounts after a certain time to prevent unused accounts Option to use TFA-Email if installed for higher security on login Mutli-language Select if you want to login with username and password or email and password Select the desired roles for newly created users Select, which fields of the user template should be displayed on the registration and profile form (beside the mandatory fields). Fields and order can be changed via drag and drop functionality Offer users the possibility to delete their account in the members area using a deletion link with time expiration Customize the texts of the emails which will be send by this module Usage of all the benefits of FrontendForms (fe. CAPTCHA, various security settings,...) Support for SeoMaestro if installed Lock accounts if suspicious login attempts were made Support of Ajax form submission This module runs on top of the FrontendForms module, so please download and install this module first. UPDATE 03.11.2023: The module is now available inside the Processwire modules directory: Frontendloginregister This module is early Beta stage, so please do not use it on live sites at the moment. If you discover any issues, please report them directly on GitHub ?. Thanks!1 point
-
This is the next module beside the FrontendLoginRegister module which is based on the FrontendForms module. As the name suggests, it has been designed to easily create a contact form for your site with the following characteristics: Fast and easy integration of a contact form inside a template by using only one line of code Show/hide certain fields of the form depending on your preferences and needs Beside the default fields you will be able to extend the form with additional fields if needed Highly customizable (change order of fields, add custom CSS classes,...) Run as many forms on one page as you want Possibility to offer file upload to upload multiple files, which can be sent as attachments Usage of all the benefits of FrontendForms (fe. CAPTCHA, various security settings,...) Multi-language IP of the sender will be send with the email too, so you can use it for IP-blocking if you will get a lot of spam from a certain IP To render a complete working contact form, you will only need to add this line of code to your template: echo $modules->get('FrontendContact')->render(); The output can differ from the image above, because it depends on your settings and customizations, but it will looks like similar to the form in the image. This module is completely new and therefore alpha stage - so be aware of using it on live sites! It works as expected in my tests, but it will need further testing. You can download the module here: FrontendContact or you can install it via the Processwire upgrade-module from the module directory. Alternatively you will find all files inside GitHub. You will also find a more detailed description on the the download page. Live example of this module: https://www.schulfreund.at/kontakt/ As always, please report issues or wishes here or directly on GitHub. Thanks for testing!1 point
-
Wow. Looks absolutely incredible. ? Really gives you a feel of an asset library. Great work. Looks intuitive too. Can't wait to test it out. ? Two questions: how should uploads happen? Can I just upload assets via DND in a folder or is the "New" button meant for uploads? If so, I would give it a different name, e.g. "Upload Media". Second question: does the search always refer to the entire library or only to the currently selected folder? Can I change the search behaviour in an advanced mode?1 point
-
It's not just quotation marks. In setAttributeValue() in InputfieldURL.module: input (dirty) value: https://teams.microsoft.com/l/meetup-join/19%3ameeting_OTY0NjAwYmUtOGIxNy11OGI5LWExMWMtNThlMmRmZGU5YTZl%40thread.v2/0?context={"Tid"%3a"36cabc20-3b53-4a0d-be6d-1fb3a94f9786"%2c"Oid"%3a"a508db2a-aff9-475e-9cf2-e51581a58320"} sanitized value using sanititer()->url() method: https://teams.microsoft.com/l/meetup-join/19:meeting_OTY0NjAwYmUtOGIxNy11OGI5LWExMWMtNThlMmRmZGU5YTZl@thread.v2/0?context={"Tid"%3a"36cabc20-3b53-4a0d-be6d-1fb3a94f9786"%2c"Oid"%3a"a508db2a-aff9-475e-9cf2-e51581a58320"} rawurldecoded value: https://teams.microsoft.com/l/meetup-join/19:meeting_OTY0NjAwYmUtOGIxNy11OGI5LWExMWMtNThlMmRmZGU5YTZl@thread.v2/0?context={"Tid":"36cabc20-3b53-4a0d-be6d-1fb3a94f9786","Oid":"a508db2a-aff9-475e-9cf2-e51581a58320"} As sanitized and rawurldecoded values differ, PW returns an error. I'm not sure how te deal with that, perhaps open an issue report? What could you do: a) use plain text field, b) instruct users to rawurldecode the url ?1 point
-
Like ProcessWire page reference fields. Yes. Media pages are not nested. They reference 'categories' (folders) which themselves can be nested. To the user, they look like 'folders' in everyday computing (sort of). Conceptually, they are virtual folders. Technically, they are like page reference fields. This means that a media item can belong to more than one category. This is achieved simply by it referencing multiple 'category pages' (like page reference fields). So, technically, we don't nest media items. Instead, we nest the categories and the media items follow that, virtually. Categories are nestable pages. For instance, in the demo, People is a top level category (folder) page. It has two (ProcessWire) page children, Men and Women. If we wanted to, we could further sub-divide this, e.g. Men > Sports Men > Martial Arts > Etc... These are all 'category' pages. It is not shown in the video but from the screenshot below, you can see the category 'Fruits' is deeply nested. Deep Nesting Back to the demo, for example, the images (media items) you see when viewing 'Men' have the category 'Men'. Definitely. This is because as explained above, we don't nest the media items themselves. Their paths are fixed. For instance, to move some media from the category 'Berries' into 'Apples', behind the scenes, we will just change its category (reference) to 'Apples' (or 'Green', to be more specific). The media itself doesn't move. I am still working on the 'move' from the UX point of view but it will most likely be via both drag and drop and using menu (context) options.1 point
-
Hi all, I wanted to update you on the progress of the next MM as discussed from this post onwards. Here's a very short preview of the next MM. It is still very early days. Nothing is polished and things may change. My main focus is on the functionality although I spent a bit of time on the GUI. I have spent considerable time thinking about the conceptual design, especially for the API and I am quite pleased with that so far. Before you ask, I don't know when this will be ready. It is not a small re-write. I do know that it won't be until after the summer though, that's for sure. Happy to get early feedback, thanks. MM Next Early Preview Demo 1.mp41 point
-
Hi @Cybermano - just to let you know I've seen your continued hard work on this module ? which is awesome! I'm pretty sure it's all a million times better than my implementation but I've been so busy at work last few weeks I've not had a chance to review it all. I'll make sure I'm onto it this weekend and merge it all in. P.s. as you can see from my GH my real name isn't Guy (it was an obscure Simpsons reference)... I might change my name on here as it feels really silly otherwise ??1 point
-
There is a setting for url fields to allow or disallow quotation marks. I’m pretty sure it defaults to disallowing them. Have you checked that?1 point
-
Just an FYI for everyone who may upgrade to the latest PW dev version today. If you make use of AOS's excellent "Add button to check/uncheck all checkboxes" feature, it will break the top level menu dropdowns in the PW admin (and maybe other JS). The fix is to replace: ("[data-no-checkall-checkboxes="1"]") with: ([data-no-checkall-checkboxes="1"]) in: /site/modules/AdminOnSteroids/scripts/aos.min.js1 point