Coder Social home page Coder Social logo

expressionengine / expressionengine Goto Github PK

View Code? Open in Web Editor NEW
441.0 31.0 115.0 352.84 MB

ExpressionEngine is a flexible, feature-rich, free open-source content management platform that empowers hundreds of thousands of individuals and organizations around the world to easily manage their web site.

Home Page: https://expressionengine.com

License: Other

Dockerfile 0.01% PHP 77.72% Shell 0.02% HTML 1.24% JavaScript 16.29% Hack 0.17% CSS 0.87% Ruby 0.05% Less 0.87% TypeScript 0.17% SCSS 2.35% Vue 0.27%
expressionengine eecms cms php content-management-system foss open-source apache2-license

expressionengine's Introduction

ExpressionEngine Logo

ExpressionEngine CMS

ExpressionEngine is a mature, flexible, secure, free open-source content management system. It is beloved by designers for giving them complete control of all output, and by content authors for enabling reusable, high-performing content. With ExpressionEngine, you can build full-featured websites, create a web app, or serve content to mobile applications. All without requiring complex programming skills.

Visit expressionengine.com to see what it's all about or, if you prefer, download a ZIP and jump right in!

System Requirements

ExpressionEngine requires a web server running PHP & MySQL. We recommend:

  • PHP 7.2 or newer
  • MySQL 5.6 or newer

ExpressionEngine can run on PHP 5.6+ and MySQL 5.5.3+. For full details and a server compatibility wizard, please visit the system requirements in the User Guide.

How To Install

If downloading from expressionengine.com

  1. Create a database
  2. Unzip download and upload the files to your site's root directory
  3. Verify file permissions
  4. Point your browser to /admin.php and run the Installation Wizard.

Read Installing ExpressionEngine in the User Guide for full instructions, tips, and post-install best practices.

If you're installing from the repository:

  1. Create a database
  2. Clone repo into your site's root directory or clone locally and upload files.
  3. Run composer install
  4. Verify file permissions
  5. add an empty config file, e.g. touch system/user/config/config.php
  6. route requests to the installer app instead of the main app by changing EE_INSTALL_MODE to TRUE in .env.php. You can change this back when you're done.
  7. Point your browser to /admin.php and run the Installation Wizard.

Finding Previous Versions

To install/download previous versions of ExpressionEngine navigate to Releases and download the Source Code (.zip or .tar.gz) from the from the release you wish to download.

Note: You may need to follow the instructions above, "If you're installing from the repository", after downloading.

How to Get Started

ExpressionEngine separates your content from your design, enabling you to make small or large changes to your website with ease. Your content is stored in Channels, and your design is kept in Templates, both of which are entirely under your control. ExpressionEngine bends to your needs, not the other way around like many other CMSes.

If you're new to ExpressionEngine, check out:

How to Contribute

There are many ways you get get involved and contribute to the ExpressionEngine application and it's amazing community. Check out CONTRIBUTING.md in the root of this repository to get started!

Copyright / License Notice

