ProcessWire 3.x is a friendly and powerful open source CMS with a strong API.

Related tags

CMS php cms processwire cmf
Overview

Welcome to ProcessWire 3.x

This document is in Markdown. An HTML formatted version of this document can be read at: https://github.com/processwire/processwire/blob/master/README.md

Table of Contents

  1. About
  2. Installation
  3. Upgrading
  4. Troubleshooting
  5. Support

About ProcessWire

ProcessWire is a friendly and powerful open source CMS with an API that is a joy to use at any scale. It is both a content management system (CMS) and framework (CMF) built to save you time and work the way you do. With all custom fields, a secure foundation, proven scalability and performance, ProcessWire connects all of your content seamlessly, making your job fast, easy and fun.

ProcessWire gives you more control over your fields, templates and markup than other platforms, while ProcessWire’s API makes working with your content easy and enjoyable. Managing and developing a site in ProcessWire is shockingly simple compared to what you may be used to.

ProcessWire is widely trusted by web professionals for its exceptional consistency, stability and security; revered by web developers for its API that saves time and makes work fun; valued by web designers for its adaptability and flexibility with modern website/application content management needs; and loved by clients for its no-nonsense interface and ease-of-use in adding, updating and maintaining content. New versions of ProcessWire are released just about every week on the development branch.

Background

ProcessWire is a timeless tool for web professionals that has always been committed to the long term. It started in 2003, gained the name ProcessWire in 2006, and has been in active development as an open source project since 2010. Now more than a decade later (2021), we’re just getting started, as ProcessWire continues to grow and develop into the next 10 years and beyond.

While ProcessWire has been around for a long time, don’t feel bad if you haven’t heard of it till today. We are fundamentally different from other projects in that we don’t make a lot of noise, we’re not into promotion, we value quality over quantity, sustainability over growth, and a friendly community over popularity. ProcessWire is designed to be a silent partner, not easily identified from the front-end of any website. We don’t aim to be big, we are instead focused on being best-in-class.

Web developers find ProcessWire when the time is right, after they’ve tried some other platforms. And once they start using ProcessWire, they tend to stay. ProcessWire is addictive, easy to maintain for the long term, and doesn’t have the security and upgrade woes of other platforms. But don’t take our word for it; unless your livelihood depends on some other platform, find out for yourself.

Community

ProcessWire is more than just software, it is also a friendly community of web professionals dedicated to building great sites and applications, and helping others do so too.

Please visit and join our friendly community in the ProcessWire forums, subscribe to our weekly newsletter for the latest ProcessWire news, check out our website showcase to see what others are building with ProcessWire, and read our blog to stay up-to-date with the latest ProcessWire versions.

Weekly ProcessWire news is posted by Teppo Koivula on his site ProcessWire Weekly. Weekly core updates and related topics are posted by Ryan Cramer in the ProcessWire support forum News and Announcements board.

Learn more


Installing ProcessWire

Simply extract the ProcessWire files to an http accessible location and load the URL in your web browser. This will start the installer. See our Installation Guide for more details and instructions. If you run into any trouble, please see our Troubleshooting Guide.

Upgrading ProcessWire

Upgrading is easy and usually just a matter of replacing your /wire/ directory with the one from the new version. But to be safe, before proceeding with any version upgrade, please see the Upgrading ProcessWire guide and perhaps keep it open during your upgrade in case you need to refer back to it.

When upgrading from one 3.x version to another, please use the general upgrade process. This consists primarily of making sure you've got everything backed up and then just replacing your /wire/ directory with the one from the newer version.

Pro module version upgrade notes (if applicable)

  • FormBuilder version 0.4.0 or newer required, 0.5.0 or newer recommended.
  • ListerPro version 1.0.9 or newer required, 1.1.3 or newer recommended.
  • ProFields the latest versions of all ProFields (10 modules) are recommended.
  • LoginRegisterPro all versions supported but version 5 or newer recommended.
  • ProCache version 3.1.4 or newer required, 4.0.0 or newer recommended. After upgrading, go to your ProCache settings in the admin (Setup > ProCache) and see if it suggests any modifications to your .htaccess file.
  • For all other Pro modules not mentioned above (ProMailer, ProDrafts, ProDevTools, Likes) there are no specific version requirements but we recommend using the latest available versions when possible.

Debug Mode

Debug mode causes all errors to be reported to the screen. This can be helpful during development or troubleshooting. When in the admin, it also enables a “Debug” link (see footer) for reporting of extra information in a panel. Debug mode is not intended for live or production sites, as the information reported is for the developer only. Do not leave debug mode on for any live/production sites, as it could be a security concern. However, we think you'll find it very handy during development or when resolving issues.

  1. Edit this file: /site/config.php
  2. Find this line: $config->debug = false;
  3. Change the false to true, like below, and save.