The ExpressionEngine project is copyright (c) 2003-2022 Packet Tide, LLC (https://packettide.com) and is licensed under Apache License, Version 2.0. This project contains subcomponents with separate copyright and license terms, all of which are fully FOSS and compatible with Apache-2.0.

Complete license terms and copyright information can be found in LICENSE.txt in the root of this repository.

"ExpressionEngine" is a registered trademark of Packet Tide, LLC. in the United States and around the world. Refer to ExpressionEngines's Trademark Use Policy for access to logos and acceptable use.

expressionengine's People

Contributors

aarongustafson avatar aaronkirkham avatar ajohnson avatar bakin1999 avatar bryannielsen avatar caleydon avatar creepcaster avatar dependabot[bot] avatar dougblackjr avatar gaker avatar geoffcowan avatar gilbert-hop avatar intoeetive avatar jcogs-design avatar jhards avatar johnfuller avatar leevigraham avatar litzinger avatar matthewjohns0n avatar mithra62 avatar obfuscode avatar ops-andy avatar quinnchr avatar robinsowell avatar robsonsobral avatar rsanchez avatar swierczek avatar tomjaeger avatar xhezairbey avatar yulyaswan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

expressionengine's Issues

Fluid field hooks

Is your feature request related to a problem? Please describe.
3rd party add-ons, in this case Publisher, do not have a way to interact with or manage the I/O of data with Fluid fields. Fluid is similar to Grid and Relationships in that they store their data in different db tables, but it does not have hooks yet to interact with in a similar fashion.

Describe the solution you'd like
Add hooks to key data I/O points in Fluid's model and/or ft file. My WIP can be seen at https://github.com/litzinger/ExpressionEngine/commits/feature/fluid-field-hooks. Currently it appears the best points for inserting hooks are in Fluid's model file where it fetches data from exp_fluid_field_data, which stores all the assignments of which fields exist in a particular Fluid field in an entry, and then where it fetches data for each "row" or field assigned. Added example usages of 2 additional hooks, one for save and one for the update methods.

Current example of how to use the hooks:

public function fluid_field_get_all_data($entryId, $fluidFieldId)
    {
        /** @var CI_DB_result $fields */
        $fields = ee('db')->where([
            'fluid_field_id' => $fluidFieldId,
            'entry_id' => $entryId,
            'lang_id' => $this->request->getCurrentLanguage()->getId(),
            'status' => $this->request->getCurrentStatus(),
        ])->get('publisher_fluid_field_data');

        $collection = new EllisLab\ExpressionEngine\Service\Model\Collection();

        // Fudge a Collection of FluidField models
        foreach ($fields->result() as $field) {
            /** @var ChannelEntry $entryModel */
            $fluidFieldModel = ee('Model')->make('fluid_field:FluidField');
            $fluidFieldModel->fill((array) $field);

            $collection->add($fluidFieldModel);
        }

        return $collection;
    }

    public function fluid_field_get_field_data($fieldId, $fieldDataId)
    {
        $where = [
            'id' => $fieldDataId,
            'lang_id' => $this->request->getCurrentLanguage()->getId(),
            'status' => $this->request->getCurrentStatus(),
        ];

        $rows = ee('db')
            ->where($where)
            ->get('publisher_data_field_' . $fieldId)
            ->result_array();

        return $rows;
    }

public function fluid_field_add_field(FluidField $fluidField, $fieldTableName, $values)
    {
        $fieldTableName = str_replace('channel_data_field_', 'publisher_data_field_', $fieldTableName);

        // Publisher doesn't handle the format info
        $formatColumn = preg_grep('/field_ft_/', array_keys($values));
        unset($values[current($formatColumn)]);

        // Why is entry_id 0?
        $values['entry_id'] = $fluidField->entry_id;
        $values['lang_id'] = $this->request->getCurrentLanguage()->getId();
        $values['status'] = $this->request->getCurrentStatus();

        /** @var CI_DB_result $query */
        ee('db')->set($values)->insert($fieldTableName);
        $fieldDataId = ee()->db->insert_id(); // $query returns true, so can't do $query->insert_id();

        ee('db')
            ->set([
                'fluid_field_id' => $fluidField->fluid_field_id,
                'entry_id' => $fluidField->entry_id,
                'field_id' => $fluidField->field_id,
                'field_data_id' => $fieldDataId,
                'order' => $fluidField->order,
                'lang_id' => $this->request->getCurrentLanguage()->getId(),
                'status' => $this->request->getCurrentStatus(),
            ])
            ->insert('publisher_fluid_field_data');

        return false;
    }

    public function fluid_field_update_field(FluidField $fluidField, $fieldTableName, $values)
    {
        $fieldTableName = str_replace('channel_data_field_', 'publisher_data_field_', $fieldTableName);

        // Publisher doesn't handle the format info
        $formatColumn = preg_grep('/field_ft_/', array_keys($values));
        unset($values[current($formatColumn)]);

        // Why is entry_id 0?
        $values['entry_id'] = $fluidField->entry_id;
        $values['lang_id'] = $this->request->getCurrentLanguage()->getId();
        $values['status'] = $this->request->getCurrentStatus();

        $where = [
            'id' => $fluidField->field_data_id,
            'lang_id' => $this->request->getCurrentLanguage()->getId(),
            'status' => $this->request->getCurrentStatus()
        ];

        ee('db')
            ->set($values)
            ->where($where)
            ->update($fieldTableName);
    }

Teachability, Documentation, Adoption, Migration Strategy
I can update the docs when the code is complete. Writing docs first may not make sense in this case b/c the hook names, locations, etc have not been finalized.

  • I am capable and would like to work on implementation of this feature if it is considered.

"No Fields found. Add New" ... EE-4.3.6

Hi I'm using ExpressionEngine 4.3.6.
My workflow is such that I create the templates, then Channels, then field groups and then fields. All titled appropriately so that its easy to locate them. I've noticed that when i create a channel and then use the field tab to create the field groups and fields for that particular channel it works pretty ok. I get the correct functionality on the front end of the website. If I go to the developer drop down and select fields it shows my field groups on the left and all fields on the right, however, if I select one of the field groups the right side shows "No Fields found. Add New" as opposed to showing the fields i created.
I've attached an image showing this.
1
2

File grid adding file meta data

Is your feature request related to a problem? Please describe.
When adding files to the File grid field there's no way to add file meta data (Title, Description, Credit, Location). This forces the author to go into Files, locate their uploaded files and add the data, that's if they have permission to access the Files CP area.

Describe the solution you'd like
Two possible solutions:

  1. Open a modal for each file where meta data can be added, in the case of multiple uploads the next modal would open after the previous had been saved.

  2. Add a link with each file so the author could access and edit file meta data. Probably a good enhancement generally.

Describe alternatives you've considered
No alternatives exist

Teachability, Documentation, Adoption, Migration Strategy
File meta data is already there so it's just a change in process.

  • I am capable and would like to work on implementation of this feature if it is considered.

RFC: ExpressionEngine X should be a rebuild from the ground up

Adding this here for comment.

ExpressionEngine currently has a lot of legacy baked into the code to handle when a user upgrades from EE 2 -> 3 -> 4. This is absolutely fine, however as this goes on, the more and more legacy needs to be supported.

What I would like to propose for comment is that future versions of EE, potentially 6 or higher should be a full rebuild of the CMS, and be fully incompatible with previous versions.

Defined below are what I believe some of the talking points should be:

  • More utilisation of modern development practices. i.e. Adoption of PSR standards, etc
  • Modular design. i.e. Drop in/replacement of modules via a package manager (ties into adoption of PSR)
  • Security with utilisation of open source modules for data management

Feel free to add further points, or close if this is not relevant.

No validation on Channel Default Guest Author

Description of the problem
If a channel's default guest author is deleted from the system, trying to save the channel settings results in a DB error on MySQL 5.7+

How To Reproduce
Steps to reproduce the behavior:

  1. Create channel with default guest author set
  2. Delete default guest author member account
  3. Edit / save channel settings

Error Messages


SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'default_author' cannot be null:
UPDATE `exp_channel_form_settings` SET `default_author` = NULL WHERE `channel_form_settings_id` = 3

Environment Details:

  • Version: 5.0.1
  • PHP Version 7.2
  • MySQL Version 5.7
  • OS: macOS
  • Web Server: nginx

Possible Solution
Add validation check on default_author field.

Additional context
Admittedly, this is an edge case.

After default member fields are migrated in EE4, undefined index to the url member field

Description of the problem
When upgrading a site that has content in the url member field (and it was in use), it is migrated to a new custom member field. When a field with "url" in it is used, for example the {url_title} variable, ExpressionEngine tries to set the member_url variable in Simple_variable.php at the top of the _url() function. It seems clear it is being set at the top of the function so it can be used in some of the later else cases. However, sometimes $mfields['url'] is set, but $data['m_field_id_'.$mfields['url'][0]] is not set, and PHP gets sad. PHP thows a notice that m_field_id_12 is an undefined index. See error below.

How To Reproduce
Steps to reproduce the behavior:

  1. Use the default member field {url} in ExpressionEngine 3
  2. Upgrade site from ExpressionEngine 3 to 4 (or continue to 5).
  3. Use the {url_title} in a context where the member fields are not loaded. I believe this is any channel entries loop.
  4. See error below.

Error Messages


Notice
Undefined index: m_field_id_12
ee/legacy/libraries/channel_entries_parser/components/Simple_variable.php, line 296

Severity: E_NOTICE

Environment Details:

  • Version: 5.0.1
  • PHP Version: 7.1
  • MySQL Version: 5.7
  • OS: Docker running on a Mac
  • Web Server: nginx

Possible Solution
It also needs to be verified that $data['m_field_id_'.$mfields['url'][0]] is set before attempting to use it. PR coming.

Textarea with formatting buttons -> error

Description of the problem
Using Channel form, tried to use a textarea with Formatting Buttons checked.. I don't see the buttons and i got an error..
How To Reproduce
Steps to reproduce the behavior:

Error Messages


test:266 Uncaught TypeError: Cannot read property 'settings' of undefined
    at HTMLDocument. (test:266)
    at l (?ACT=4&ui=core,widget,mouse,position,draggable,resizable,sortable,button,dialog&plugin=ui.touch.punch,ee_table_reorder,markitup&file=cp/sort_helper,cp/grid,underscore,cp/date_picker,cp/date&v=1542683022&use_live_url=y&include_jquery=y:3)
    at Object.fireWith [as resolveWith] (?ACT=4&ui=core,widget,mouse,position,draggable,resizable,sortable,button,dialog&plugin=ui.touch.punch,ee_table_reorder,markitup&file=cp/sort_helper,cp/grid,underscore,cp/date_picker,cp/date&v=1542683022&use_live_url=y&include_jquery=y:3)
    at Function.ready (?ACT=4&ui=core,widget,mouse,position,draggable,resizable,sortable,button,dialog&plugin=ui.touch.punch,ee_table_reorder,markitup&file=cp/sort_helper,cp/grid,underscore,cp/date_picker,cp/date&v=1542683022&use_live_url=y&include_jquery=y:3)
    at HTMLDocument.s (?ACT=4&ui=core,widget,mouse,position,draggable,resizable,sortable,button,dialog&plugin=ui.touch.punch,ee_table_reorder,markitup&file=cp/sort_helper,cp/grid,underscore,cp/date_picker,cp/date&v=1542683022&use_live_url=y&include_jquery=y:2)

Environment Details:

  • EE 5.0.1
  • PHP 7.0

My template :

{exp:channel:form channel="nos-passionnes" class="passionnes-form" return="site/merci-partage-passionnes"}
    {field:passionnes-texte}
    <button id="send" class="button disabled" aria-label="Envoyer" type=""><span aria-hidden="true">Envoyer</span></button>
{/exp:channel:form}

Config Environment Variables

Is your feature request related to a problem? Please describe.
Storing configuration settings in a file is a bit troublesome. Maintaing a file between different environments can be difficult.

Describe the solution you'd like
I would like for ExpressionEngine to store configuration settings in environment variables, or at least have that option. It could check if the environment variable is set, if it is set it would use it, but if it isn't set it would use a setting from the .env.php (or similar) file. At the time of writing this I don't see any potential drawbacks.

Describe alternatives you've considered
The config.php is in the .gitignore file, so I am free to edit it as I see fit and it won't be checked into any repo. I could set my environment variables, and have the config.php file use the getenv() function to retrieve the data.

Teachability, Documentation, Adoption, Migration Strategy
The user could then store their configuration settings in environment variables which would allow them to easily have different stages of development. It would require an update to the System Configuration Overrides, and potentially other places.

Documentation change

$config['allow_avatar_uploads'] = 'y';
// would become
putenv('allow_avatar_uploads=y'); // The environment variable may be all uppercase

Migration Strategy
Allow both config methods. Maybe deprecate the current way in the next major release. Of course one way would need to override the other way, and that would need to be decided.

  • I am capable and would like to work on an implementation of this feature if it is considered.

Drop-down menus (select/options) not keyboard-friendly

All the drop-down menus in the control panel are not keyboard-friendly, i.e. you cannot navigate to a drop-down via [TAB].

The stylized drop-downs also take a lot more room and are harder to read as zebra-style lists.

It would be nice to have either a per-user setting or at least a system-wide setting to use regular HTML select/options.

Previous month link not clickable in Channel Form datepicker

Description of the problem
When using a date field within a grid the calender don't work properly when adding / editing entries using channel forms.

Using the abbreviated month names in the top left and right of the calendar window you can navigate forward through the months but not backwards.

Environment Details:

  • Version: [e.g. 5.0.2]
  • PHP Version [e.g. 7.2.10]
  • MySQL Version [e.g. 5.7]
  • OS: [macOS]
  • Web Server: [MAMP]

Fluid field conditional doesn't work on live preview

It's always false and the content doesn't show, even when editing an entry.

It does work on the frontend.

example code where le-resources is a fluid field:

{if le-resources}
Show me if the fluid field le-resources has content
{/if}

Pages add-on isn't an option in Menu Manager.

Under 'Create Menu Item', the only add-on that can be added as a menu item is 'Comment'.

Shouldn't 'Pages' also be available?

  • Ideally, the Pages link should be automatically be added under the Developer drop down as it's a fundamental section of the site build procedure.

Model service With() unexpected behaviour

Hi There,

Im trying to extend a ChannelEntry Model Query with a custom model. But im facing an error

Undefined index: webservice:TestWith
ee/EllisLab/ExpressionEngine/Service/Model/Query/Select.php, line 846

The following can be followed to reproduce this error.

  1. Create a Model, with the following fields: id entry_id title
  2. Add a relation in the model to the ChannelEntry
namespace Reinos\Webservice\Model;

use EllisLab\ExpressionEngine\Service\Model\Model;

class TestWith extends Model {

    protected static $_primary_key = 'id';
    protected static $_table_name = 'test_with';

    protected static $_relationships = array(
        'Entries' => array(
            'type'     => 'belongsTo',
            'model'    => 'ee:ChannelEntry',
            'from_key' => 'entry_id',
            'to_key'   => 'entry_id',
            'weak'     => TRUE,
            'inverse' => array(
                'name' => 'TestWith',
                'type' => 'hasMany'
            )
        ),
    );

    protected $id;
    protected $entry_id;
    protected $title;
}
  1. Add the dependency in the addon.setup.php
'models.dependencies' => array(
        'TestWith'   => array(
            'ee:ChannelEntry'
        ),
    ),
  1. Create a basic model call with the custom model included
//search on a custom field within the Entries
$query = ee('Model')->model('ChannelEntry')->filter('field_id_10', 'search on a entry_field');

//include the model in the query
$query->with('moduleName:TestWith');

//search on the title in the custom model
$query->filter('moduleName:TestWith.title', 'test');

//print the result
print_r($query->first()->toArray());

It seems the ->with() is not working with custom models. Using the ->with() on the Channel model seems to working.

$query->with('Channel');
$query->filter('Channel.channel_id', 10);

Any idea what i did wrong?

Spam stats on CP home page links to no results

Description of the problem
On the CP homepage, it tells you how many comments are flagged as potential spam (see image).
When you click the link, it takes you to a page that doesn't list those spam entries.

How To Reproduce
Steps to reproduce the behavior:

  1. Submit some comment spam
  2. Look at the home page; take note of the number
  3. See that the number doesn't match the results

Error Messages
No error messages.

Screenshots / Videos / Template Code
screenshot 2018-12-13 16 19 42

screenshot 2018-12-11 21 39 41

Environment Details:

  • Version: 4.3.6
  • PHP Version 5.6.38
  • MySQL Version
  • OS:
  • Web Server: Apache

Possible Solution
None known

Additional context

Curly braces in a conditional with a regex throws parsing error

Description of the problem
Using curly braces in a regex comparison in a conditional causes a parsing error. I have a situation where I need to detect if a segment is a valid ISO code, e.g. en-us, or ca-fr. It appears as if the conditional parser is choking on the curly braces in the regex, b/c as soon as they are removed the error message goes away, but of course the regex isn't matching what I need it to match.

How To Reproduce
Steps to reproduce the behavior:
Add the following to a template file, and it'll yield the error message below.
{if segment_2 ~ "/\S{2}-\S{2}/"}{/if}

Error Messages


You have an invalid conditional in your template. Please review your conditionals for an unclosed string, invalid operators, a missing }, or a missing {/if}.

Environment Details:

  • Version: 4.3.6
  • PHP Version: 7.1
  • MySQL Version: 5.7
  • OS: Linux (via Vagrant)
  • Web Server: Apache

1054 Unknown column error when upgrading from 3.5.15 to 4.3.6

Description of the problem
Getting a MySQL error when upgrading from 3.5.15 to 4.3.6. It appears to be dying at the 4.0.0 installer file step, relating somehow to the Member Group model.

How To Reproduce
Steps to reproduce the behavior:

  1. Create a 3.5.15 site.
  2. Try to upgrade it to EE 4.3.6
  3. See error

Error Messages


SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ee_m_MemberGroup_member_groups.can_manage_consents' in 'field list':

Environment Details:

  • Version: 4.3.6

Possible Solution
If I create the column in the exp_member_groups table myself before I run the upgrade, it solves the issue, but there's got to be a better way.

can_manage_consents char(1) NOT NULL DEFAULT 'n',

Additional context
I suggest this should be back-fixed to 4.x

Relationship Field tag should support "Disable" parameter

The relationship field tag currently does not support the "disable" parameter:
https://docs.expressionengine.com/latest/fieldtypes/relationships.html#parameters

Describe the solution you'd like
I think it should. Relationships are often a place where additional queries are unnecessary -- you often don't need categories, pagination, etc.