$config->debug = true; 

This can be found near the bottom of the file, or you can add it if not already there. It will make PHP and ProcessWire report all errors, warnings, notices, etc. Of course, you'll want to set it back to false once you've resolved any issues.

Support and Links


Copyright 2021 by Ryan Cramer / Ryan Cramer Design, LLC

Comments
  • WebP Support for PW Core Engines

    WebP Support for PW Core Engines

    @ryancramerdesign Hi Ryan, here is the webP support for PW core image engines. Please refer to this forums post for some explanation: https://processwire.com/talk/topic/14236-webp-support/page/2/?tab=comments#comment-184583

    If you like, we can discuss it here or you can contact me via PM or email ([email protected]).

    opened by horst-n 28
  • Allow modules to add exclusions to FileCompiler

    Allow modules to add exclusions to FileCompiler

    This change allows you to add fileCompilerExclusions to a module's info array. This is useful for those who have vendor and lib directories in their modules that may break after being compiled.

    Refer: https://github.com/processwire/processwire-requests/issues/18

    opened by mikerockett 28
  • XXE Vulnerability

    XXE Vulnerability

    When getting an image file's information, the program does not care about XXE vulnerability, which could lead to sensitive information leakage or DoS attack. In Pageimage class(wire\core\Pageimage.php), function getImageInfoSVG parses file without any sanitation ,whose content may contain attack vectors.

    	protected function getImageInfoSVG($filename = '') {
    		$width = 0;
    		$height = 0;
    		if(!$filename) $filename = $this->filename;
    		$xml = @file_get_contents($filename);
    		
    		if($xml) {
    			$a = @simplexml_load_string($xml)->attributes();
    
    opened by dahua966 18
  • Cross-Site Scripting v1.3.6

    Cross-Site Scripting v1.3.6

    Affected software : Processwire CMS

    Version : v.1.3.6

    Type of vulnerability : XSS (Cross-Site Scripting)

    Author : Noth

    Description:
    Processwire CMS is susceptible to cross-site scripting attacks, allowing malicious users to inject code into web pages, and other users will be affected when viewing web pages

    PoC :

    Step 1 : login system 1

    Step 2 : Go to "/processwire/page/edit/?id=1" 2

    Step 3 : insert "XSS" test grammar in "Titile" and save it. XSS Payload : "> 3

    Step 4 : Go back to the login system page 4

    Test Video : https://drive.google.com/file/d/1j06Id6IHf5aUOTnU8w9wSujjGLuX3Wn9/view?usp=sharing

    opened by zxc7528064 11
  • fix inputfields not toggling on header clicks

    fix inputfields not toggling on header clicks

    This PR fixes an old and annoying bug:

    Before: bug

    Its a little hard to see, but the following happens:

    • opened inputfield: arrow blinks
    • collapsed inputfield: toggles correctly
    • ajax: opens correctly, blinks instead of closing

    This is really bad UX because the Inputfield behaves in 3 different ways to the same action (click header)!

    After: fix

    With this fix in place all inputfields toggle correctly on the first click on the header. It just does the click on the icon automatically instead of flashing it!

    completed 
    opened by BernhardBaumrock 11
  • $page->setAndSave does not work with array as parameter

    $page->setAndSave does not work with array as parameter

    It seems like setAndSave shortcut method does not play well with an array of fields unput.

    This code does not work:

    $page->setAndSave(array(
        'next_action' => 'JustTest',
        'next_action_time' => time() + 12 * 3600,
    ));
    

    This one does:

    $page->setAndSave(array(
        'next_action' => 'JustTest',
    ));
    

    and this one too (of course):

    $of = $page->of();
    $page->of(false);
    $page->next_action = 'JustTest';
    $page->save('next_action');
    $page->next_action_time = time() + 12 * 3600;
    $page->save('next_action_time');
    $page->of($of);
    

    Or I messed something up)

    opened by ivangretsky 10
  • Support square brackets in field names

    Support square brackets in field names

    Now supports showIf and requiredIf fields with names like skyscraper[0]name, skyscraper[1]name and so on in the same form.

    This isn't useful in ProcessWire at present since fieldnames can't contain brackets, but is useful when I've been using PW as a framework/library and wanted to use inputfield dependencies in my frontend forms where I do have some array-based fieldnames.

    Thought I'd submit it as it's a harmless change and might be useful in future or to someone else doing what I'm doing.

    enhancement completed discussion 
    opened by Notanotherdotcom 9
  • add button to close all notifications at once

    add button to close all notifications at once

    Hey Ryan, this is an old issue dating back to 2014: https://processwire.com/talk/topic/8329-how-to-closedelete-notifications/

    I always get lots of - persistent - notifications after login:

    img

    I need to close every single one of them. This PR adds an additional X to close all at once:

    image

    Note that I've only updated the unminified JS

    opened by BernhardBaumrock 8
  • AdminThemeUikit: add custom markup overrides feature

    AdminThemeUikit: add custom markup overrides feature

    Hey @ryancramerdesign

    I want to customize the backend of my app that I'm developing a little bit. Copying the whole module just for replacing the branding in the footer is so much overhead! That's why I created this PR that makes it possible to replace single files of the admintheme while keeping all the others. That means you can still upgrade the core without getting an outdated admin theme!

    Not sure what you think about the render() method being hookable? If you think that is adding too much overhead I'm fine with a non-hookable version as it's easy to overwrite the whole file anyhow.

    Thx in advance!

    opened by BernhardBaumrock 8
  • Code optimization and enhancements

    Code optimization and enhancements

    Changes Made: +++++++++++

    1] Added visibility(public/private/protected) for the constant. http://php.net/manual/en/language.oop5.constants.php#language.oop5.basic.class.this

    2] Changed double quote to single quote wherever necessary. http://php.net/manual/en/language.types.string.php https://www.codeproject.com/Articles/988255/PHP-Single-Quotes-versus-Double-Quotes

    3] Optimized the code by using Null Coalesce Operator instead of ternary operator http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.coalesce

    4] Added expected exception in CacheFile->save function since we are using $this->wire('files') which tends to throw WireException.

    5] Condition changed from !in_array($page->process, array('ProcessLogin')) to $page->process != 'ProcessLogin'.

    Hopefully this helps, will be adding more changes to it after this PR merged.

    Please let me know if you have any queries.

    completed 
    opened by mirzadabeer 8
  • Make previewColumns configurable for Fieldtype / Inputfield Selector

    Make previewColumns configurable for Fieldtype / Inputfield Selector

    It's really useful to be able to define the columns shown when clicking the "show" links for viewing results. This supports that like this: image

    I actually think it would be nice to add other options too, like how edit / view links should be handled etc, but wanted to see if you'd at least be willing to support the changed in this PR first.

    completed 
    opened by adrianbj 7
  • MarkupRSS: Allow markup in <description>

    MarkupRSS: Allow markup in

    Me again ✌️. I want my RSS feed items to have the full content, not just a summary. According to the spec, the <description> field is supposed to be used for this, but MarkupRSS does not allow it for two reasons:

    1. It doesn’t convert relative to absolute links.
    2. It double-encodes markup by enclosing entity-encoded content in CDATA. This makes (most?) feed readers show the markup instead of rendering it. Both entity escaping and CDATA should be rendered as per the spec, but the combination of both doesn’t work.

    This PR removes entity encoding from the <description> element and adds the URL conversion that was previously only applied to <content>. It also extends this conversion to account for single quotes such as href='/path'.

    Here is another link on supplying only the <description> element: https://validator.w3.org/feed/docs/warning/NeedDescriptionBeforeContent.html

    Thank you!

    opened by JanRomero 0
  • Add download button to InputfieldImage.

    Add download button to InputfieldImage.

    Hi, the idea for this came from this forum thread by @BernhardBaumrock. It’s a small but imho quite useful addition.

    I’ve tried to keep changes to a minimum. It’s virtually entirely a CSS thing because the download button is a simple element, but to make it work nicely I had to make the CSS independent of the label element and I renamed .gridImage__trash to .gridImage__btn to make it more generic. This somewhat opens the door for more such buttons – it actually clutters up the UI surprisingly little: grafik (Obviously that’s just a dumb mockup. The actual PR only adds the second button, as pictured here.)

    Buttons will be in reverse order in “list” view.

    I’ve tested it successfully with both stock themes. Hope it’s not too messy. Thanks for your consideration!

    opened by JanRomero 2
  • fix non-unix line endings

    fix non-unix line endings

    Hey @ryancramerdesign this PR fixes all files that have non-unix line endings. That is not just a cosmetic fix, it's really annoying because my IDE always shows several files as "changed" while they are actually not. They do even not disappear when reverting those "changes". It looks like this: 2022-10-18_18-33

    This is one file before the change: 2022-10-18_18-33_1

    And this is the file after running dos2unix (https://stackoverflow.com/a/7068241/6370411) 2022-10-18_18-34

    opened by BernhardBaumrock 0
  • Add method to read config from JSON file

    Add method to read config from JSON file

    Hey @ryancramerdesign I have a setup where I need to write the config of the site dynamically via PHP. Manipulating the original config.php file is really NOT easy... But it would be trivial to write the new config as JSON file. For that to work it would be nice to have this:

    $config->readFromFile('/path/to/config.json');
    
    opened by BernhardBaumrock 0
Owner
ProcessWire
ProcessWire is an open source API-driven CMS and web application framework aimed at the needs of designers, developers and their clients.
ProcessWire
Twill is an open source CMS toolkit for Laravel that helps developers rapidly create a custom admin console that is intuitive, powerful and flexible. /// Chat with us and others on Spectrum: https://spectrum.chat/twill

About Twill Twill is an open source Laravel package that helps developers rapidly create a custom CMS that is beautiful, powerful, and flexible. By st

AREA 17 3k Jan 6, 2023
PHPVibe Open source video CMS / Video Sharing CMS / Youtube Api v3 / Video Embeds

PHPVibe Video CMS Free Video Sharing CMS The modern choice of design inspired by Youtube and a social videos sharing module that may just cut it for y

MediaVibe 71 Dec 18, 2022
Flextype is an open-source Hybrid Content Management System with the freedom of a headless CMS and with the full functionality of a traditional CMS

Flextype is an open-source Hybrid Content Management System with the freedom of a headless CMS and with the full functionality of a traditional CMS. Building this Content Management System, we focused on simplicity. To achieve this, we implemented a simple but powerful API's.

Flextype 524 Dec 30, 2022
NukeViet 132 Nov 27, 2022
Amila Laravel CMS - Free, open-source Simple Bootstrap Laravel CMS

Simple Bootstrap Laravel CMS. Support Laravel 8.x Can integrate into any existing Laravel project. Only add few database tables with prefixes, not affect your existing database tables. Support Laravel 7.x & Laravel 6.x & Laravel 5.x & MySql & PostgreSql - Amila Laravel CMS

Alex Zeng 96 Sep 6, 2022
A module allowing you to write your Processwire template using MJML and get a converted HTML output using MJML API.

PageMjmlToHtml A module allowing you to write your Processwire template using MJML and get a converted HTML output using MJML API. This is considered

Romain Cazier 7 Oct 5, 2022
Craft is a flexible, user-friendly CMS for creating custom digital experiences on the web and beyond.

About Craft CMS Craft is a flexible, user-friendly CMS for creating custom digital experiences on the web and beyond. It features: An intuitive, user-

Craft CMS 2.9k Jan 1, 2023
Bolt CMS is an open source, adaptable platform for building and running modern websites.

Bolt CMS is an open source, adaptable platform for building and running modern websites. Built on PHP, Symfony and more. Read the site for more info.

Bolt 437 Jan 4, 2023
🚀Bolt CMS is an open source, adaptable platform for building and running modern websites

??Bolt CMS is an open source, adaptable platform for building and running modern websites

Bolt 32 Dec 3, 2022
Borgert is a CMS Open Source created with Laravel Framework 5.6

A simple CMS to start projects in Laravel containing some modules. Blog, Pages, Products, Mailbox, Image Gallery, Log Viewer and Users. Frontend: Blog

Borgert Inc. 300 Dec 30, 2022
BlizzCMS an Open-Source CMS

BlizzCMS Plus BlizzCMS Plus is a restructured and improved version of BlizzCMS v1. The development of this version is made constantly by the developer

WoW-CMS 58 Dec 31, 2022
Contao Open Source CMS

About Contao is a powerful open source CMS that allows you to create professional websites and scalable web applications. Visit the project website fo

Contao 252 Dec 22, 2022
Free, open-source, self-hosted CMS platform based on the Laravel PHP Framework.

Winter is a Content Management System (CMS) and web platform whose sole purpose is to make your development workflow simple again. It was born out of

Winter CMS 1.1k Jan 3, 2023
Open Source Portfolio/Resume CMS

Ezfolio Open Source Portfolio CMS Ezfolio is a professional open source portfolio CMS built using Laravel, React and Ant Design. Choose from awesome t

MD. Ariful Alam 205 Jan 5, 2023
Fork is an easy to use open source CMS using Symfony Components.

Installation Make sure you have composer installed. Run composer create-project forkcms/forkcms . in your document root. Browse to your website Follow

Fork CMS 1.1k Dec 8, 2022
True Multisite, Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS powered by PHP, Markdown, Twig, and Symfony

True Multisite, Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS powered by PHP, Markdown, Twig, and Symfony

null 4 Oct 28, 2022
Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS

Grav Grav is a Fast, Simple, and Flexible, file-based Web-platform. There is Zero installation required. Just extract the ZIP archive, and you are alr

Grav 13.6k Jan 4, 2023
Pyro is an experienced and powerful Laravel PHP CMS.

PyroCMS PyroCMS is an easy to use, powerful, and modular CMS and development platform built with Laravel 5. Security If you discover any security rela

PyroCMS 3.1k Dec 23, 2022
Baicloud CMS is a lightweight content management system (CMS) based on PHP and MySQL and running on Linux, windows and other platforms

BaiCloud-cms About BaiCloud-cms is a powerful open source CMS that allows you to create professional websites and scalable web applications. Visit the

null 5 Aug 15, 2022