Describe alternatives you've considered
None.

Teachability, Documentation, Adoption, Migration Strategy
Would be almost no additional UI or documentation needed. There's no backwards incompatibility issues, and no problem with including the attribute by accident on older versions.

Channel Information Tag

i have an issue with Channel Information Tag,

{exp:channel:info channel="news"}
Channel Name: {channel_title}

Description: {channel_description}
{/exp:channel:info}

works fine but,

{exp:channel:info channel="news"}
Channel Name: {channel_title}
{/exp:channel:info}

only channel title returns null

Channel mandatory fields are not working properly

Steps to reproduce:

  • Have one channel created (apples), assign 2 fields (textarea and text input) assigned to it. The fields have Require field checked (activated)
  • Have in front end a channel form to this channel (appels).
  • Input text
  • Get error: "The form you submitted contained the following errors" even if I have text imputed to them.
  • Unchecked the Require field from Admin Panel.
  • Now it works... I can submit messaged from front end to my channel (apples) channel.

Relationship Drop Down UI

Is your feature request related to a problem? Please describe.
When a single relationship field appears in a Grid the UI is too big and makes it more difficult than intended to interact with that field.

Describe the solution you'd like
Allow the site builder to choose between the standard Relationship UI, and a Relationship in a Drop Down UI, with search. This could be a toggle option in the field create/edit forms.

Describe alternatives you've considered
In this case, none.

Teachability, Documentation, Adoption, Migration Strategy
This is a UI option, and not a feature so I think there would be very little in way of documentation. Perhaps adding a section to https://docs.expressionengine.com/latest/fieldtypes/relationships.html

Use Drop Down UI
When set to on, the Relationship UI will use a Drop Down UI with a search filter. This is best for instances where the Relationship field appears inside another fieldtype, like Grid.
Note: This only applies to single Relationships, multiple relationships always use the standard UI.

I have it on good authority that this is a feature many people would use if available. And it should require no migration of data.

  • I am capable and would like to work on implementation of this feature if it is considered.

Feature Request: Support for database drivers other than MySQL

Unsure if this is the correct place to post this.

At present, ExpressionEngine utilises mysqli via PDO in order to connect to the database, with no alternative.

The nature of the web leaves this approach feeling fairly dated. So I am submitting a feature request for the Connection class to support multiple database drivers, notably postgres, with the potential to update to nosql down the line.

Special characters in filenames

When someone uploads an image/file with special characters such as parenthesis. Expression Engine doesn't output the image on the front-end. Which causes problems for clients or unfamiliar users of the CMS.

If someone has a fix for this that would be great, or even an error message to force the uploader to change the filename if special characters exist.

Thanks,
Christian

5.0.1 minor issue: missing keys for translating

Description of the problem
When using the French translation, the following keys, introduced with version 5.0.0, don't appear to be translatable:

show_ee_news
show_ee_news_desc
share_analytics
share_analytics_desc

How To Reproduce
install the French translation and go to Paramètres / Paramètres Généraux and Paramètres / Sécurité & vie privée

Additional context
No keys were apparently added in the English language files when going from 4.3.6 to 5.0.0 or 5.0.1

Channel::process_subcategories() running infinitely recursive

Description of the problem
In some circumstances which I cannot exactly reproduce, Channel::process_subcategories() will run in an infinite loop when calling a channel:entries loop in a template, exhausting memory and killing the application.

How To Reproduce
Honestly not sure! It happens with some channel/entries, but not others.

Error Messages


Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 262144 bytes) in /storage/avXXXXX/www/expressionengine/ee/EllisLab/Addons/channel/mod.channel.php on line 3509

Environment Details:

  • Version: 5.0.2
  • PHP Version: 7.2.10
  • MySQL Version: 5.0.12
  • OS: Linux
  • Web Server: Apache

Possible Solution
Double-check that $parent_id is not in fact 0 before recursively running the method inside of Channel::process_subcategories(). This fixed the issue for me.

e.g. Channel::process_subcategories() at line 3506

if ($parent_id == $val[1] && $parent_id != 0)
{
    $this->cat_array[] = $val;
    $this->process_subcategories($key);
}

cp_edit_entry_url tag produce wrong link

Description of the problem
{cp_edit_entry_url} tag produce wrong link where /system/ segment missing.

Environment Details:

  • Version: 5.1.1]
  • PHP Version 7.2
  • MariaDB 10.1
  • OS: Linux
  • Web Server: Apache

Control Panel "My Profile" page doesn't allow "https" URL scheme

Description of the problem
In the Control Panel navigating to "My Profile" from the top-left current user drop-down, trying to update the "Custom Field > URL" with anything starting with "https://" results in a validation error
Your URL must begin with a valid scheme:

How To Reproduce

  • Click on top left username drop down
  • Select "My Profile"
  • Scroll down to "URL" and enter an URL with https:// scheme
  • Try to submit/savesave

Error Messages


Your URL must begin with a valid scheme: 

Screenshots / Videos / Template Code
screen shot 2018-11-27 at 10 28 47

Environment Details:

  • Version: 5.0.1
  • PHP Version 5.6.38

EE version check tooltip appears under some elements

Description of the problem
The EE version check tooltip box appears under the third party add-ons table heading row (z-index issue).

How To Reproduce
Steps to reproduce the behavior:

  1. Go to Add-on Manager page
  2. Click the EE version badge

Screenshots / Videos / Template Code
overlap

RTE toolset override

Description of the problem
In Channel form rte_toolset_id= doesn't work

How To Reproduce
Steps to reproduce the behavior:

  1. Create a new toolset in RTE add-ons
  2. In your template, override the toolset using rte_toolset_id="X" in you exp:channel:form

Error Messages
Toolset is not override, logged user or not. Only the default toolbar is shown

Environment Details:

  • EE 5.0.1
  • PHP 7

Problems with avatars

Problem #1: the avatar_width and avatar_height columns in the database are not added/updated when adding/modifying/removing an avatar.

Steps I tried:

  1. picking an avatar from the default set
  2. uploading my own avatar (PNG)
  3. uploading my own avatar (GIF)
  4. uploading my own avatar (I tried with both JPG and JPEG extensions)

In all four cases, the avatar_width and avatar_height values are never saved in the database and stay empty (NULL).

When inputing values manually into the database, the avatar_width and avatar_height variables work as they should in a template.

Problem #2: when deleting my avatar via the control panel, the avatar files on the server and the avatar_width and avatar_height columns in the database are not being deleted and still contain the values I added manually.

After my tests, the avatar directory has the following files in it:
avatar_1_1.png
avatar_1_2.png
avatar_1_3.png
avatar_1_4.png
avatar_1.gif
avatar_1.jpeg
avatar_1.png

And the "images/avatars/_thumbs" sub-directory has these files:
Yvan256.gif
Yvan256.jpeg
Yvan256.jpg
Yvan256.png

It would be nice if the system could remove the associated custom/uploaded avatar files from the server when a user's avatar is removed via the control panel.

Please note that I only tried these steps with myself (Super Admin).

System:
EE version 5.1.1
PHP version 7.0.33

get_pair_field() matches incorrectly if multiple pair fields have the same prefix

Description of the problem
I ran into this using Bloqs, but should be applicable to any module tag that contains var tag pairs. If I have two blocks that start with the same name, e.g. {slideshow}{/slideshow} and {slide}{/slide}, the regex in the method seems to match both, thus returning two items in the array, not one. For example the Bloqs code is making the following call:

$sections = $this->EE->api_channel_fields->get_pair_field($tagdata, $context->getShortname(), '');

In this case the shortname is either slideshow or slide, and when both tag pairs are in the template, it returns a match for both, thus the $sections variable has an array containing 2 keys, each key contains an array of the 4 parts of the regex match. If I add a 3rd block with the name of {slider}{/slider}, $sections will then contain 3 matches. This causes some major rendering issues, mostly duplicating output, but in Bloqs’ nesting feature, it bombs out completely b/c the expected result does not match what get_pair_field is actually returning.

How To Reproduce
Test with Bloqs, or create a module/plugin tag that contains multiple child tag pairs with the same prefix.

Environment Details:

  • Version: 4.3.4
  • PHP Version 7.1
  • OS: Ubuntu
  • Web Server: Apache

Additional context
Originally reported https://expressionengine.com/support/bugs/23706/bug-in-get_pair_field-method

Incorrect usage of insert_id()

Description of the problem
While testing my Publisher integration with Fluid fields, I had to make a similar call to ->insert_id(), but, in Fluid's ft file, it's trying to call it on an ee('db') result, which returns true, not a query object. E.g. This does not appear to work:

$query = ee('db')->set($values)->insert($field_table_name);
$id = $query->insert_id();

I think it needs to be this instead:

ee('db')->set($values)->insert($field_table_name);
$id = ee()->db->insert_id();

Hidden toggle fields throw MySQL error on save when strict mode is on.

If a toggle field is hidden via layouts, it's trying to insert null into the table and throwing a mysql error in strict mode:

Integrity constraint violation: 1048 Column 'field_id_1' cannot be null:
INSERT INTO `exp_channel_data_field_553` (`field_id_1`, `field_ft_1`, `entry_id`) VALUES (NULL, 'xhtml', '7099')

Files, absolute_count vs limit

The "absolute_count" variable does not seem to work if you specify the "limit" parameter.
If you specify anything as a limit, it's added as a starting point for absolute_count.

Ex:
{exp:file:entries limit="100"}
{absolute_count} (will display 101, 102, 103, etc)
{/exp:file:entries}

Deleting Channel Status doesn't clear button action text

Description of the problem
If you delete a Channel Status from the Channel Manager > Channel > Statuses page, the modal to confirm delete does not reset the "Removing..." action text when the remove action completes. When you go to delete another status, the modal appears but "Removing..." is still visible. Does NOT affect the functionality. Clicking the "Removing..." button still deletes the status properly.

How To Reproduce
Steps to reproduce the behavior:

  1. Go to Channel Manager > Channel > Statuses
  2. Click Delete Status (trash can icon)
  3. Click Confirm and Remove
  4. Click Delete Status for another status

Screenshots / Videos / Template Code
confirm_and_remove
removing

Environment Details:

  • Version: 5.0.1
  • PHP Version 7.2
  • MySQL Version 5.7
  • OS: macOS
  • Web Server: nginx

Relationship field should have a min/max option

It would be nice if the relationship field could be set to have a minimum and/or maximum number of selections. That way, you could cap how many choices are made -- this would be useful for enforcing editorial control on slideshows, sidebars, related articles, etc. etc.

Describe the solution you'd like
This would require error checking in the entry form, modification to the javascript, and changes to the field settings. But it's not a huge change, it doesn't change any underlying data structures, etc.

Describe alternatives you've considered
To get this effect currently, I've used grid limited to 5 rows, with a relationship field in it. But that's kind hack-y and creates complicated template code and additional load time on the entry page, as well as it being annoying to the site admins. You can use multiple relationship fields, in some cases, to enforce a limit, but that's not always possible, and it makes re-ordering a pain. You can instruct people not to choose too many options (but they never listen).

Teachability, Documentation, Adoption, Migration Strategy
I don't think this will require much documentation change, if any. It's not going to be confusing for users or site builders, it's just a nice additional sub-feature.

Wrong redirect link after password reset

Description of Problem:
After a member resets their password, the message page reads:

Password Successfully Changed.
You have successfully changed your password. Please login using your new password.
Click here if you are not redirected automatically

In Chrome, Firefox, and Opera for mac, and in Chrome for iOS:
The "Click here" link and the auto-redirect both successfully point to the page where the user originally clicked the "Forgot Password" link. In my case this is {site_url}/index.php/site/login

In Safari for mac, and Safari and iCab on iOS:
The "Click here" link and auto-redirect point to {site_url}/index.php/member/reset_password. This triggers the error page:

The form you submitted contained the following errors
The password reset token does not appear to be valid. Please check the link you followed.
Return to Previous Page

Clicking "Return to Previous Page" goes back to the "Password Successfully Changed" page, where the "Click here" link still points to {site_url}/index.php/member/reset_password, which triggers the error page again, putting the user in a confusing feedback loop.

Environment Details:
EE Version: 5.0.1
PHP Version: 7.2
MySQL Version: 5.5
OS: macOS 10.13.6 and iOS 12.1
Web Server: Apache

Auto-updater not accounting for database table name prefix

Description of the problem
I am trying to run the auto updater from /admin.php to update from 4.3.6 to 5.1.0 and the updater cannot complete the database backup. It seems to be looking for default tables names but not considering a prefix used during the installation process.

How To Reproduce

  1. Run the auto-updater whilst using a database table prefix
  2. See error below

Error Messages
image

Environment Details:

  • Version: 4.3.6
  • PHP Version 7.1
  • OS: Linux

Possible Solution
I assume it's a simple fix of pulling the database prefix stored in the settings and if present, include in the SQL update code.

Profile Page Warning

When a click some member's profile page i get this warning.

error


74	ee()->view->header = array(
75			'title' => sprintf(lang('profile_header'),
76				htmlentities($this->member->username, ENT_QUOTES, 'UTF-8'),
77				htmlentities($this->member->email, ENT_QUOTES, 'UTF-8'),
78				$this->member->ip_address
79			)
80		);

URL_TITLE Not Generated when user try to re-submit the form, EE 5.0.0

I have faced a problem in channel form.
I will tell you the scenario that led me to the problem and the problem message.

Scenario
I have placed a form for users, the url_title will be generated automatically by putting the parameter (unique_url_title="yes").
If the user inputs all the data, the form will be submitted successfully.
But if the user forgets to input some required data, the user will re-input the missed data and resubmit the form, the form won't submit successfully and EE showed an error message (url_title is required field)

Error Message
url_title is required input.

I have used EE3 and EE4 and both of them worked correctly in a familiar scenario.

Installer complains that user theme directory is not writable

When leaving the "Install default theme" checkbox unchecked the installer still complains about the user theme directory not being writable:

Image

The installer is not going to write anything to this directory in this case, so I think one should be able to install EE w/o having it fail.

If this directory being writable is indeed a requirement for the installation of EE it would be better if this was verified at an earlier stage (where the config.php / database.php checks are).

Saving field changes throws wobbly

Saving changes to existing fields results in following "E_Warnings". I happened to be adding a field within a grid. The changes do appear to get saved but I get the following warnings:

"Notice

Undefined offset: 1

ee/legacy/fieldtypes/OptionFieldtype.php, line 114

Severity: E_NOTICE
Warning

Cannot modify header information - headers already sent by (output started at ee/legacy/core/Exceptions.php:120)

ee/legacy/core/Input.php, line 238

Severity: E_WARNING
Warning

Cannot modify header information - headers already sent by (output started at ee/legacy/core/Exceptions.php:120)

ee/legacy/libraries/Functions.php, line 393

Severity: E_WARNING"

Entry `url_title` does not match CP/URL `urlSlug` output

Description of the problem
The Channel Entry URL Title only needs to pass the validateUrlTitle method and then accepts whatever the user enters so URLs like ThIs_is.-Cool----....WHAT save exactly like that whereas the urlSlug() method returns this_is-cool-....what.

The real-world use case for this is saving a person's name like J. P. Morgan which creates an EE URL Title of j.-p.-morgan but the urlSlug regex specifically forbids the "dot-hypen" or "dot-underscore" (depending on what separator setting you have) so calling urlSlug results in j-p-morgan.

How To Reproduce
Steps to reproduce the behavior:

  1. Create an entry with a Title of "J. P. Morgan"
  2. Save Entry
  3. Notice the URL Title violates the dot-[separator] rule

Environment Details:

  • Version: 5.0.1
  • PHP Version: 7.1
  • MySQL Version: 5.7
  • OS: macOS (Mojave)
  • Web Server: nginx

Possible Solution
Pass the URL Title through the CP/URL service on save (and for the JS generation).

Ability to restrict category assignment to one category in any one group

Is your feature request related to a problem? Please describe.
Sometimes you only want authors to be able to select one category in a category group. For instance if I have a category group that describes colours where only one will ever be applicable.

Describe the solution you'd like
An option in Category group settings to specify if category selection can be limited to one item (SELECT element), or whether multiples are allowed (CHECKBOXES as now).

Describe alternatives you've considered
No alternatives exist for EE4/5 that I know of. There have been some 3rd party addons to do this but I believe it should be native.

Teachability, Documentation, Adoption, Migration Strategy
Uses existing docs, tags etc. Not sure how this would affect a current category group that has mutiples already assigned, presumably it would simply use the first available.

  • I am capable and would like to work on implementation of this feature if it is considered.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.