';
22 | data.forEach(function (version) {
23 | var node = document.createElement('li');
24 | var link = document.createElement('a');
25 | link.href = version.url;
26 | link.innerHTML = version.label;
27 | node.appendChild(link);
28 | versionsDom.appendChild(node);
29 | });
30 | }
31 | });
32 | }
33 |
--------------------------------------------------------------------------------
/_themes/akeneo/theme.conf:
--------------------------------------------------------------------------------
1 | [theme]
2 | inherit = basic
3 | stylesheet = css/theme.css
4 |
5 | [options]
6 |
--------------------------------------------------------------------------------
/akeneo_overview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/akeneo_overview.png
--------------------------------------------------------------------------------
/cloud_edition/common/images/akeneo_illustration_ziggy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/cloud_edition/common/images/akeneo_illustration_ziggy.png
--------------------------------------------------------------------------------
/cloud_edition/flexibility_mode/images/flexibility_mode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/cloud_edition/flexibility_mode/images/flexibility_mode.png
--------------------------------------------------------------------------------
/cloud_edition/index.rst:
--------------------------------------------------------------------------------
1 | Akeneo Cloud Edition
2 | ====================
3 |
4 | .. toctree::
5 | :maxdepth: 2
6 |
7 | flexibility_mode/index
8 | serenity_mode/index
9 |
--------------------------------------------------------------------------------
/cloud_edition/serenity_mode/index.rst:
--------------------------------------------------------------------------------
1 | Serenity
2 | =============
3 |
4 | **Serenity** mode is a Software as a service (SaaS) and allows users to benefit from all upgrades and patches as they are released, and **automatically**.
5 |
6 | .. note::
7 |
8 | Please note that **no code customization** is possible on Serenity instances. The usage of the API is encouraged to connect with the PIM.
9 |
10 | Types of environments
11 | ---------------------
12 |
13 | .. note::
14 |
15 | Learn how to request for a **new environment** on the `Help Center `_.
16 |
17 | **1. Production**
18 |
19 | - **my-project**.cloud.akeneo.com
20 | - **can be restored** to an anterior date
21 |
22 | **2. Sandbox**
23 |
24 | - **my-project-staging**.cloud.akeneo.com
25 | - **no data recovery**
26 |
27 | Updates and migrations
28 | ----------------------
29 |
30 | Updates can include **patches** and **new features**. We try our best to make them as transparent as possible to end users and are usually applied during time slots of maintenance.
31 |
32 | .. _`A faster way to benefit from Akeneo!`: https://www.akeneo.com/blog/a-faster-way-to-benefit-from-akeneo/
33 |
--------------------------------------------------------------------------------
/contribute_to_pim/create_connector.rst:
--------------------------------------------------------------------------------
1 | How to contribute to a Connector?
2 | =================================
3 |
4 | We're happy to connect the PIM to any third-party system!
5 |
6 | * Begin by checking on the `Akeneo App Store`_ that nobody published a connector for a 3rd party system
7 | * Create your connector :doc:`/import_and_export_data/guides/create-connector`
8 | * Reference it on the `Akeneo App Store`_
9 |
10 | .. _Akeneo App Store: https://apps.akeneo.com/
11 |
--------------------------------------------------------------------------------
/contribute_to_pim/crowdin-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/contribute_to_pim/crowdin-logo.png
--------------------------------------------------------------------------------
/contribute_to_pim/feature_request.rst.inc:
--------------------------------------------------------------------------------
1 | Submit a Feature Request
2 | ------------------------
3 |
4 | * You can suggest any feature here by using our `Helpdesk `_ , section Akeneo PIM > I want to suggest an improvement or a new feature
5 | * After discussion, this feature could be included in our roadmap.
6 |
--------------------------------------------------------------------------------
/contribute_to_pim/index.rst:
--------------------------------------------------------------------------------
1 | Contribute to Akeneo PIM
2 | ========================
3 |
4 | We gladly welcome any kind of contribution on Akeneo PIM!
5 |
6 | .. toctree::
7 | :maxdepth: 1
8 |
9 | report
10 | translate
11 | documentation
12 | create_connector
13 | contribution_guide
14 | front
15 | tests/index
16 |
--------------------------------------------------------------------------------
/contribute_to_pim/nelson.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/contribute_to_pim/nelson.png
--------------------------------------------------------------------------------
/contribute_to_pim/report.rst:
--------------------------------------------------------------------------------
1 | How to report an issue?
2 | =======================
3 |
4 | .. include:: ./report_bug.rst.inc
5 |
6 | .. include:: ./feature_request.rst.inc
7 |
8 | .. include:: ./tech_enhancement.rst.inc
9 |
--------------------------------------------------------------------------------
/contribute_to_pim/report_bug.rst.inc:
--------------------------------------------------------------------------------
1 | .. _report_bug:
2 |
3 | Report a Bug
4 | ------------
5 |
6 | **Prerequisite**
7 |
8 | .. warning::
9 |
10 | As a prerequisite, make sure you completed all the steps described in our :doc:`/maintain_pim/first_aid_kit/index`.
11 |
12 | **Community Edition**
13 |
14 | * Check if this issue is `already known `_
15 | * Clone `the development repository `_ and checkout the branch of the version you want to test
16 | * Reproduce the bug
17 | * Gather as much information as possible by following our :doc:`/maintain_pim/bug_qualification/index` guide
18 | * Create a new `GitHub `_ issue which:
19 |
20 | * Clearly describes the issue in its title
21 | * Describes the steps to reproduce the bug
22 | * Provides the PIM system information available under System > System information
23 | * Provides as much information as possible on your environment (OS, PHP version, browser)
24 |
25 | **Enterprise Edition**
26 |
27 | * Gather as much information as possible by following our :doc:`/maintain_pim/bug_qualification/index` guide
28 | * Raise an issue by using your `Service Desk Account `_
29 | * Attach the PIM system information file to your request (it is available under System > System information > TXT)
30 | * Submit your request on our Helpdesk
31 |
--------------------------------------------------------------------------------
/contribute_to_pim/tech_enhancement.rst.inc:
--------------------------------------------------------------------------------
1 | Suggest a Technical Improvement
2 | -------------------------------
3 |
4 | * Check if this improvement is already discussed: https://github.com/akeneo/pim-community-dev/labels/tech-improvement
5 | * Create a new Github issue that:
6 |
7 | * clearly describes the improvement
8 | * write some sample code
9 |
--------------------------------------------------------------------------------
/contribute_to_pim/tests/images/PermissionsContext.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/contribute_to_pim/tests/images/PermissionsContext.png
--------------------------------------------------------------------------------
/contribute_to_pim/tests/images/decorator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/contribute_to_pim/tests/images/decorator.png
--------------------------------------------------------------------------------
/contribute_to_pim/tests/images/edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/contribute_to_pim/tests/images/edit.png
--------------------------------------------------------------------------------
/contribute_to_pim/tests/images/element.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/contribute_to_pim/tests/images/element.jpg
--------------------------------------------------------------------------------
/contribute_to_pim/tests/index.rst:
--------------------------------------------------------------------------------
1 | How behavior tests are architectured in the PIM?
2 | ================================================
3 |
4 |
5 | The PIM comes with a set of Behat scenarios: https://github.com/akeneo/pim-community-dev/tree/master/tests/legacy/features
6 |
7 | .. warning::
8 |
9 | Please, note that reading `Behat documentation `_ is a prerequisite for
10 | the following documentation.
11 |
12 | .. toctree::
13 |
14 | establishing_decorator_pattern
15 | spin
16 |
--------------------------------------------------------------------------------
/cve_2022_46157.rst:
--------------------------------------------------------------------------------
1 | About CVE-2022-46157
2 | ==============================================================
3 |
4 |
5 | Security Update
6 | -----------------
7 |
8 | A major vulnerability has been identified during our annual pentest. As it also applies to our pim-community project, we decided to register a CVE entry `(CVE-2022-46157)
9 | `_. Please find below the details of the remediation of the vulnerability according to your PIM subscription and/or version.
10 |
11 | Serenity (SaaS) user
12 | **********************
13 |
14 | If you are an Akeneo SaaS user (i.e, Serenity), the vulnerability has already been patched.
15 |
16 | Flexibility (PaaS) user
17 | ***********************
18 |
19 | | If you are an Akeneo PaaS (i.e, Flexibility) user, we applied the patch to v5 and v6 as defined on our `support policy `_.
20 | | If you are an Akeneo PaaS user on lower versions, we **strongly advise** you to update your Flexibility versions as these versions will not be patched.
21 |
22 | On-premise user
23 | **********************
24 |
25 | We **strongly advise** you to apply our patch available `here
26 | `_ to your Apache server configuration according your operating system.
27 |
28 |
29 | Additional information
30 | **********************
31 |
32 | Feel free to contact your Akeneo Customer Success Manager if you have any question or need additional information on this subject.
33 |
--------------------------------------------------------------------------------
/docker-compose.override.yml.dist:
--------------------------------------------------------------------------------
1 | version: '3'
2 |
3 | services:
4 | apache:
5 | ports:
6 | - '8080:80'
7 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3'
2 |
3 | services:
4 | apache:
5 | image: httpd:2.4
6 | volumes:
7 | - ./pim-docs-build/:/usr/local/apache2/htdocs/
8 | working_dir: /usr/local/apache2/htdocs/
9 |
--------------------------------------------------------------------------------
/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/favicon.ico
--------------------------------------------------------------------------------
/import_and_export_data/batch-item-step.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/import_and_export_data/batch-item-step.png
--------------------------------------------------------------------------------
/import_and_export_data/batch-main-concepts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/import_and_export_data/batch-main-concepts.png
--------------------------------------------------------------------------------
/import_and_export_data/connectors.rst:
--------------------------------------------------------------------------------
1 | Akeneo Connectors
2 | =================
3 |
4 | CSV Connector
5 | -------------
6 |
7 | Akeneo CSV Connector supports reading and writing CSV files. The connector uses an open source library called openspout (https://github.com/openspout/openspout) to read and create CSV files.
8 |
9 | XLSX Connector
10 | --------------
11 |
12 | Akeneo XLSX Connector supports reading and writing XLSX files. The connector uses an open source library called openspout (https://github.com/openspout/openspout) to read and create XLSX files.
13 |
14 | The connector supports the following Excel versions:
15 |
16 | - Windows Excel 2016
17 | - Windows Excel 2013
18 | - Windows Excel 2010
19 | - Windows Excel 2007
20 | - Excel 16 (Office 2016 for OS X)
21 | - Excel 14 (Office 2011 for OS X)
22 |
23 | YAML Connector
24 | --------------
25 |
26 | Akeneo YAML Connector supports reading and writing YAML files. The connector uses an open source component called symfony/yaml (https://github.com/symfony/yaml) to read and create YAML files.
27 |
28 | Customizing connectors
29 | ----------------------
30 |
31 | It is possible to customize these connectors to import and export numerous PIM related objects:
32 |
33 | - Check how to import PIM objects using the Akeneo Connectors (cf :doc:`/import_and_export_data/simple-import`)
34 | - In order to understand how the Akeneo CSV Connector is working for products, please refer to chapters about product import (cf :doc:`/import_and_export_data/product-import`) and product export (cf :doc:`/import_and_export_data/product-export`)
35 |
--------------------------------------------------------------------------------
/import_and_export_data/formats.rst:
--------------------------------------------------------------------------------
1 | Formats
2 | =======
3 |
4 | Headers for localized and/or scopable entities follow the same generic rule:
5 |
6 | .. toctree::
7 | :titlesonly:
8 | :maxdepth: 1
9 |
10 | formats/localized-labels
11 | formats/scopable-labels
12 |
13 | CSV formats used for import/export profiles in a default Akeneo PIM installation:
14 |
15 | .. toctree::
16 | :titlesonly:
17 | :maxdepth: 1
18 |
19 | formats/association_type
20 | formats/attribute
21 | formats/category
22 | formats/family
23 | formats/family_variant
24 | formats/group
25 | formats/option
26 | formats/product
27 | formats/product_model
28 |
29 | .. note::
30 |
31 | XLSX format is also available. Data remain the same.
32 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/association_type.rst:
--------------------------------------------------------------------------------
1 | Association types data structure
2 | ================================
3 |
4 | The import/export file follows this data structure:
5 |
6 | - **code** (required): the association type code
7 | - **label-**: each label in a dedicated column (See :doc:`localized-labels`)
8 | - **is_two_way**: When true, the association is a two-way association
9 | - **is_quantified**: When true, the association is a quantified association
10 |
11 | .. note::
12 |
13 | File example:
14 |
15 | .. literalinclude:: examples/association_type.csv
16 |
17 | Be aware that an association type will be visible in an product export file only if you have products or groups of products using this association type.
18 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/attribute.rst:
--------------------------------------------------------------------------------
1 | Attribute data structure
2 | ========================
3 |
4 | Data structure
5 | --------------
6 | The import/export file follows this data structure:
7 |
8 | .. csv-table::
9 | :header: "Property name"; "Default value"; "Required for"; "Special validation rules"
10 | :file: examples/attribute_properties.csv
11 | :delim: ;
12 |
13 | .. note::
14 |
15 | File example:
16 |
17 | .. literalinclude:: examples/attribute.csv
18 |
19 |
20 | Attribute types
21 | ---------------
22 |
23 | .. csv-table::
24 | :header: "Attribute type"; "Description"
25 | :file: examples/attribute_type.csv
26 | :delim: ;
27 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/category.rst:
--------------------------------------------------------------------------------
1 | Category data structure
2 | =======================
3 |
4 | The import/export file follows this data structure:
5 |
6 | - **code** (required): the category code
7 | - **parent**: code of the parent category. Blank if it is a root category.
8 | - **label-**: each label in a dedicated column (See :doc:`localized-labels`)
9 |
10 | .. note::
11 |
12 | File example:
13 |
14 | .. literalinclude:: examples/category.csv
15 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/examples/association_type.csv:
--------------------------------------------------------------------------------
1 | code;is_two_way;is_quantified;label-en_US;label-fr_FR
2 | X_SELL;0;0;"Cross sell";"Vente croisée"
3 | UPSELL;0;0;Upsell;"Vente incitative"
4 | SUBSTITUTION;0;0;Substitution;Remplacement
5 | PACK;0;0;Pack;Pack
6 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/examples/attribute.csv:
--------------------------------------------------------------------------------
1 | type;code;label-en_US;label-fr_FR;group;unique;useable_as_grid_filter;allowed_extensions;metric_family;default_metric_unit;reference_data_name;localizable;scopable;decimals_allowed;negative_allowed
2 | pim_catalog_identifier;sku;SKU;SKU;marketing;1;1;;;;;0;0;;
3 | pim_catalog_text;name;Name;Nom;marketing;0;1;;;;;0;0;;
4 | pim_catalog_textarea;description;Description;Description;marketing;0;1;;;;;1;1;;
5 | pim_catalog_number;optical_zoom;Optical zoom;Zoom optique;technical;0;1;;;;;0;0;0;0
6 | pim_catalog_boolean;image_stabilizer;Image stabilizer;Stabilisateur d'image;technical;0;1;;;;;0;0;;
7 | pim_catalog_simpleselect;sensor_type;Sensor type;Type de capteur;technical;0;1;;;;;0;0;;
8 | pim_catalog_multiselect;multifunctional_functions;All-in-one functions;Fonctions tout-en-un;technical;0;1;;;;;0;0;;
9 | pim_catalog_date;release_date;Release date;Date de sortie;marketing;0;1;;;;;0;1;;
10 | pim_catalog_metric;weight;Weight;Poids;technical;0;1;;Weight;KILOGRAM;;0;0;1;0
11 | pim_catalog_price_collection;price;Price;Prix;marketing;0;1;;;;;0;0;1;
12 | pim_catalog_image;picture;Picture;Photographie;media;0;1;jpg,jpeg,gif;;;;0;0;;
13 | pim_catalog_file;pdf_description;PDF description;Description PDF;media;0;1;pdf;;;;0;0;;
14 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/examples/attribute_properties.csv:
--------------------------------------------------------------------------------
1 | code;;all types;"| Must be unique
2 | | Must only contain letters, numbers and underscores
3 | | Must be less than 255 characters long
4 | | Cannot be one of: id, associationTypes, categories, categoryId, completeness, enabled, family, groups, associations, products, scope, treeId, values, category, attributes, parent, label, entity_type
5 | | Cannot end with “_products” or “_groups”"
6 | type;;all types;Must be a valid type (see table below)
7 | label-;;;
8 | guidelines-;;;"| Can contain line breaks
9 | | Cannot be more than 500 characters"
10 | group;;all types;Must be a valid attribute group code
11 | unique;0;;
12 | useable_as_grid_filter;0;;
13 | allowed_extensions;;;"| Must be a subset of extensions set in the parameters `pim_catalog_image_allowed_extensions` (for images)
14 | | or `pim_catalog_file_allowed_extensions` (for files)"
15 | auto_option_sorting;;simple select,multi select;
16 | metric_family;;metric;Must be a valid metric family
17 | default_metric_unit;;metric;Must be a valid metric unit and must be part of the specified metric_family
18 | available_locales;;;Must be a list of valid and activated locales
19 | max_characters;;;"| Must be a positive integer
20 | | Cannot be more than 255 for texts, or 65535 for textareas"
21 | validation_rule;;;Must be one of: email, url, regexp
22 | validation_regexp;;;Must be a valid PERL regular expression
23 | wysiwyg_enabled;;;
24 | number_min;;;Must be lower than number_max
25 | number_max;;;Must be greater than number_min
26 | decimals_allowed;;number, metric, price collection;
27 | default_value;;all types;
28 | negative_allowed;;number, metric;
29 | date_min;;;Must be lower than date_max
30 | date_max;;;Must be greater than date_min
31 | max_file_size;;;Must be between 0.01 and 9999.99 (in MB)
32 | minimum_input_length;;;
33 | sort_order;0;;Must be a positive integer
34 | localizable;0;;Must be false if the attribute is unique
35 | reference_data_name;;reference data,multi reference data,asset,reference entity
36 | scopable;0;;Must be false if the attribute is unique
37 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/examples/attribute_type.csv:
--------------------------------------------------------------------------------
1 | pim_catalog_identifier;It is the unique product's identifier. The catalog can contain only one.
2 | pim_catalog_text;Text
3 | pim_catalog_textarea;Long text
4 | pim_catalog_boolean;Yes/No
5 | pim_catalog_number;Number (integer and float)
6 | pim_catalog_simpleselect;Simple choice list
7 | pim_catalog_multiselect;Multiple choice list
8 | pim_catalog_date;Date
9 | pim_catalog_metric;Metric. It consists of a value and a unit (a weight for example).
10 | pim_catalog_price_collection;Collection of prices. Each price contains a value and a currency.
11 | pim_catalog_image;Image
12 | pim_catalog_file;File
13 | pim_catalog_asset_collection;Collection of assets (Only available in EE)
14 | pim_catalog_table;A multi dimensional attribute (Only available in EE)
15 | akeneo_reference_entity;Link to a record (Only available in EE)
16 | akeneo_reference_entity_collection;Collection of records (Only available in EE)
17 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/examples/category.csv:
--------------------------------------------------------------------------------
1 | code;parent;label-de_DE;label-en_US;label-fr_FR
2 | master;;Hauptkatalog;"Master catalog";"Catalogue principal"
3 | tvs_projectors;master;"TVs und projectoren";"TVs and projectors";"Téléviseurs et projecteurs"
4 | pc_monitors;tvs_projectors;"PC Monitoren";"PC Monitors";"Moniteurs PC"
5 | led_tvs;tvs_projectors;"TVs LED";"LED TVs";"Télévisions LED"
6 | cameras;master;Cameras;Cameras;Caméras
7 | digital_cameras;cameras;"Digitale Kameras";"Digital cameras";"Caméras digitales"
8 | camcorders;cameras;"Digitale Videokameras";Camcorders;"Caméscopes numériques"
9 | webcams;cameras;Webcams;Webcams;Webcams
10 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/examples/family.csv:
--------------------------------------------------------------------------------
1 | code;label-en_US;label-fr_FR;attributes;attribute_as_label;requirements-ecommerce;requirements-mobile;requirements-print
2 | mugs;Mugs;Chopes/Mugs;sku,name,description,price,picture,container_material,main_color;name;sku,name,description,main_color,price,container_material;sku,name,description,main_color,price;sku,name,description,price
3 | camcorders;Camcorders;Caméscopes numériques;sku,name,description,weight,power_requirements,sensor_type,total_megapixels,optical_zoom,image_stabilizer,release_date,price,picture;name;sku,name,description,price,sensor_type,total_megapixels;sku,name,description,price,sensor_type,total_megapixels;sku,name,description,price,sensor_type,total_megapixels
4 | tshirts;;;sku,name,description,price,picture,main_color,secondary_color,clothing_size,tshirt_materials,tshirt_style;sku;sku,name,description,main_color,secondary_color,tshirt_materials,clothing_size;sku,name,description,main_color,secondary_color,price,clothing_size;sku,name,description,price
5 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/examples/family_variant.csv:
--------------------------------------------------------------------------------
1 | code;family;label-de_DE;label-en_US;label-fr_FR;variant-axes_1;variant-axes_2;variant-attributes_1;variant-attributes_2
2 | clothing_color_size;clothing;Kleidung nach Farbe und Größe;Clothing by color and size;Vêtements par couleur et taille;color;size;variation_name,variation_image,composition,color,material;sku,weight,size,ean
3 | shoes_size;shoes;Schuhe nach Größe;Shoes by size;Chaussures par taille;eu_shoes_size;;sku,weight,size,eu_shoes_size,ean;
4 | clothing_colorsize;clothing;Kleidung nach Farbe/Größe;Clothing by color/size;Vêtements par couleur/taille;color,size;;sku,variation_name,variation_image,composition,color,size,ean;
5 | clothing_size;clothing;Kleidung nach Größe;Clothing by size;Vêtements par taille;size;;sku,weight,size,ean;
6 | clothing_color;clothing;Kleidung nach Farbe;Clothing by color;Vêtements par couleur;color;;sku,variation_name,variation_image,composition,color,ean;
7 | accessories_size;accessories;Accessories by size;Accessories by size;Accessoires par taille;size;;sku,weight,size,ean;
8 | shoes_size_color;shoes;Schuhe nach Größe und Farbe;Shoes by size and color;Chaussures par taille et couleur;size;color;weight,variation_name,size,eu_shoes_size;sku,image,variation_image,composition,color,ean
9 | clothing_material_size;clothing;Clothing by material and size;Clothing by material and size;Vêtements par matière et taille;material;size;variation_name,variation_image,composition,color,material;sku,weight,size,ean
10 | tv;led_tvs;LED TV;LED TV;LED TV;display_diagonal;;sku,price,weight,display_diagonal,picture;
11 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/examples/group.csv:
--------------------------------------------------------------------------------
1 | code;type;label-en_US;label-fr_FR
2 | promotion;RELATED;promotion;promotion
3 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/examples/option.csv:
--------------------------------------------------------------------------------
1 | attribute;code;sort_order;label-en_US;label-fr_FR
2 | maximum_print_size;210_x_1219_mm;1;210 x 1219 mm;210 x 1219 mm
3 | maximum_print_size;215_x_355_mm;2;215 x 355 mm;215 x 355 mm
4 | sensor_type;ccd;1;CCD;CCD
5 | sensor_type;cmos;2;CMOS;CMOS
6 | camera_type;bridge;1;Bridge;Bridge
7 | camera_type;compact;2;Compact;Compact
8 | main_color;white;1;White;Blanc
9 | main_color;black;2;Black;Noir
10 | main_color;grey;3;Grey;Gris
11 | main_color;blue;4;Blue;Bleu
12 | main_color;purple;5;Purple;Violet
13 | main_color;orange;6;Orange;Orange
14 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/examples/product_model.csv:
--------------------------------------------------------------------------------
1 | code;family_variant;parent;categories;brand;care_instructions;collection;color;composition;description-de_DE-ecommerce;description-de_DE-mobile;description-de_DE-print;description-en_US-ecommerce;description-en_US-mobile;description-en_US-print;description-fr_FR-ecommerce;description-fr_FR-mobile;description-fr_FR-print;erp_name-de_DE;erp_name-en_US;erp_name-fr_FR;eu_shoes_size;image;keywords-de_DE;keywords-en_US;keywords-fr_FR;material;meta_description-de_DE;meta_description-en_US;meta_description-fr_FR;meta_title-de_DE;meta_title-en_US;meta_title-fr_FR;name;notice;power_requirements;price-EUR;price-USD;release_date-ecommerce;release_date-mobile;release_date-print;size;sole_composition;supplier;top_composition;variation_image;variation_name-de_DE;variation_name-en_US;variation_name-fr_FR;wash_temperature;weight;weight-unit
2 | amor;clothing_colorsize;;master_men_blazers,supplier_zaro;;;summer_2016;;;;;;Heritage jacket navy blue tweed suit with single breasted 2 button. 53% wool, 22% polyester, 18% acrylic, 5% nylon, 1% cotton, 1% viscose. Dry Cleaning uniquement.Le mannequin measuring 1m85 and wears UK size 40, size 50 FR;;;;;;;Amor;;;;;;;;;;;;;;Heritage jacket navy;;;999.00;;;;;;;zaro;;;;;;800;;
3 | brooksblue;shoes_size;;master_men_shoes;;;summer_2017;blue;;;;;Brooks blue;;;;;;;Brooks blue;;;;;;;;;;;;;;Brooks blue;;;;;;;;;;;;;;Brooks blue;;;;
4 | brookspink;shoes_size;;master_women_shoes;;;summer_2017;pink;;;;;Brooks pink;;;;;;;Brooks pink;;;;;;;;;;;;;;Brooks pink;;;;;;;;;;;;;;Brooks pink;;;;
5 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/examples/variant_group.csv:
--------------------------------------------------------------------------------
1 | code;axis;label-en_US;label-fr_FR;type
2 | akeneo_mug;main_color,secondary_color;Akeneo Mugs;Mugs Akeneo;VARIANT
3 | oro_mug;container_material,main_color,secondary_color;Oro Mugs;Mugs Oro;VARIANT
4 | akeneo_tshirt;clothing_size,main_color,secondary_color;Akeneo T-Shirts;T-Shirts Akeneo;VARIANT
5 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/family.rst:
--------------------------------------------------------------------------------
1 | Family data structure
2 | =====================
3 |
4 | The import/export file follows this data structure:
5 |
6 | - **code** (required): the family code
7 | - **attributes**: the list of the family attribute codes separated with a comma
8 | - **label-**: each label in a dedicated column (See :doc:`localized-labels`)
9 | - **attribute_as_label**: the attribute whose value will be used as the product label on product datagrid
10 | - **requirements-**: each requirement in a dedicated column depending on the channel
11 |
12 | .. note::
13 |
14 | File example:
15 |
16 | .. literalinclude:: examples/family.csv
17 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/family_variant.rst:
--------------------------------------------------------------------------------
1 | Family variant data structure
2 | =============================
3 |
4 | The import/export file follows this data structure:
5 |
6 | - **code** (required): the family code
7 | - **family** : the family to which this family variant belongs
8 | - **label-**: each label in a dedicated column (See :doc:`localized-labels`)
9 | - **variant-axes_<1|2>**: the list of the axis variant attributes (5 max)
10 | - **variant-attributes_<1|2>**: the list of the variant attributes for the axis
11 |
12 | .. note::
13 |
14 | File example:
15 |
16 | .. literalinclude:: examples/family_variant.csv
17 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/group.rst:
--------------------------------------------------------------------------------
1 | Group data structure
2 | ====================
3 |
4 | The import/export file follows this data structure:
5 |
6 | - **code** (required): the group code
7 | - **type** (required): the group type
8 | - **label-**: each label in a dedicated column (See :doc:`localized-labels`)
9 |
10 | .. note::
11 |
12 | File example:
13 |
14 | .. literalinclude:: examples/group.csv
15 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/localized-labels.rst:
--------------------------------------------------------------------------------
1 | Localized labels
2 | ================
3 |
4 | All localized labels follow the same rule in the import/export:
5 |
6 | {code}-{locale}
7 |
8 | Thus, a `description` label available in fr_FR, en_US and de_DE will be exported in three columns:
9 |
10 | * description-fr_FR
11 | * description-en_US
12 | * description-de_DE
13 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/option.rst:
--------------------------------------------------------------------------------
1 | Options data structure
2 | ======================
3 |
4 | Options are exported in a CSV file with the following structure:
5 |
6 | - **attribute** (required): the linked attribute code
7 | - **code** (required): the option code
8 | - **sort_order**: Option rank in the dropdown lists
9 | - **label-**: each label in a dedicated column (See :doc:`localized-labels`)
10 |
11 | .. note::
12 |
13 | File example:
14 |
15 | .. literalinclude:: examples/option.csv
16 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/product.rst:
--------------------------------------------------------------------------------
1 | Product data structure
2 | ======================
3 |
4 | Products are exported in a file with the following fields.
5 |
6 | Attributes fields can be one of these:
7 |
8 | - **sku** (required): Identifier attribute (SKU is the common code)
9 | - **clothing_size**: size option code for a simple select option
10 | - **description-en_US-mobile**: localizable and scopable attribute en_US for channel mobile
11 | - **description-fr_FR-mobile**: localizable and scopable attribute fr_FR for channel mobile
12 | - **name-fr_FR**: localizable attribute fr_FR
13 | - **name-en_US**: localizable attribute en_US
14 | - **price-EUR**: numeric price value for Euro
15 | - **price-USD**: numeric price value for US Dollar
16 | - **tshirt_style**: list of option codes for a multi select option list
17 |
18 | Associations fields:
19 |
20 | - **-groups**: groups list for the association type
21 | - **-product_models**: list of product models codes in this association type
22 | - **-products**: list of products identifiers in this association type
23 |
24 | Product properties fields:
25 |
26 | - **categories**: list of category codes
27 | - **enabled**: boolean
28 | - **family**: family code
29 | - **groups**: list of product group codes
30 | - **parent**: product model code
31 |
32 |
33 | .. note::
34 |
35 | File example:
36 |
37 | .. literalinclude:: examples/product.csv
38 |
39 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/product_model.rst:
--------------------------------------------------------------------------------
1 | Product model data structure
2 | ============================
3 |
4 | Product models are exported in a file with the following fields.
5 |
6 | Attributes fields can be one of these:
7 |
8 | - **code** (required): the product model code
9 | - **clothing_size**: size option code for a simple select option
10 | - **description--**: localizable and scopable attribute for channel mobile one row by local_code dans channel
11 | - **name-**: localizable attribute one row by local_code
12 | - **price-**: numeric price value for this currency (example: price-EUR)
13 | - **tshirt_style**: list of option codes for a multi select option list
14 |
15 | Product properties fields:
16 |
17 | - **categories**: list of category codes
18 | - **family_variant** (required): the family variant code
19 | - **parent**: product model code parent
20 |
21 |
22 | .. note::
23 |
24 | File example:
25 |
26 | .. literalinclude:: examples/product_model.csv
27 |
28 |
--------------------------------------------------------------------------------
/import_and_export_data/formats/scopable-labels.rst:
--------------------------------------------------------------------------------
1 | Scopable labels
2 | ===============
3 |
4 | In the case of product export, all localized and/or scopable labels follow the same rule in the import/export:
5 |
6 | {code}-{locale}-{scope}
7 |
8 | Thus, a `foo` label available in ecommerce and print channels and in fr_FR, en_US and de_DE locales
9 | will be exported in six columns:
10 |
11 | * foo-fr_FR-ecommerce
12 | * foo-en_US-ecommerce
13 | * foo-de_DE-ecommerce
14 | * foo-fr_FR-print
15 | * foo-en_US-print
16 | * foo-de_DE-print
17 |
--------------------------------------------------------------------------------
/import_and_export_data/guides/create_connector_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/import_and_export_data/guides/create_connector_edit.png
--------------------------------------------------------------------------------
/import_and_export_data/guides/index.rst:
--------------------------------------------------------------------------------
1 | How to Customize Import / Export
2 | ================================
3 |
4 | This chapter describes how to create and customize connectors to handle imports and exports in your Akeneo PIM project.
5 |
6 | .. toctree::
7 |
8 | create-connector
9 | product-import-from-xml-file
10 | clean-csv-file-during-product-import
11 |
--------------------------------------------------------------------------------
/install_pim/customize_dataset/add_translation_packs.rst:
--------------------------------------------------------------------------------
1 |
2 | How to Add Translation Packs
3 | ============================
4 |
5 | .. _Crowdin: https://crowdin.com/project/akeneo/
6 |
7 |
8 | Akeneo PIM UI is translated through `Crowdin`_ (feel free to :doc:`/contribute_to_pim/translate`!).
9 |
10 | Once a week, new translation keys are pushed to Crowdin, and new validated translations are pulled from our Github repository.
11 |
12 | Akeneo PIM contains translation packs for all languages with more than 80% of translated keys. You can change this behavior by following this guide :doc:`/technical_architecture/localization/change_pim_locale`.
13 |
14 | Once a new minor or patch version has been tagged, the new translations are available.
15 |
16 | You can directly download translation packs from `Crowdin`_.
17 |
18 | The Akeneo PIM archive will contain *Community* and *Enterprise* directories.
19 |
20 | To add a pack you have to:
21 |
22 | * rename the directories by following the rule ``src/Pim/Bundle/EnrichBundle`` to ``PimEnrichBundle``
23 | * move this directory to ``app/Resources/``
24 | * run ``php bin/console oro:translation:dump fr de en --env=prod`` (if you use en, fr and de locales)
25 | * run ``php bin/console cache:clear --env=prod``
26 |
--------------------------------------------------------------------------------
/install_pim/index.rst:
--------------------------------------------------------------------------------
1 | Install Akeneo PIM
2 | ==================
3 |
4 | You can choose either to install Akeneo PIM :doc:`through Docker `
5 | or to perform a classic, :doc:`manual installation ` on a server.
6 |
7 |
8 | .. toctree::
9 | :maxdepth: 1
10 | :hidden:
11 |
12 | docker/installation_docker
13 | manual/index
14 |
15 |
16 | .. toctree::
17 | :maxdepth: 1
18 | :hidden:
19 |
20 | customize_dataset/index
21 | customize_dataset/add_translation_packs
22 |
--------------------------------------------------------------------------------
/install_pim/manual/common_install_initializing_ce_ee.rst.inc:
--------------------------------------------------------------------------------
1 | Initializing Akeneo
2 | -------------------
3 |
4 | .. note::
5 |
6 | Copy the .env into a local .env and make the configuration in the local .env.
7 |
8 |
9 | Configure the PIM via the ``.env`` file:
10 |
11 | .. code-block:: yaml
12 | :linenos:
13 |
14 | APP_ENV=prod
15 | APP_DATABASE_HOST=localhost
16 | APP_DATABASE_PORT=null
17 | APP_DATABASE_NAME=akeneo_pim
18 | APP_DATABASE_USER=akeneo_pim
19 | APP_DATABASE_PASSWORD=akeneo_pim
20 | APP_INDEX_HOSTS='localhost:9200'
21 |
--------------------------------------------------------------------------------
/install_pim/manual/index.rst:
--------------------------------------------------------------------------------
1 | Install Akeneo PIM manually
2 | ===========================
3 |
4 | Here are the guidelines to set everything up according to your operating system:
5 |
6 | .. toctree::
7 | :maxdepth: 1
8 |
9 | system_requirements/system_requirements
10 | system_requirements/manual_system_installation_debian11
11 | system_requirements/system_install_ubuntu_2204
12 |
13 | Once the requirements are fulfilled, you are ready to install Akeneo PIM. Otherwise, check the *Setup System Requirements* pages.
14 |
15 | .. toctree::
16 | :maxdepth: 1
17 |
18 | installation_ce
19 | installation_ee_archive
20 | daemon_queue
21 | security_recommendations
22 | scheduled_job
23 | events_api
24 |
--------------------------------------------------------------------------------
/install_pim/manual/installation_ce.rst:
--------------------------------------------------------------------------------
1 | Installing Akeneo PIM Community Edition (CE)
2 | ============================================
3 |
4 | This document provides step by step instructions to install the PIM with the archive on an environment that fulfills the expected :doc:`system_requirements/system_requirements`.
5 |
6 | Getting Akeneo PIM
7 | ------------------
8 |
9 | You can either use `composer` to create your project:
10 |
11 | .. code-block:: bash
12 | :linenos:
13 |
14 | $ composer create-project akeneo/pim-community-standard /srv/pim "7.0.*@stable"
15 |
16 | or download an archive containing Akeneo PIM and its PHP dependencies: https://download.akeneo.com/pim-community-standard-v6.0-latest-icecat.tar.gz
17 |
18 |
19 | .. include:: ./common_install_initializing_ce_ee.rst.inc
20 |
21 |
22 | Launching the PIM in dev mode
23 | -----------------------------
24 |
25 | .. note::
26 |
27 | All `make` commands must be run from the PIM root directory, either created by the archive or from the composer create project above.
28 |
29 |
30 | You can then launch the install with the following command:
31 |
32 | .. code-block:: bash
33 |
34 | $ NO_DOCKER=true make dev
35 |
36 |
37 | Once this command is finished, the PIM is accessible at http://localhost:8080/
38 |
39 |
40 | Launching the PIM in prod mode
41 | ------------------------------
42 |
43 | .. code-block:: bash
44 |
45 | $ NO_DOCKER=true make prod
46 |
47 | Once this command is finished, the PIM is accessible at http://localhost:8080/
48 |
49 |
50 | .. include:: ./common_install_setup_ce_ee.rst.inc
51 |
--------------------------------------------------------------------------------
/install_pim/manual/installation_ee_archive.rst:
--------------------------------------------------------------------------------
1 | Installing Akeneo PIM Enterprise Edition (EE) with the Archive
2 | ==============================================================
3 |
4 | This document provides step by step instructions to install the PIM with the archive on an environment that fulfills the expected :doc:`system_requirements/system_requirements`.
5 |
6 | By default `Composer `_ uses `packagist.org `_ to retrieve all open source packages and their updates. To download Akeneo PIM Enterprise Edition, you have to get access to our private enterprise edition repository by sending your SSH public key to our system.
7 |
8 | Creating the PIM project
9 | ------------------------
10 |
11 | You need to get a PIM Enterprise Standard archive from the Partners Portal. See `_
12 |
13 | .. code-block:: bash
14 |
15 | $ tar -xvzf pim-enterprise-standard-v7.0.tar.gz
16 | $ cd pim-enterprise-standard/pim-enterprise-standard
17 | $ composer install
18 |
19 | .. include:: ./common_install_initializing_ce_ee.rst.inc
20 |
21 |
22 | Launching the PIM in dev mode
23 | -----------------------------
24 |
25 | .. note::
26 |
27 | All `make` commands must be run from the PIM root directory, either created by the archive or from the composer create project above.
28 |
29 |
30 | To run the PIM EE in dev mode without docker, you will need to change some configuration files:
31 |
32 | .. code-block:: bash
33 |
34 | $ cp vendor/akeneo/pim-enterprise-dev/config/packages/prod_onprem/oneup_flysystem.yml config/packages/dev/
35 | $ cp vendor/akeneo/pim-enterprise-dev/config/packages/prod_onprem/messenger.yml config/packages/dev/
36 |
37 |
38 | You can then launch the install with the following command:
39 |
40 | .. code-block:: bash
41 |
42 | $ NO_DOCKER=true make dev
43 |
44 |
45 | Once this command is finished, the PIM is accessible at http://localhost:8080/
46 |
47 | Launching the PIM in prod mode
48 | ------------------------------
49 |
50 | .. code-block:: bash
51 |
52 | $ NO_DOCKER=true make prod
53 |
54 | Once this command is finished, the PIM is accessible at http://localhost:8080/
55 |
56 |
57 | .. include:: ./common_install_setup_ce_ee.rst.inc
58 |
59 |
--------------------------------------------------------------------------------
/install_pim/manual/papo/add_public_key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/install_pim/manual/papo/add_public_key.png
--------------------------------------------------------------------------------
/install_pim/manual/papo/add_public_key_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/install_pim/manual/papo/add_public_key_2.png
--------------------------------------------------------------------------------
/install_pim/manual/papo/download_archive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/install_pim/manual/papo/download_archive.png
--------------------------------------------------------------------------------
/install_pim/manual/papo/download_button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/install_pim/manual/papo/download_button.png
--------------------------------------------------------------------------------
/install_pim/manual/papo/manage_public_keys.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/install_pim/manual/papo/manage_public_keys.png
--------------------------------------------------------------------------------
/install_pim/manual/papo/permission_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/install_pim/manual/papo/permission_add.png
--------------------------------------------------------------------------------
/install_pim/manual/papo/permission_box.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/install_pim/manual/papo/permission_box.png
--------------------------------------------------------------------------------
/install_pim/manual/partners_portal_archive.rst.inc:
--------------------------------------------------------------------------------
1 | Get PIM Enterprise Edition (EE) archive
2 | ***************************************
3 |
4 | Get the `PIM Enterprise Edition (EE) archive from the Portal `_.
5 |
--------------------------------------------------------------------------------
/install_pim/manual/scheduled_job.rst:
--------------------------------------------------------------------------------
1 | Setting up the job scheduling
2 | ===============================
3 |
4 | Purpose of the cron
5 | --------------------
6 |
7 | Since version 7.0, the user can schedule a job directly on the PIM. It can also define the user used to executed the job.
8 | In order to have this job launched at the right moment you should launch periodically a command that will check if there is a scheduled job to launch.
9 |
10 | To run a command periodically, you can use a cron_:
11 |
12 | .. _cron: https://help.ubuntu.com/community/CronHowto
13 |
14 | First, you need to install it (example in debian/ubuntu based distributions):
15 |
16 | .. code-block:: bash
17 | :linenos:
18 |
19 | apt-get install cron
20 |
21 | Then, you can edit your crontab:
22 |
23 | .. code-block:: bash
24 | :linenos:
25 |
26 | crontab -e
27 |
28 | You can now add a new line at the end of the opened file:
29 |
30 | .. code-block:: bash
31 | :linenos:
32 |
33 | */10 * * * * /home/akeneo/pim/bin/console pim:job-automation:push-scheduled-jobs-to-queue
34 |
35 | With this cron configuration the application will pushed into the job queue every ten minutes the job that need to be launched according to the user configuration
36 |
37 | .. warning::
38 |
39 | One daemon or several daemon processes have to be started to execute the jobs.
40 | Please follow the documentation :doc:`/install_pim/manual/daemon_queue` if it's not the case.
41 |
--------------------------------------------------------------------------------
/install_pim/manual/security_recommendations.rst:
--------------------------------------------------------------------------------
1 | Security best practices
2 | =========================
3 |
4 | Avoid information leakage
5 | #############################
6 |
7 | Rather than directly attacking a server, attackers will first run discovery tasks to steal publicly accessible data off the server.
8 |
9 | There are many types of sensitive information that you should protect from attackers, including system data, configuration, secrets,
10 | intellectual property and an individual's personal (private) information.
11 |
12 | You should never enable these in production environments as it will lead to major security vulnerabilities in your project.
13 | - `adminer `_
14 | - `Php Symfony Profiler `_
15 |
16 | On test/dev/staging/pre-prod environments, if needed only, make sure to ask support team to add with authorized IPs
17 | using Apache.
18 |
19 | .. code-block:: apacheconf
20 | :linenos:
21 |
22 |
23 | Require all denied
24 |
25 |
26 |
27 | Require all denied
28 |
29 |
--------------------------------------------------------------------------------
/install_pim/manual/system_requirements/system_requirements.rst:
--------------------------------------------------------------------------------
1 | System Requirements
2 | ===================
3 |
4 | Here is the list of system requirements that should be fulfilled to be able to install Akeneo PIM.
5 |
6 | .. include:: /install_pim/manual/system_requirements/system_requirements.rst.inc
7 |
--------------------------------------------------------------------------------
/logshell_flexv4.rst:
--------------------------------------------------------------------------------
1 | About Log4Shell Vulnerability for Flexibility users below v5.0
2 | ==============================================================
3 |
4 | Security Update
5 | ***************
6 |
7 | As you are an Akeneo Enterprise Edition PaaS (ie, Flexibility) user in a version prior to v5.0, we took extra precaution to better protect your version. We applied a mitigation on Friday, December the 17th, around 9:30am GMT.
8 |
9 | Your version is now protected against this vulnerability.
10 |
11 | No action is required on your side.
12 |
13 | Feel free to contact your Akeneo Customer Success Manager if you have any question or need additional information on this subject.
14 |
15 | Additional information
16 | **********************
17 |
18 | You may have heard about a global critical vulnerability disclosed Friday, December the 10th, 2021, which has the potential to affect a lot of online services and companies. This vulnerability comes from a Java logging library.
19 | Just after the publication of this vulnerability (CVE-2021-44228, or Log4shell), we closely examined any related impacts to Akeneo, assessed our exposure, and came to the following statement:
20 |
21 | 1. As PHP applications, our main software is not impacted
22 | 2. We use Elasticsearch (from Elastic) as a technical component. We applied a specific configuration to be protected against the aforementioned configuration.
23 |
24 |
25 | If you are an on-premise user
26 | *****************************
27 |
28 | Please follow the Elasticsearch vendor advisory available here:
29 | https://discuss.elastic.co/t/apache-log4j2-remote-code-execution-rce-vulnerability-cve-2021-44228-esa-2021-31/291476
30 |
31 | and apply the recommended mitigation (setting the "log4j2.formatMsgNoLookups" JVM option to "true").
32 |
--------------------------------------------------------------------------------
/logshell_flexv5.rst:
--------------------------------------------------------------------------------
1 | About Log4Shell Vulnerability for Flexibility v5 Users
2 | ======================================================
3 |
4 | Security Update
5 | ***************
6 |
7 | As you are an Akeneo Enterprise Edition PaaS (ie, Flexibility) v5 user, we have good news for you. Akeneo Enterprise Edition PaaS (ie, Flexibility) v5 users are NOT impacted by the Apache Log4j Java critical security vulnerability that was disclosed on Friday, December the 10th 2021. No action is needed from you and your Akeneo instance remains secure.
8 |
9 | Additional information
10 | **********************
11 |
12 | You may have heard about a global critical vulnerability disclosed on Friday, December the 10th 2021, which has the potential to affect a lot of online services and companies. This vulnerability comes from a Java logging library.
13 | Just after the publication of this vulnerability (CVE-2021-44228, or Log4shell), we closely examined any related impacts to Akeneo, assessed our exposure, and came to the following statement:
14 |
15 | 1. As PHP applications, our main software is not impacted;
16 | 2. We use Elasticsearch (from Elastic) as a technical component and the version used on Serenity, Growth Edition and Flexibility v5 is not impacted by this vulnerability
17 |
18 |
19 | If you are an on-premise user
20 | *****************************
21 |
22 | If you followed the technical requirements for PIM v5.0, you are not impacted by the vulnerability, as the required Elasticsearch version for PIM v5 is not vulnerable.
23 |
--------------------------------------------------------------------------------
/logshell_saas.rst:
--------------------------------------------------------------------------------
1 | About Log4Shell Vulnerability for SaaS Users
2 | ============================================
3 |
4 | Security Update
5 | ***************
6 |
7 | As you are an Akeneo SaaS user, we have good news for you. Serenity/GrowthEdition/SharedCatalogs are NOT impacted by the Apache Log4j Java critical security vulnerability that was disclosed on Friday, December the 10th 2021, thanks to our ability to continuously upgrade and maintain our services. No action is needed from you and your Akeneo instance remains secure.
8 |
9 | Additional information
10 | **********************
11 | You may have heard about a global critical vulnerability disclosed Friday, December the 10th 2021, which has the potential to affect a lot of online services and companies. This vulnerability comes from a Java logging library.
12 | Just after the publication of this vulnerability (CVE-2021-44228, or Log4shell), we closely examined any related impacts to Akeneo, assessed our exposure, and came to the following statement:
13 |
14 | 1. As PHP applications, our main software is not impacted;
15 | 2. We use Elasticsearch (from Elastic) as a technical component
16 |
17 | We have concluded that there is no security vulnerability for you, as a SaaS customer.
18 |
--------------------------------------------------------------------------------
/maintain_pim/first_aid_kit/clear_browser_cache.rst.inc:
--------------------------------------------------------------------------------
1 | * If you use Chrome, see: `Chrome documentation: Clear cache and cookies `_.
2 | * If you use Firefox, see: `Firefox documentation: How to clear the Firefox cache `_.
3 | * If you use another browser, be aware this one isn't officially supported.
4 |
--------------------------------------------------------------------------------
/maintain_pim/first_aid_kit/deploy_assets.rst.inc:
--------------------------------------------------------------------------------
1 | .. code-block:: bash
2 |
3 | cd /path/to/your/pim/
4 | rm -rf ./public/bundles/* ./public/css/* ./public/js/*
5 | php bin/console pim:install:assets
6 | php bin/console assets:install --symlink web
7 | yarn run webpack
8 |
--------------------------------------------------------------------------------
/maintain_pim/index.rst:
--------------------------------------------------------------------------------
1 | Maintain Akeneo PIM projects
2 | ============================
3 |
4 | You can use this guide to help you resolve common technical issues you may be experiencing with the PIM.
5 |
6 | .. toctree::
7 | :maxdepth: 1
8 |
9 | first_aid_kit/index
10 | bug_qualification/index
11 | common_issues/index
12 | scalability_guide/index
13 | purge/index
--------------------------------------------------------------------------------
/maintain_pim/purge/index.rst:
--------------------------------------------------------------------------------
1 | How to purge history
2 | ====================
3 |
4 | This chapter describes the existing commands to purge unused information in the PIM.
5 |
6 | .. toctree::
7 | :maxdepth: 2
8 |
9 | purge_job_execution
10 | purge_version_entities
11 | purge_events_api_logs
12 |
--------------------------------------------------------------------------------
/maintain_pim/purge/purge_events_api_logs.rst:
--------------------------------------------------------------------------------
1 | How to purge events API logs
2 | ============================
3 |
4 | This chapter gives details on how to purge events API logs in order keep the elastic search index volume under control.
5 |
6 | The batch job command
7 | ---------------------
8 |
9 | Akeneo PIM provides a simple command to purge events API logs:
10 |
11 | .. code-block:: bash
12 | :linenos:
13 |
14 | bin/console akeneo:connectivity-connection:purge-events-api-logs
15 |
16 | .. note::
17 |
18 | This purge command removes the info and notice level events API logs to keep only the 100 last and removes the warning
19 | and error logs older than 72h.
20 |
21 | Scheduling the jobs
22 | -------------------
23 |
24 | To run a command periodically, you can use a cron_:
25 |
26 | .. _cron: https://help.ubuntu.com/community/CronHowto
27 |
28 | First, you need to install it (example in debian/ubuntu based distributions):
29 |
30 | .. code-block:: bash
31 | :linenos:
32 |
33 | apt-get install cron
34 |
35 | Then, you can edit your crontab:
36 |
37 | .. code-block:: bash
38 | :linenos:
39 |
40 | crontab -e
41 |
42 | You can now add a new line at the end of the opened file:
43 |
44 | .. code-block:: bash
45 | :linenos:
46 |
47 | 0 * * * * /home/akeneo/pim/bin/console akeneo:connectivity-connection:purge-events-api-logs --env=prod
48 |
49 | With this cron configuration a purge of events API logs, will be launched each hour.
50 |
--------------------------------------------------------------------------------
/maintain_pim/purge/purge_job_execution.rst:
--------------------------------------------------------------------------------
1 | How to purge jobs executions
2 | ============================
3 |
4 | This chapter gives details on how to purge jobs executions in order to decrease the database volume.
5 |
6 | The batch job command
7 | ---------------------
8 |
9 | Akeneo PIM provides a simple command to purge jobs executions:
10 |
11 | .. code-block:: bash
12 | :linenos:
13 |
14 | bin/console akeneo:batch:purge-job-execution [-d|--days DAYS]
15 |
16 | .. tip::
17 | Don't forget to add --env=prod to avoid memory leaks in dev environment (the default environment for commands)
18 |
19 | You can also provide a custom configuration for the job:
20 |
21 | .. code-block:: bash
22 | :linenos:
23 |
24 | bin/console akeneo:batch:purge-job-execution --days=30 --env=prod
25 |
26 | For example, with the option --days=30, the command will remove all jobs executions and their archives when they were created over 30 days ago.
27 |
28 | .. note::
29 |
30 | This purge command removes the job executions from the database and files from var/file_storage/archive directory.
31 |
32 | Scheduling the jobs
33 | -------------------
34 |
35 | To run a command periodically, you can use a cron_:
36 |
37 | .. _cron: https://help.ubuntu.com/community/CronHowto
38 |
39 | First, you need to install it (example in debian/ubuntu based distributions):
40 |
41 | .. code-block:: bash
42 | :linenos:
43 |
44 | apt-get install cron
45 |
46 | Then, you can edit your crontab:
47 |
48 | .. code-block:: bash
49 | :linenos:
50 |
51 | crontab -e
52 |
53 | You can now add a new line at the end of the opened file:
54 |
55 | .. code-block:: bash
56 | :linenos:
57 |
58 | 0 0 * * * /home/akeneo/pim/bin/console akeneo:batch:purge-job-execution --env=prod
59 |
60 | With this cron configuration a purge of jobs executions older than 90 days, will be launched once a day.
61 |
--------------------------------------------------------------------------------
/maintain_pim/scalability_guide/index.rst:
--------------------------------------------------------------------------------
1 | Scalability Guide
2 | =================
3 |
4 | A product catalog is unique to one's need. It is configured with a custom number of products, attributes, families, locales, channels, etc. Those different combinations may affect the application performances.
5 |
6 | This chapter explains how we audit the application's scalability, it lists the known issues and possible improvements as well as the bottlenecks already encountered by our partners with the PIM. It also shows best practices you should implement to ensure the success of your project.
7 |
8 | We improve the scalability in each new minor version.
9 | If you encounter any new limitation, please do not hesitate to contact us through `the helpdesk `_.
10 | We'll give you details about the roadmap for specific improvements and help you to find a suitable solution for your project.
11 |
12 | .. warning::
13 |
14 | This is an early version of this chapter, we'll continue to complete it with more use cases.
15 | We also provide a :doc:`/technical_architecture/performances_guide/index`.
16 |
17 | .. toctree::
18 | :maxdepth: 1
19 |
20 | representative_catalogs
21 | more_than_10k_attributes
22 | more_than_10k_families
23 | more_than_10k_categories
24 | more_than_500_attributes_usable_in_product_grid
25 | more_than_100k_products_to_export
26 | more_than_1GB_of_product_media_to_export
27 |
--------------------------------------------------------------------------------
/maintain_pim/scalability_guide/more_than_100k_products_to_export.rst:
--------------------------------------------------------------------------------
1 | More than 100k products to export?
2 | ----------------------------------
3 |
4 | In the past, we encountered use cases where partners would export 270k products and experienced issues with the memory usage.
5 |
6 | Most of PIM's massive operations, such as imports and exports, process the products iteratively via a size configured subsets of products in order to minimize the memory usage.
7 |
8 | As each product may have different properties, the export operation would keep the transformed array in memory in order to add missing columns from one line to another.
9 |
10 | In version 1.5.0, we changed the internal behavior of the CsvProductWriter to use a file buffer to temporarily write each previously transformed array in order to aggregate the final result. We decoupled the CsvProductWriter and the buffer component so that it can be used in other contexts.
11 |
12 | As a conclusion, the main product export's limitation is now the hard drive space and no longer the available memory.
13 |
14 | Please notice that the number of values per product will have an impact on the execution time and memory usage.
15 |
--------------------------------------------------------------------------------
/maintain_pim/scalability_guide/more_than_10k_attributes.rst:
--------------------------------------------------------------------------------
1 | More than 10k attributes?
2 | -------------------------
3 |
4 | The number of attributes may impact performances of Akeneo PIM in several ways.
5 | We've tested performances with a set of 10k simple attributes in total (not 10k attributes per product). Note: These attributes were not scopable nor localizable.
6 |
7 | .. warning::
8 |
9 | We've already improved different screens and processes but we are still experiencing different issues with 10k attributes and a low amount of families and categories.
10 |
11 | The impacted screens are the following:
12 | - **[Fixed v1.6.0]** (PIM-5401) the attributes popin in variant group page (Community Edition)
13 | - **[Fixed v1.6.0]** (PIM-5283) use the same edit form system than product for the variant group edit (Community Edition)
14 | - **[Fixed v1.7.0]** (PIM-5212) the attributes popin in family edit page (Community Edition)
15 | - **[TODO]** (PIM-6118) the configure step of the family / mass edit / requirements (Community Edition)
16 | - **[TODO]** (PIM-6094) the attributes popin in attribute group edit page (Community Edition)
17 |
18 | **If you plan to use the PIM with more than 10k attributes, please contact us.**
19 |
20 | You may be interested in :doc:`/maintain_pim/scalability_guide/more_than_500_attributes_usable_in_product_grid`
21 |
--------------------------------------------------------------------------------
/maintain_pim/scalability_guide/more_than_10k_categories.rst:
--------------------------------------------------------------------------------
1 | More than 10k categories?
2 | -------------------------
3 |
4 | The number of categories will impact performances of the PIM in several ways.
5 | We've tested performances with a set of 10k categories in total.
6 |
7 | .. warning::
8 |
9 | We've already improved different screens and processes but we are still experiencing different issues with 10k categories and a low amount of families and attributes.
10 |
11 | The impacted screens are the following and we're releasing performances fixes as 1.4 patches:
12 | - **[TODO]** (PIM-5239) change and save permissions on the root category of a large tree (Enterprise Edition)
13 |
14 | **If you plan to use the PIM with more than 10k categories, please contact us.**
15 |
--------------------------------------------------------------------------------
/maintain_pim/scalability_guide/more_than_10k_families.rst:
--------------------------------------------------------------------------------
1 | More than 10k families?
2 | -----------------------
3 |
4 | The number of families will impact performances of the PIM in several ways.
5 | We've tested performances with a set of 10k families in total.
6 |
7 | .. warning::
8 |
9 | We've already improved different screens and processes but we are still experiencing different issues with 10k families and a low amount of attributes and categories.
10 |
11 | The impacted screens are the following:
12 | - **[TODO]** (PIM-5234) creation of a channel due to the creation of families requirements (Community Edition)
13 |
14 | **If you plan to use the PIM with more than 10k families, please contact us.**
15 |
--------------------------------------------------------------------------------
/maintain_pim/scalability_guide/more_than_500_attributes_usable_in_product_grid.rst:
--------------------------------------------------------------------------------
1 | More than 500 attributes usable in the product grids?
2 | -----------------------------------------------------
3 |
4 | The number of attributes usable in the product grids will impact performances of the PIM in several ways.
5 |
6 | We've tested performances with a set of 10k attributes, including 500 attributes usable in the grids (meaning 10k attributes in total not 10k attributes per product).
7 |
8 | Prior to 1.4.12, all attributes could be displayed in the grid columns and only *attributes usable as grid filter* could be used to filter data in the grids. We observed a significant performance problem during the loading of the product grids for catalogs with a large number of attributes. We decided to change this behavior and to define a limitation of 500 attributes usable in the grid.
9 |
10 | From 1.4.12 and upper versions, the attribute option *attributes usable as grid filter* became *usable in grid*.
11 | This option states whether or not the attribute can be displayed as a column or used as a filter in product grids.
12 |
13 | We'll try to improve the datagrid system to increase this limitation in an upcoming minor version.
14 |
15 | .. warning::
16 |
17 | **If you plan to use the PIM with more than 500 attributes usable in the grids, please contact us.**
18 |
--------------------------------------------------------------------------------
/maintain_pim/unicorn-akeneo_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/maintain_pim/unicorn-akeneo_128.png
--------------------------------------------------------------------------------
/manipulate_pim_data/catalog_structure/creating_a_reference_data.rst:
--------------------------------------------------------------------------------
1 | How to Create a Reference Data
2 | ==============================
3 |
4 | .. note::
5 | If you want to use Reference data to model your catalog you likely need our new feature: `Reference entities`_!
6 |
7 | .. _Reference entities: https://github.com/akeneo-labs/CustomEntityBundle/blob/master/docs/index.md
8 |
--------------------------------------------------------------------------------
/manipulate_pim_data/catalog_structure/index.rst:
--------------------------------------------------------------------------------
1 | How to Customize the Catalog Structure
2 | ======================================
3 |
4 | This chapter describes how to customize the catalog structure to add your own models or update the existing ones.
5 |
6 | .. toctree::
7 |
8 | creating_a_reference_data
9 |
--------------------------------------------------------------------------------
/manipulate_pim_data/connect/configure_event_subscription_network.rst:
--------------------------------------------------------------------------------
1 | How to Configure the Event Subscription network restrictions
2 | ============================================================
3 |
4 | In the Event Subscription, some restrictions exist on the entered URL to guarantee that the PIM is not used to access
5 | unsolicited resources.
6 |
7 | The following domains are always blacklisted:
8 |
9 | - `localhost`
10 | - `elasticsearch`
11 | - `memcached`
12 | - `object-storage`
13 | - `mysql`
14 |
15 | Additionally, we also block the ranges of IPs defined in the RFC1918.
16 |
17 | However, **you may need to add an exception to those IP address ranges**, this chapter explains how.
18 |
19 | Add IPs to the whitelist
20 | ------------------------
21 | If you want to allow specific IPs, you can set the environment variable `ALLOWED_NETWORK_WHITELIST` with
22 | a list of IPs separated by commas, with or without netmask.
23 |
24 | .. code-block:: yaml
25 | :linenos:
26 |
27 | ALLOWED_NETWORK_WHITELIST=10.0.2.0/24,10.0.3.1
28 |
29 | .. warning::
30 |
31 | The domain blacklist will always supersede the IP whitelist.
32 |
--------------------------------------------------------------------------------
/manipulate_pim_data/index.rst:
--------------------------------------------------------------------------------
1 | Manipulate the Akeneo PIM data
2 | ==============================
3 |
4 | .. toctree::
5 | :maxdepth: 2
6 |
7 | mass_edit
8 | product/index
9 | non-product/index
10 | rule/index
11 | define-acl
12 | catalog_structure/index
13 | teamwork_assistant/index
14 | store_assets_externally
15 | measurement/configure_measurement_limits
16 | connect/configure_event_subscription_network
17 |
--------------------------------------------------------------------------------
/manipulate_pim_data/mass_edit.rst:
--------------------------------------------------------------------------------
1 | How to Customize Mass Edit Operations
2 | =====================================
3 |
4 | This chapter gives details on how to customize existing mass edit operations and how to add new ones.
5 |
6 | .. toctree::
7 |
8 | mass_edition/register_a_new_bulk_action
9 | mass_edition/register_a_new_mass_edit_action
10 |
11 | If you need a presentation of Mass Edit feature, take a look at the *Product focus* video!
12 |
13 | .. raw:: html
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/manipulate_pim_data/mass_edition/operation-group-dropdown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/manipulate_pim_data/mass_edition/operation-group-dropdown.png
--------------------------------------------------------------------------------
/manipulate_pim_data/measurement/configure_measurement_limits.rst:
--------------------------------------------------------------------------------
1 | How to Configure Measurement Limits
2 | ===================================
3 |
4 | In the Measurement Families, some limits about the number of families and units have been defined to guarantee that the PIM is functional and runs smoothly.
5 | However, as your catalog is unique, **you may need to raise those values**, this chapter explains how.
6 |
7 | .. warning::
8 | If you hit those limits, this could reflect that **your modelization is not adapted**. If it's the case, we can't guarantee that the PIM will be functional and runs smoothly, be sure to test the performances with your new limits.
9 |
10 | All those limits are defined as parameters that you can override like any other `Symfony config parameter `_.
11 |
12 | Raise the limit of Measurement Families
13 | ---------------------------------------
14 | By default, you can't create more than **300 Measurement Families**.
15 | If you want to create more, you have to edit the ``akeneo_measurement.validation.measurement_family.families_max`` parameter, for example:
16 |
17 | .. code-block:: yaml
18 | :linenos:
19 |
20 | parameters:
21 | akeneo_measurement.validation.measurement_family.families_max: 500
22 |
23 | Raise the limit of Units per Measurement Family
24 | -----------------------------------------------
25 | By default, you can't create more than **50 Units per Measurement Family**.
26 | If you want to create more, you have to edit the ``akeneo_measurement.validation.measurement_family.units_max`` parameter, for example:
27 |
28 | .. code-block:: yaml
29 | :linenos:
30 |
31 | parameters:
32 | akeneo_measurement.validation.measurement_family.units_max: 100
33 |
34 | Raise the limit of Operations per Unit
35 | --------------------------------------
36 | By default, you can't create more than **5 Operations per Unit**.
37 | If you want to create more, you have to edit the ``akeneo_measurement.validation.measurement_family.operations_max`` parameter, for example:
38 |
39 | .. code-block:: yaml
40 | :linenos:
41 |
42 | parameters:
43 | akeneo_measurement.validation.measurement_family.operations_max: 10
44 |
--------------------------------------------------------------------------------
/manipulate_pim_data/non-product/index.rst:
--------------------------------------------------------------------------------
1 | How to Manipulate Non-Product Objects
2 | =====================================
3 |
4 | This chapter gives details on how to programmatically manipulate other catalog objects.
5 |
6 | .. toctree::
7 |
8 | query
9 | create
10 | update
11 | validate
12 | save
13 | remove
14 |
--------------------------------------------------------------------------------
/manipulate_pim_data/non-product/remove.rst:
--------------------------------------------------------------------------------
1 | How to Remove Non-Product Objects
2 | =================================
3 |
4 | To remove one or many objects, we provide a service which implements methods 'remove' and 'removeAll' through the implementation of ``Akeneo\Tool\Component\StorageUtils\Remover\RemoverInterface`` and ``Akeneo\Tool\Component\StorageUtils\Remover\BulkRemoverInterface``.
5 |
6 | Use the Remover to Remove a Single Object
7 | -----------------------------------------
8 |
9 | You can remove one or many objects of a kind with a special service, the remover checks that the used object is supported (for instance, you can't use the attribute remover to remove a family).
10 |
11 | We define these different services to simplify future changes, and to allow you to override only one of them to add specific business logic (for instance, override only attribute remover but not the family remover).
12 |
13 | Some services already use specific classes but most of these services use the class ``Akeneo\Tool\Bundle\StorageUtilsBundle\Doctrine\Common\Remover\BaseRemover``.
14 |
15 | .. code-block:: php
16 |
17 | $attributeRemover = $this->getContainer()->get('pim_catalog.remover.attribute');
18 | $attributeRemover->remove($attribute);
19 |
20 | $familyRemover = $this->getContainer()->get('pim_catalog.remover.family');
21 | $familyRemover->remove($family);
22 |
23 | $categoryRemover = $this->getContainer()->get('pim_catalog.remover.category');
24 | $categoryRemover->remove($category);
25 |
26 | Use the Remover to Remove many Objects
27 | --------------------------------------
28 |
29 | .. code-block:: php
30 |
31 | $attributeRemover = $this->getContainer()->get('pim_catalog.remover.attribute');
32 | $attributeRemover->removeAll([$attributeOne, $attributeTwo]);
33 |
34 | $familyRemover = $this->getContainer()->get('pim_catalog.remover.family');
35 | $familyRemover->removeAll([$familyOne, $familyTwo]);
36 |
37 | $categoryRemover = $this->getContainer()->get('pim_catalog.remover.category');
38 | $categoryRemover->removeAll([$categoryOne, $categoryTwo]);
39 |
--------------------------------------------------------------------------------
/manipulate_pim_data/non-product/save.rst:
--------------------------------------------------------------------------------
1 | How to Save Non-Product Objects
2 | ===============================
3 |
4 | To save one or several objects, we provide a service which implements methods 'save' and 'saveAll' through the implementation of ``Akeneo\Tool\Component\StorageUtils\Saver\SaverInterface`` and ``Akeneo\Tool\Component\StorageUtils\Saver\BulkSaverInterface``.
5 |
6 | Use the Saver to Save a Single Object
7 | -------------------------------------
8 |
9 | You can save one or several objects of a kind with a dedicated service, the saver checks that the used object is supported (for instance, you can't use the attribute saver to save a family).
10 |
11 | We define these different services to simplify the future changes, and to allow you to override only one of them to add custom business logic (for instance, override only attribute saver but not the family saver).
12 |
13 | Some services already use specific classes but most of these services use the class ``Akeneo\Tool\Bundle\StorageUtilsBundle\Doctrine\Common\Saver\BaseSaver``.
14 |
15 | .. code-block:: php
16 |
17 | $attributeSaver = $this->getContainer()->get('pim_catalog.saver.attribute');
18 | $attributeSaver->save($attribute);
19 |
20 | $familySaver = $this->getContainer()->get('pim_catalog.saver.family');
21 | $familySaver->save($family);
22 |
23 | $categorySaver = $this->getContainer()->get('pim_catalog.saver.category');
24 | $categorySaver->save($category);
25 |
26 | Use the Saver to Save many Objects
27 | ----------------------------------
28 |
29 | .. code-block:: php
30 |
31 | $attributeSaver = $this->getContainer()->get('pim_catalog.saver.attribute');
32 | $attributeSaver->saveAll([$attributeOne, $attributeTwo]);
33 |
34 | $familySaver = $this->getContainer()->get('pim_catalog.saver.family');
35 | $familySaver->saveAll([$familyOne, $familyTwo]);
36 |
37 | $categorySaver = $this->getContainer()->get('pim_catalog.saver.category');
38 | $categorySaver->saveAll([$categoryOne, $categoryTwo]);
39 |
40 | Use the Saver with Options
41 | --------------------------
42 |
43 | You can use an array of the following boolean options as the second parameter when you save objects.
44 |
45 | If the 'flush' option is passed with 'true', the object will be saved to the database (the default 'flush' value is 'true').
46 |
47 | .. code-block:: php
48 |
49 | $saver->save($product, ['flush' => true]);
50 |
51 | .. note::
52 |
53 | Some business savers may accept different options, for instance, the channel saver accepts a 'schedule' option to indicate that the completeness must be re-calculated later.
54 |
--------------------------------------------------------------------------------
/manipulate_pim_data/non-product/validate.rst:
--------------------------------------------------------------------------------
1 | How to Validate Non-Product Objects
2 | ===================================
3 |
4 | To validate an object, we use a classic Symfony Validator with Constraints defined in yaml files.
5 |
6 | Use the Validator
7 | -----------------
8 |
9 | The validator is a service, you can fetch it from the container.
10 |
11 | .. code-block:: php
12 |
13 | $validator = $this->getContainer()->get('validator');
14 |
15 | When you validate an attribute, a family or another object, all business validations are applied.
16 |
17 | .. code-block:: php
18 |
19 | $violations = $validator->validate($family);
20 | $violations = $validator->validate($attribute);
21 | // ...
22 |
23 | It returns here a list of violation errors, a ``Symfony\Component\Validator\ConstraintViolationList``.
24 |
25 | .. warning::
26 |
27 | The validation of a product is a bit different, you should use its own validator, the service alias is ``pim_catalog.validator.product``.
28 |
--------------------------------------------------------------------------------
/manipulate_pim_data/product/create.rst:
--------------------------------------------------------------------------------
1 | How to Create Products
2 | ======================
3 |
4 | Instantiate a New ProductBuilder
5 | --------------------------------
6 |
7 | The product builder is available as a service, you can fetch it from the container.
8 |
9 | .. code-block:: php
10 |
11 | $productBuilder = $this->getContainer()->get('pim_catalog.builder.product');
12 |
13 | Use the ProductBuilder to Create a new Product
14 | ----------------------------------------------
15 |
16 | .. code-block:: php
17 |
18 | // create a product with a sku (default identifier attribute) and a family code
19 | $product = $productBuilder->createProduct($identifier, $familyCode);
20 |
21 | // create a product with a sku (default identifier attribute) and no family
22 | $product = $productBuilder->createProduct($identifier);
23 |
24 | // create a product without identifier or family
25 | $product = $productBuilder->createProduct();
26 |
--------------------------------------------------------------------------------
/manipulate_pim_data/product/index.rst:
--------------------------------------------------------------------------------
1 | How to Manipulate Products
2 | ==========================
3 |
4 | This chapter gives details on how to use the internal API to manipulate products, the product is the main object of the PIM and it comes with specific services for the following situations.
5 |
6 | .. toctree::
7 |
8 | query
9 | create
10 | update
11 | validate
12 | save
13 | remove
14 |
--------------------------------------------------------------------------------
/manipulate_pim_data/product/remove.rst:
--------------------------------------------------------------------------------
1 | How to Remove Products
2 | ======================
3 |
4 | Instantiate the Remover
5 | -----------------------
6 |
7 | The product remover is a service, you can fetch it from the container.
8 |
9 | .. code-block:: php
10 |
11 | $remover = $this->getContainer()->get('pim_catalog.remover.product');
12 |
13 | Remove the Products
14 | -------------------
15 |
16 | It implements ``Akeneo\Tool\Component\StorageUtils\Remover\RemoverInterface`` and ``Akeneo\Tool\Component\StorageUtils\Remover\BulkRemoverInterface`` so you can remove one or several products.
17 |
18 | .. code-block:: php
19 |
20 | $remover->remove($product); // To remove one product
21 | $remover->removeAll($products); // To remove a collection of products
22 |
--------------------------------------------------------------------------------
/manipulate_pim_data/product/validate.rst:
--------------------------------------------------------------------------------
1 | How to Validate Products
2 | ========================
3 |
4 | Instantiate the validator
5 | -------------------------
6 |
7 | The validator is a service, you can fetch it from the container
8 |
9 | .. code-block:: php
10 |
11 | $validator = $this->getContainer()->get('pim_catalog.validator.product');
12 |
13 | The validator that we use for products is quite special, for other objects we use the Symfony classic `validator`.
14 |
15 | The service `pim_catalog.validator.product` receives Constraints from yaml files (standard Symfony) and also from attributes configuration, to do so we use our own `DelegatingClassMetadataFactory`.
16 |
17 | Validate the product
18 | --------------------
19 |
20 | Now you can validate your product, all business validations are applied here.
21 |
22 | .. code-block:: php
23 |
24 | $violations = $validator->validate($product);
25 |
26 | In return we get a list of violation errors, a 'Symfony\Component\Validator\ConstraintViolationList'.
27 |
--------------------------------------------------------------------------------
/manipulate_pim_data/rule/index.rst:
--------------------------------------------------------------------------------
1 | How to add a custom action rule
2 | ===============================
3 |
4 | This chapter describes rules format and how to to add a custom action in the rule engine.
5 |
6 | **These cookbook entries are about a feature only provided in the Enterprise Edition.**
7 |
8 | .. toctree::
9 |
10 | general_information_on_rule_format
11 | add_custom_action_rule_engine
12 |
--------------------------------------------------------------------------------
/manipulate_pim_data/teamwork_assistant/index.rst:
--------------------------------------------------------------------------------
1 | How To Customize Teamwork Assistant (Enterprise Edition)
2 | ========================================================
3 |
4 | .. toctree::
5 |
6 | Customize notifications
7 | Add a calculation step
8 | How to log calculation step
9 | Remove projects impacted by a custom catalog update
10 |
--------------------------------------------------------------------------------
/migrate_pim/apply_patch/apply_patch_ce.rst:
--------------------------------------------------------------------------------
1 | How to apply a patch - Community Edition
2 | =============================================
3 |
4 | Run the composer update command:
5 |
6 | .. code-block:: bash
7 |
8 | composer --prefer-dist update
9 |
10 | Be aware that your composer.json won't be updated and some dependencies might be missing or coming from an outdated version.
11 |
12 | You have to make sure you have the latest version composer.json. In this case you should backup your current composer.json and download the newest one beforehand.
13 |
14 | Double check in the output of this command that the latest version has been fetched, you can also check it by using the following command:
15 |
16 | .. code-block:: bash
17 |
18 | composer licenses
19 |
20 | Then clean the cache, re-install assets and warmup the cache:
21 |
22 |
23 | .. note::
24 |
25 | Before launching the following commands, remember to stop the daemons to avoid generating outdated cache.
26 |
27 |
28 | .. code-block:: bash
29 |
30 | service php8.1-fpm restart
31 | rm -rf var/cache/* ./public/bundles/* ./public/css/* ./public/js/*
32 | rm yarn.lock
33 | bin/console pim:installer:assets
34 | bin/console cache:warmup
35 | yarn install
36 | yarn run less
37 | yarn run webpack
38 |
39 | Please **clear your browser's cache** before testing.
40 |
41 | .. note::
42 |
43 | We set any other dependencies to their exact patch versions to avoid compatibility issues.
44 |
45 |
46 | Troubleshooting
47 | -----------------------
48 |
49 |
50 | **Cache issues**
51 |
52 | If you get a 500 error after upgrading and clear cache isn't working, try clearing the apc cache with a PHP script or restart the Apache/Web server.
53 |
54 |
55 | **Composer issues**
56 |
57 | You have to make sure you have the latest version of composer.json. If this isn't the case, you should backup your current composer.json and download the newest one before updating.
58 |
59 | You need to get an archive containing Akeneo PIM and its PHP dependencies: https://download.akeneo.com/pim-community-standard-v6.0-latest-icecat.tar.gz
60 |
61 | You can then copy the composer.json file to your pim installation.
62 |
--------------------------------------------------------------------------------
/migrate_pim/apply_patch/index.rst:
--------------------------------------------------------------------------------
1 | How to apply a patch?
2 | =====================
3 |
4 | We frequently release patches for all supported versions.
5 |
6 | Each patch contains bug fixes and sometimes improvements or security fixes, **that is why it is very important to always have the latest patch installed on your PIM.**
7 |
8 | Guides
9 | -------
10 |
11 | * :doc:`/migrate_pim/apply_patch/apply_patch_ce`
12 |
13 | * :doc:`/migrate_pim/apply_patch/apply_patch_ee_flexibility`
14 |
15 | * :doc:`/migrate_pim/apply_patch/apply_patch_ee_on_premise`
16 |
17 | .. toctree::
18 | :maxdepth: 2
19 | :hidden:
20 |
21 | apply_patch_ce
22 | apply_patch_ee_flexibility
23 | apply_patch_ee_on_premise
--------------------------------------------------------------------------------
/migrate_pim/changelog.rst:
--------------------------------------------------------------------------------
1 | Where is the Changelog?
2 | ========================
3 |
4 | When our maintenance team works on issues, they take extreme care to avoid any backward compatibility break, but it might happen. If it is the case, the BC break is mentioned in the changelog of the version.
5 |
6 | .. note::
7 |
8 | Akeneo provides 2 changelogs: one for CE edition available the Community repo and one for EE edition which is only available in the latest Enterprise Edition archive.
9 |
10 | Akeneo PIM CE changelog is available on our GitHub repository:
11 |
12 | * Go to our `Community Repository `_.
13 | * Select your branch in the drop down menu, for instance select 7.0 branch.
14 | * Then scroll down the page, and select the desired Changelog in the list, for instance `Changelog 7.0 version `_.
15 |
16 | Akeneo PIM EE changelog is available in your last archive:
17 |
18 | * Get the latest `PIM Enterprise Edition (EE) archive from the Portal `_.
19 | * In your archive, select the desired Changelog in the list, for instance "CHANGELOG-7.0.md"
20 | * If you don't know how to get your archive, please contact us
21 |
--------------------------------------------------------------------------------
/migrate_pim/index.rst:
--------------------------------------------------------------------------------
1 | Upgrade Akeneo PIM projects
2 | ===========================
3 |
4 | This chapter describes how to apply a patch on your current version or how to upgrade from a major version to a more recent one.
5 |
6 | As a prerequisite, we assume that you are using a project installed from a Community Edition or an Enterprise Edition (:doc:`/install_pim/index`).
7 |
8 | .. toctree::
9 | :maxdepth: 2
10 | :hidden:
11 |
12 | apply_patch/index
13 | changelog
14 | upgrade_major_version
15 | migrate_to_saas
16 |
--------------------------------------------------------------------------------
/onboarder/common/images/logo-onboarder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/onboarder/common/images/logo-onboarder.png
--------------------------------------------------------------------------------
/onboarder/index.rst:
--------------------------------------------------------------------------------
1 | Akeneo Onboarder
2 | ================
3 |
4 | |
5 |
6 | .. image:: ./common/images/logo-onboarder.png
7 | :width: 291px
8 |
9 | |
10 |
11 | .. toctree::
12 | :maxdepth: 2
13 |
14 | prerequisites/index
15 | installation/index
16 | synchronization/index
17 | patch_and_minor/index
18 | upgrade_major/index
19 | troubleshooting/index
20 | uninstall/index
21 |
22 | .. toctree::
23 | :hidden:
24 | :titlesonly:
25 | :includehidden:
26 |
27 | installation/define_environment_variables/index
28 |
--------------------------------------------------------------------------------
/onboarder/installation/define_environment_variables/dot_env_component.rst:
--------------------------------------------------------------------------------
1 | Using the DotEnv file
2 | =====================
3 |
4 | The `Dotenv Symfony component `_ is a dependency already available
5 | into the PIM as it's a standard Symfony framework component. It is also used by default in the PIM starting Akeneo PIM
6 | ``4.0``.
7 |
8 | Edit the ``.env`` file at your project root directory and add the environment variables values provided on your
9 | Onboarder project page on the Partner Portal.
10 |
--------------------------------------------------------------------------------
/onboarder/installation/define_environment_variables/index.rst:
--------------------------------------------------------------------------------
1 | Environment variables
2 | =====================
3 |
4 | .. toctree::
5 |
6 | dot_env_component
7 | system_environment_variables
8 |
--------------------------------------------------------------------------------
/onboarder/installation/define_environment_variables/system_environment_variables.rst:
--------------------------------------------------------------------------------
1 | Using environment variables
2 | ===========================
3 |
4 | Here are some examples to manage environment variables, the way to define environment variables may vary depending on your server installation and your deployment/update strategy.
5 |
6 | **CLI**
7 |
8 | Define the environment variables for CLI. Ensure these variables are always set using the export command :
9 |
10 | .. code-block:: bash
11 |
12 | export ONBOARDER_TOPIC_NAME_FOR_PUBLICATION_TO_MIDDLEWARE=a_topic_name
13 |
14 | **WEB**
15 |
16 | Define the environment variables in your vhost using the SetEnv directive :
17 |
18 | .. code-block:: apache
19 |
20 |
21 | SetEnv ONBOARDER_TOPIC_NAME_FOR_PUBLICATION_TO_MIDDLEWARE a_topic_name
22 |
23 |
--------------------------------------------------------------------------------
/onboarder/patch_and_minor/index.rst:
--------------------------------------------------------------------------------
1 | How to update a minor version or to apply a patch
2 | =================================================
3 |
4 | We frequently release patches for all supported versions. Each patch contains bug fixes and sometimes improvements or
5 | security fixes, **that is why it is very important to always have the latest Onboarder patch installed on your PIM.**
6 |
7 | New minor versions bring new features.
8 |
9 | Prerequisite
10 | ------------
11 |
12 | We assume that you are using a project installed from a PIM Enterprise Standard edition (:doc:`/onboarder/installation/index`).
13 | It is especially important that you added the Onboarder Composer upgrade script to your PIM ``composer.json``, as explained in :doc:`/onboarder/installation/index`.
14 |
15 | Guides
16 | -------
17 |
18 | * :doc:`/onboarder/patch_and_minor/update_ee_flexibility`
19 |
20 | * :doc:`/onboarder/patch_and_minor/update_ee_on_premise`
21 |
22 | .. toctree::
23 | :maxdepth: 2
24 | :hidden:
25 |
26 | update_ee_flexibility
27 | update_ee_on_premise
28 |
--------------------------------------------------------------------------------
/onboarder/troubleshooting/images/check_pub_sub_access_command_response.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/onboarder/troubleshooting/images/check_pub_sub_access_command_response.png
--------------------------------------------------------------------------------
/onboarder/troubleshooting/index.rst:
--------------------------------------------------------------------------------
1 | Troubleshooting
2 | ===============
3 |
4 | Running the job queue daemon command line leads to errors
5 | ---------------------------------------------------------
6 |
7 | .. code-block:: bash
8 |
9 | batch.ERROR: Encountered an error executing the step: No project ID was provided, and we were unable to detect a default project ID.
10 |
11 | If you encounter this kind of error in ``var/logs/*.log``, it's because the job queue daemon command line isn't aware of the mandatory environment variables needed to run the onboarder properly.
12 |
13 | If you launch this daemon :doc:`using supervisor configuration ` as recommended by the PIM installation manual you have to configure :doc:`the mandatory environment variables ` that the akeneo/pim-onboarder bundle requires in the ``/etc/supervisor.conf`` file.
14 |
15 | .. code-block:: bash
16 |
17 | [supervisord]
18 | environment=ONBOARDER_GOOGLE_APPLICATION_CREDENTIALS="/srv/pim/onboarderServiceAccount.json",ONBOARDER_TOPIC_NAME_FOR_PUBLICATION_TO_MIDDLEWARE="middleware-topic-name",...
19 |
20 | You can check if Google Pub/Sub access is successfully configured by using the following command in your pim
21 |
22 | .. code-block:: bash
23 |
24 | php bin/console akeneo:onboarder:check-pubsub-access --env=prod
25 |
26 | .. image:: ./images/check_pub_sub_access_command_response.png
27 | :width: 900px
28 | :height: 550px
29 | :scale: 100 %
30 | :alt: Result of the check pubsub access command
31 | :align: center
32 |
33 | Proposals from Onboarder don't show up in the PIM
34 | ---------------------------------------------------
35 |
36 | If you don't receive proposals in the PIM, double check that you properly set up and configured your workers, see :doc:`synchronization ` page.
37 |
38 | Please also check that in your .env file you have an `ONBOARDER_GOOGLE_APPLICATION_CREDENTIALS` entry. More details in the :doc:`installation ` page at "Set the configuration values" section.
--------------------------------------------------------------------------------
/onboarder/uninstall/index.rst:
--------------------------------------------------------------------------------
1 | How to uninstall the Onboarder bundle
2 | =====================================
3 |
4 | Clean related data
5 | ------------------
6 |
7 | There are several related data created by Onboarder:
8 |
9 | - Supplier & supplier reference attributes
10 | - The Onboarder channel
11 | - Product values
12 |
13 | You need to run this command to clean them:
14 |
15 | .. code-block:: bash
16 |
17 | bin/console akeneo:onboarder:deactivate
18 | bin/console akeneo:onboarder:clean-bundle-data
19 |
20 | .. warning::
21 |
22 | Onboarder ACL is stored in a yml file and not in the database. So the `Akeneo Onboarder` permission will still be displayed after running this command.
23 |
--------------------------------------------------------------------------------
/onboarder/upgrade_major/index.rst:
--------------------------------------------------------------------------------
1 | How to upgrade to a major version
2 | =================================
3 |
4 | New major versions bring compatibility with new Akeneo PIM releases. So the only case you'll have to perform a major
5 | update of the Onboarder bundle is when you are migrating the PIM itself to a new version.
6 |
7 | The instructions you will follow to update your PIM are mostly enough to migrate the bundle, you will only need to do a
8 | couple more things specific to the Onboarder bundle.
9 |
10 |
11 | Right before updating you composer dependencies
12 | -----------------------------------------------
13 |
14 | When updating the PIM ``composer.json`` to increase the PIM version, you also need to change the
15 | ``akeneo/pim-onboarder`` version. Please refer to :doc:`/onboarder/installation/index` to know which version of the
16 | bundle to use.
17 |
18 | Then, make sure the Onboarder composer script is present in the ``composer.json`` file, as explained in :doc:`/onboarder/installation/index`.
19 |
20 | Right after updating you composer dependencies
21 | ----------------------------------------------
22 |
23 | Thanks to the Onboarder composer script, all the migration scripts of the Onboarder bundle should have been copied
24 | in the ``upgrades/schema`` directory, alongside those of the PIM. Before executing the migrations (both those of the PIM
25 | and those of the Onboarder bundle), please make sure to follow the additional instructions of the ``UPGRADE.md`` file
26 | contained in the bundle (``vendor/akeneo/pim-onboarder/UPGRADE.md``). It will provide you accurate instructions on how
27 | to run the migration scripts.
28 |
29 | You can then follow the rest of the PIM upgrade instructions.
30 |
--------------------------------------------------------------------------------
/reference_entities/configure_entity_limits.rst:
--------------------------------------------------------------------------------
1 | Configure Entity Limits
2 | =======================
3 |
4 | For the Reference Entities feature (*introduced in 3.0*), some limits about the number of entities have been defined to guarantee that the PIM is functional and runs smoothly.
5 | However, as your catalog is unique, **you may need to raise those values**, this chapter explains how.
6 |
7 | .. warning::
8 | If you hit those limits, this could reflect that **your modelization is not adapted**. If it's the case, we can't guarantee that the PIM will be functional and runs smoothly, be sure to test the performances with your new limits.
9 |
10 | All those limits are defined as parameters that you can override like any other `Symfony config parameter `_.
11 |
12 | Raise the limit of Reference Entities
13 | -------------------------------------
14 | By default, you can't create more than **200 Reference Entities**.
15 | If you want to create more, you have to edit the ``reference_entity_limit`` parameter, for example:
16 |
17 | .. code-block:: yaml
18 | :linenos:
19 |
20 | # app/config/parameters.yml
21 | parameters:
22 | reference_entity_limit: 250
23 |
24 | Raise the limit of Attributes per Reference Entity
25 | --------------------------------------------------
26 | By default, you can't create more than **100 Attributes per Reference Entity**.
27 | If you want to create more, you have to edit the ``reference_entity_maximum_attribute`` parameter, for example:
28 |
29 | .. code-block:: yaml
30 | :linenos:
31 |
32 | # app/config/parameters.yml
33 | parameters:
34 | reference_entity_maximum_attribute: 130
35 |
36 | Raise the limit of Options for "Simple Option" and "Multiple Option" Attributes
37 | -------------------------------------------------------------------------------
38 | You can't create more than **100** options for each **"Simple Option" and "Multiple Option"**.
39 | If you need more than 100 options, we advise you to create a dedicated reference entity.
40 |
41 |
42 | Raise the limit of Records per Reference Entity
43 | -----------------------------------------------
44 | By default, you can't create more than **1 000 000** (*one million*) **Records per Reference Entity**.
45 | If you want to create more, you have to edit the ``reference_entity_record_limit_per_reference_entity`` parameter, for example:
46 |
47 | .. code-block:: yaml
48 | :linenos:
49 |
50 | # app/config/parameters.yml
51 | parameters:
52 | reference_entity_record_limit_per_reference_entity: 2000000
53 |
--------------------------------------------------------------------------------
/reference_entities/index.rst:
--------------------------------------------------------------------------------
1 | Reference Entities
2 | ==================
3 |
4 | .. note::
5 |
6 | Reference Entities feature is only available for the **Enterprise Edition**.
7 |
8 | .. note::
9 |
10 | In this current documentation, we provide a way to add a custom attribute type and enrich it.
11 | However, this extensibility point is pretty new and **we couldn't ensure the backward compatibility** in the next minor releases.
12 |
13 | This part of the documentation is about the Reference Entities feature.
14 | Reference entities are objects related to products with their own attributes and lifecycle (ie. brands, ranges, manufacturers, colors, materials, care instructions...).
15 |
16 | .. toctree::
17 | :maxdepth: 2
18 | :titlesonly:
19 | :hidden:
20 |
21 | configure_entity_limits
22 | create_new_attribute_type
23 | enrich_a_record_with_new_attribute_type
24 | add_custom_property_to_your_custom_attribute_type
25 | refresh_records
26 |
--------------------------------------------------------------------------------
/reference_entities/refresh_records.rst:
--------------------------------------------------------------------------------
1 | Refresh records completeness
2 | ============================
3 |
4 | .. note::
5 |
6 | Reference Entities feature is only available for the **Enterprise Edition**.
7 |
8 | Usecases
9 | --------
10 |
11 | Let's say we have some records having a value for each of those attributes:
12 |
13 | - 1 attribute of type Single Option
14 | - 1 attribute of type Multiple Option
15 | - 1 attribute of type Reference entity single link
16 | - 1 attribute of type Reference entity multiple links
17 |
18 | Whenever an option is removed from the Option (or Option collection) attribute, the records having the deleted option have to be refreshed in order to correctly compute the completeness.
19 |
20 | The same operation needs to happen if a record referenced by another record (through a Reference entity single link or Reference entity multiple links attribute) is deleted.
21 | All the records referencing the deleted record needs to be refreshed.
22 |
23 | .. note::
24 |
25 | The record's data coming out of the API will always be accurate, yet filtering on the records' completeness may be de-synchronised.
26 |
27 | Command line
28 | ------------
29 |
30 | To achieve this result, you can use the command:
31 |
32 | .. code-block:: bash
33 |
34 | $ php bin/console --env=prod akeneo:reference-entity:refresh-records
35 |
36 |
37 | This command will go over all the records of the database and refresh all the record's values.
38 |
39 | It is advised to program a crontab to run at least every day when the users are not using the PIM.
40 |
41 | Depending on your reference entities' size (number of records and number of attributes option, option collection, record link and record multiple link) you can run this command multiple times a day.
42 |
43 | .. note::
44 |
45 | There are chances this command will be deprecated in 3.1 as we may be able to find a solution to refresh the records directly after an option or record deletion.
46 |
--------------------------------------------------------------------------------
/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow: /
--------------------------------------------------------------------------------
/scripts/update-doc-versions.php:
--------------------------------------------------------------------------------
1 | $newVersionLabel,
20 | 'url' => "/$branch/index.html"
21 | ];
22 |
23 | writeReorderedVersions($versions, $versionFile);
24 |
25 | function containsVersionLabel(array $versions, string $versionLabel): bool
26 | {
27 | foreach ($versions as $version) {
28 | if ($versionLabel === $version['label']) {
29 | return true;
30 | }
31 | }
32 |
33 | return false;
34 | }
35 |
36 | function versionLabelFromBranchName(string $branchName): string
37 | {
38 | return $branchName == "master" ? $branchName : "v${branchName}";
39 | }
40 |
41 | function writeReorderedVersions(array $versions, string $versionFile): void
42 | {
43 | $versions = orderVersions($versions);
44 | file_put_contents("$versionFile", json_encode($versions, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
45 | }
46 |
47 | function orderVersions(array $versions): array
48 | {
49 | usort($versions, static function (array $versionA, array $versionB) {
50 | if ($versionA['label'] === "master") return -1;
51 | if ($versionB['label'] === "master") return 1;
52 |
53 | return $versionB <=> $versionA;
54 | });
55 |
56 | return $versions;
57 | }
58 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/AppBundle/AcmeAppBundle.php:
--------------------------------------------------------------------------------
1 | load('entities.yml');
16 | $loader->load('attribute_types.yml');
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Entity/Category.php:
--------------------------------------------------------------------------------
1 | description;
14 | }
15 |
16 | public function setDescription($description)
17 | {
18 | $this->description = $description;
19 |
20 | return $this;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Entity/CategoryTranslation.php:
--------------------------------------------------------------------------------
1 | description;
14 | }
15 |
16 | public function setDescription($description)
17 | {
18 | $this->description = $description;
19 |
20 | return $this;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Entity/Color.php:
--------------------------------------------------------------------------------
1 | color;
25 | }
26 |
27 | /**
28 | * Sets the color
29 | *
30 | * @param Color $color
31 | *
32 | * @return MyProductValue
33 | */
34 | public function setColor(Color $color)
35 | {
36 | $this->color = $color;
37 |
38 | return $this;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Entity/TranslatableCategory.php:
--------------------------------------------------------------------------------
1 | getTranslation()) ? $this->getTranslation()->getDescription() : null;
12 |
13 | return ($translated !== '' && $translated !== null) ? $translated : '['.$this->getCode().']';
14 | }
15 |
16 | public function setDescription($description)
17 | {
18 | $this->getTranslation()->setDescription($description);
19 |
20 | return $this;
21 | }
22 |
23 | public function getTranslationFQCN()
24 | {
25 | return CategoryTranslation::class;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Form/Type/CategoryType.php:
--------------------------------------------------------------------------------
1 | add('description', TextType::class,
23 | [
24 | 'required' => true
25 | ]
26 | );
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Form/Type/TranslatableCategoryType.php:
--------------------------------------------------------------------------------
1 | add(
24 | 'description',
25 | TranslatableFieldType::class,
26 | [
27 | 'field' => 'description',
28 | 'translation_class' => $this->translationDataClass,
29 | 'entity_class' => $this->dataClass,
30 | 'property_path' => 'translations',
31 | 'widget' => TextareaType::class,
32 | ]
33 | );
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Resources/config/attribute_types.yml:
--------------------------------------------------------------------------------
1 | parameters:
2 | pim_datagrid.product.attribute_type.acme_color:
3 | column:
4 | type: flexible_option
5 | selector: flexible_option
6 | filter:
7 | type: flexible_choice
8 | parent_type: ajax_choice
9 | options:
10 | field_options:
11 | multiple: true
12 | sorter: flexible_field
13 |
14 | services:
15 | acme_catalog.attributetype.color:
16 | class: '%pim_custom_entity.attribute_type.custom_option_simple_select.class%'
17 | arguments:
18 | - color
19 | - pim_ajax_entity
20 | - '@pim_catalog.validator.constraint_guesser.chained_attribute'
21 | - acme_catalog_color
22 | - Acme\Bundle\CatalogBundle\Entity\Color
23 | tags:
24 | - { name: pim_catalog.attribute_type, alias: acme_catalog_color, entity: '%pim_catalog.entity.product.class%' }
25 |
26 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Resources/config/doctrine/Category.orm.yml:
--------------------------------------------------------------------------------
1 | Acme\Bundle\CatalogBundle\Entity\Category:
2 | type: entity
3 | table: pim_catalog_category
4 | changeTrackingPolicy: DEFERRED_EXPLICIT
5 | repositoryClass: Akeneo\Tool\Bundle\ClassificationBundle\Doctrine\ORM\Repository\CategoryRepository
6 | uniqueConstraints:
7 | pim_category_code_uc:
8 | columns:
9 | - code
10 | gedmo:
11 | tree:
12 | type: nested
13 | fields:
14 | description:
15 | type: string
16 | length: 255
17 | nullable: true
18 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Resources/config/doctrine/CategoryTranslation.orm.yml:
--------------------------------------------------------------------------------
1 | Acme\Bundle\CatalogBundle\Entity\CategoryTranslation:
2 | type: entity
3 | table: pim_catalog_category_translation
4 | changeTrackingPolicy: DEFERRED_EXPLICIT
5 | uniqueConstraints:
6 | locale_foreign_key_idx:
7 | columns:
8 | - locale
9 | - foreign_key
10 | fields:
11 | description:
12 | type: text
13 | nullable: true
14 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Resources/config/doctrine/Color.orm.yml:
--------------------------------------------------------------------------------
1 | Acme\Bundle\CatalogBundle\Entity\Color:
2 | type: entity
3 | table: acme_catalog_color
4 | repositoryClass: Pim\Bundle\CustomEntityBundle\Entity\Repository\TranslatableCustomOptionRepository
5 | fields:
6 | id:
7 | type: integer
8 | id: true
9 | generator:
10 | strategy: AUTO
11 | code:
12 | type: string
13 | length: 100
14 | unique: true
15 | created:
16 | type: datetime
17 | gedmo:
18 | timestampable:
19 | on: create
20 | updated:
21 | type: datetime
22 | gedmo:
23 | timestampable:
24 | on: update
25 | oneToMany:
26 | translations:
27 | targetEntity: Acme\Bundle\CatalogBundle\Entity\ColorTranslation
28 | mappedBy: foreignKey
29 | cascade:
30 | - persist
31 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Resources/config/doctrine/ColorTranslation.orm.yml:
--------------------------------------------------------------------------------
1 | Acme\Bundle\CatalogBundle\Entity\ColorTranslation:
2 | type: entity
3 | table: acme_catalog_color_translation
4 | uniqueConstraints:
5 | locale_foreign_key_idx:
6 | columns:
7 | - locale
8 | - foreign_key
9 | fields:
10 | id:
11 | type: integer
12 | id: true
13 | generator:
14 | strategy: AUTO
15 | label:
16 | type: string
17 | length: 100
18 | nullable: true
19 | locale:
20 | type: string
21 | length: 20
22 | manyToOne:
23 | foreignKey:
24 | targetEntity: Acme\Bundle\CatalogBundle\Entity\Color
25 | inversedBy: translations
26 | joinColumns:
27 | foreign_key:
28 | referencedColumnName: id
29 | onDelete: CASCADE
30 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Resources/config/doctrine/TranslatableCategory.orm.yml:
--------------------------------------------------------------------------------
1 | Acme\Bundle\CatalogBundle\Entity\Category:
2 | type: entity
3 | table: pim_catalog_category
4 | changeTrackingPolicy: DEFERRED_EXPLICIT
5 | repositoryClass: Akeneo\Tool\Bundle\ClassificationBundle\Doctrine\ORM\Repository\CategoryRepository
6 | uniqueConstraints:
7 | pim_category_code_uc:
8 | columns:
9 | - code
10 | gedmo:
11 | tree:
12 | type: nested
13 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Resources/config/entities.yml:
--------------------------------------------------------------------------------
1 | parameters:
2 | pim_catalog.entity.product_value.class: Acme\Bundle\CatalogBundle\Entity\MyProductValue
3 | pim_catalog.entity.category.class: Acme\Bundle\CatalogBundle\Entity\Category
4 | pim_catalog.entity.category_translation.class: Acme\Bundle\CatalogBundle\Entity\CategoryTranslation
5 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Resources/config/form_types.yml:
--------------------------------------------------------------------------------
1 | parameters:
2 | pim_enrich.view_element.category.tab.property.template: 'AcmeCatalogBundle:CategoryTree:Tab/property.html.twig'
3 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CatalogBundle/Resources/config/validation/category.yml:
--------------------------------------------------------------------------------
1 | Acme\Bundle\CatalogBundle\Entity\Category:
2 | properties:
3 | description:
4 | - NotBlank: ~
5 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CsvCleanerConnectorBundle/AcmeCsvCleanerConnectorBundle.php:
--------------------------------------------------------------------------------
1 | productConverter = $productConverter;
18 | }
19 |
20 | public function convert(array $item, array $options = [])
21 | {
22 | // cleans the sku
23 | $item['sku'] = str_replace('uselesspart-', '', $item['sku']);
24 |
25 | $convertedItem = $this->productConverter->convert($item, $options);
26 |
27 |
28 |
29 | return $convertedItem;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CsvCleanerConnectorBundle/DependencyInjection/AcmeCsvCleanerConnectorExtension.php:
--------------------------------------------------------------------------------
1 | load('array_converters.yml');
16 | $loader->load('jobs.yml');
17 | $loader->load('job_constraints.yml');
18 | $loader->load('job_defaults.yml');
19 | $loader->load('job_parameters.yml');
20 | $loader->load('readers.yml');
21 | $loader->load('steps.yml');
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CsvCleanerConnectorBundle/Resources/config/array_converters.yml:
--------------------------------------------------------------------------------
1 | parameters:
2 | acme_csvcleanerconnector.array_converter.flat.product.class: 'Acme\Bundle\CsvCleanerConnectorBundle\ArrayConverter\StandardToFlat\Product'
3 |
4 | services:
5 | acme_csvcleanerconnector.array_converter.flat.product:
6 | class: '%acme_csvcleanerconnector.array_converter.flat.product.class%'
7 | arguments:
8 | - '@pim_connector.array_converter.flat_to_standard.product_delocalized'
9 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CsvCleanerConnectorBundle/Resources/config/job_constraints.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_csvcleanerconnector.job.job_parameters.constraint_collection_provider.product_csv_import:
3 | class: '%pim_connector.job.job_parameters.constraint_collection_provider.product_csv_import.class%'
4 | arguments:
5 | - '@pim_connector.job.job_parameters.constraint_collection_provider.simple_csv_import'
6 | -
7 | - 'csv_product_import_cleaner'
8 | tags:
9 | - { name: akeneo_batch.job.job_parameters.constraint_collection_provider }
10 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CsvCleanerConnectorBundle/Resources/config/job_defaults.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_csvcleanerconnector.job.job_parameters.default_values_provider.product_csv_import:
3 | class: '%pim_connector.job.job_parameters.default_values_provider.product_csv_import.class%'
4 | arguments:
5 | - '@pim_connector.job.job_parameters.default_values_provider.simple_csv_import'
6 | -
7 | - 'csv_product_import_cleaner'
8 | tags:
9 | - { name: akeneo_batch.job.job_parameters.default_values_provider }
10 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CsvCleanerConnectorBundle/Resources/config/job_parameters.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_csvcleanerconnector.job_parameters.form_configuration_provider.product_csv_import_cleaner:
3 | class: '%pim_import_export.job_parameters.form_configuration_provider.product_csv_import.class%'
4 | arguments:
5 | - '@pim_import_export.job_parameters.form_configuration_provider.simple_csv_import'
6 | -
7 | - 'csv_product_import_cleaner'
8 | - '%pim_catalog.localization.decimal_separators%'
9 | - '%pim_catalog.localization.date_formats%'
10 | tags:
11 | - { name: pim_import_export.job_parameters.form_configuration_provider }
12 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CsvCleanerConnectorBundle/Resources/config/jobs.yml:
--------------------------------------------------------------------------------
1 | parameters:
2 | acme_csvcleanerconnector.job_name.csv_product_import_cleaner: 'csv_product_import_cleaner'
3 |
4 | services:
5 | acme_csvcleanerconnector.job.csv_product_import_cleaner:
6 | class: '%pim_connector.job.simple_job.class%'
7 | arguments:
8 | - '%acme_csvcleanerconnector.job_name.csv_product_import_cleaner%'
9 | - '@event_dispatcher'
10 | - '@akeneo_batch.job_repository'
11 | -
12 | - '@pim_connector.step.charset_validator'
13 | - '@acme_csvcleanerconnector.step.csv_product.import'
14 | tags:
15 | - { name: akeneo_batch.job, connector: '%pim_connector.connector_name.csv%', type: '%pim_connector.job.import_type%' }
16 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CsvCleanerConnectorBundle/Resources/config/readers.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_csvcleanerconnector.reader.file.csv_product:
3 | class: '%pim_connector.reader.file.csv_product.class%'
4 | arguments:
5 | - '@pim_connector.reader.file.csv_iterator_factory'
6 | - '@acme_csvcleanerconnector.array_converter.flat.product'
7 | - '@pim_connector.reader.file.media_path_transformer'
8 | - []
9 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CsvCleanerConnectorBundle/Resources/config/steps.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_csvcleanerconnector.step.csv_product.import:
3 | class: '%pim_connector.step.item_step.class%'
4 | arguments:
5 | - 'import'
6 | - '@event_dispatcher'
7 | - '@akeneo_batch.job_repository'
8 | - '@acme_csvcleanerconnector.reader.file.csv_product'
9 | - '@pim_connector.processor.denormalization.product'
10 | - '@pim_connector.writer.database.product'
11 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CsvCleanerConnectorBundle/Resources/fixtures/products.csv:
--------------------------------------------------------------------------------
1 | sku;name
2 | uselesspart-sku-1;my full name 1
3 | uselesspart-sku-2;my full name 2
4 | uselesspart-sku-3;my full name 3
5 |
6 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CsvCleanerConnectorBundle/Resources/translations/messages.en.yml:
--------------------------------------------------------------------------------
1 | batch_jobs:
2 | csv_product_import_cleaner:
3 | label: Product Import Cleaned Csv
4 | import.label: Product import cleaned
5 | validation.label: File encoding validation
6 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CustomMassActionBundle/AcmeCustomMassActionBundle.php:
--------------------------------------------------------------------------------
1 | load('form_types.yml');
16 | $loader->load('job_parameters.yml');
17 | $loader->load('jobs.yml');
18 | $loader->load('mass_actions.yml');
19 | $loader->load('processors.yml');
20 | $loader->load('steps.yml');
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CustomMassActionBundle/Form/Type/MassEditAction/CapitalizeValuesType.php:
--------------------------------------------------------------------------------
1 | setDefaults(
19 | [
20 | 'data_class' => 'Acme\\Bundle\\CustomMassActionBundle\\MassEditAction\\Operation\\CapitalizeValues'
21 | ]
22 | );
23 | }
24 |
25 | public function getName()
26 | {
27 | return 'acme_custom_mass_action_operation_capitalize_values';
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CustomMassActionBundle/MassEditAction/Operation/CapitalizeValues.php:
--------------------------------------------------------------------------------
1 | 'name',
40 | 'options' => ['locale' => null, 'scope' => null]
41 | ];
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CustomMassActionBundle/Resources/config/form_types.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_custom_mass_action.form.type.capitalize_values:
3 | class: Acme\Bundle\CustomMassActionBundle\Form\Type\MassEditAction\CapitalizeValuesType
4 | tags:
5 | - { name: form.type, alias: acme_custom_mass_action_operation_capitalize_values }
6 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CustomMassActionBundle/Resources/config/job_parameters.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_custom_mass_action.connector.job.job_parameters.default_values_provider.product_mass_edit:
3 | class: '%pim_enrich.connector.job.job_parameters.default_values_provider.product_mass_edit.class%'
4 | arguments:
5 | - ['mass_edit_capitalize_values']
6 | tags:
7 | - { name: akeneo_batch.job.job_parameters.default_values_provider }
8 |
9 | acme_custom_mass_action.connector.job.job_parameters.constraint_collection_provider.product_mass_edit:
10 | class: '%pim_enrich.connector.job.job_parameters.constraint_collection_provider.product_mass_edit.class%'
11 | arguments:
12 | - ['mass_edit_capitalize_values']
13 | tags:
14 | - { name: akeneo_batch.job.job_parameters.constraint_collection_provider }
15 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CustomMassActionBundle/Resources/config/jobs.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_custom_mass_action.job.capitalize_values:
3 | class: '%pim_connector.job.simple_job.class%'
4 | arguments:
5 | - 'mass_edit_capitalize_values'
6 | - '@event_dispatcher'
7 | - '@akeneo_batch.job_repository'
8 | -
9 | - '@acme_custom_mass_action.step.capitalize_values.mass_edit'
10 | tags:
11 | - { name: akeneo_batch.job, connector: '%pim_enrich.connector_name.mass_edit%', type: '%pim_enrich.job.mass_edit_type%' }
12 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CustomMassActionBundle/Resources/config/mass_actions.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_custom_mass_action.mass_edit_action.capitalize_values:
3 | public: false
4 | class: Acme\Bundle\CustomMassActionBundle\MassEditAction\Operation\CapitalizeValues
5 | arguments:
6 | - 'mass_edit_capitalize_values'
7 | tags:
8 | -
9 | name: pim_enrich.mass_edit_action
10 | alias: capitalize-values
11 | acl: pim_enrich_product_edit_attributes
12 | datagrid: product-grid
13 | operation_group: mass-edit
14 | form_type: acme_custom_mass_action_operation_capitalize_values
15 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CustomMassActionBundle/Resources/config/processors.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_custom_mass_action.mass_edit.capitalize_values.processor:
3 | class: Acme\Bundle\CustomMassActionBundle\Connector\Processor\MassEdit\Product\CapitalizeValuesProcessor
4 | arguments:
5 | - '@pim_catalog.updater.product_property_setter'
6 | - '@pim_catalog.validator.product'
7 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CustomMassActionBundle/Resources/config/steps.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_custom_mass_action.step.capitalize_values.mass_edit:
3 | class: '%pim_connector.step.item_step.class%'
4 | arguments:
5 | - 'mass_edit_capitalize_values'
6 | - '@event_dispatcher'
7 | - '@akeneo_batch.job_repository'
8 | - '@pim_connector.reader.database.product'
9 | - '@acme_custom_mass_action.mass_edit.capitalize_values.processor'
10 | - '@pim_connector.writer.database.product'
11 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CustomMassActionBundle/Resources/fixtures/jobs.yml:
--------------------------------------------------------------------------------
1 | jobs:
2 | mass_edit_capitalize_values:
3 | connector: Akeneo Mass Edit Connector
4 | alias: mass_edit_capitalize_values
5 | label: Mass capitalize products value
6 | type: mass_edit
7 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/CustomMassActionBundle/Resources/translations/messages.en.yml:
--------------------------------------------------------------------------------
1 | pim_enrich.mass_edit_action:
2 | capitalize-values:
3 | label: Capitalize values
4 | description: The selected product(s) will have capitalized values
5 | launched_flash: The bulk action "capitalize values" has been launched. You will be notified when it is done.
6 | success_flash: Product(s) values have been updated
7 |
8 | batch_jobs:
9 | mass_edit_capitalize_values:
10 | capitalize_values:
11 | label: Capitalize values
12 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/EnrichBundle/AcmeEnrichBundle.php:
--------------------------------------------------------------------------------
1 | load('form_types.yml');
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/EnrichBundle/Form/Type/ColorType.php:
--------------------------------------------------------------------------------
1 | add('code')
21 | ->add(
22 | 'label',
23 | TranslatableFieldType::class,
24 | array(
25 | 'field' => 'label',
26 | 'translation_class' => 'Acme\Bundle\CatalogBundle\Entity\ColorTranslation',
27 | 'entity_class' => $options['data_class'],
28 | 'property_path' => 'translations'
29 | )
30 | );
31 | }
32 |
33 | /**
34 | * {@inheritdoc}
35 | */
36 | public function getName()
37 | {
38 | return 'acme_enrich_color';
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/EnrichBundle/Resources/config/custom_entities.yml:
--------------------------------------------------------------------------------
1 | custom_entities:
2 | color:
3 | entity_class: Acme\Bundle\CatalogBundle\Entity\Color
4 | actions:
5 | edit:
6 | form_type: acme_enrich_color
7 | create:
8 | form_type: acme_enrich_color
9 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/EnrichBundle/Resources/config/datagrid.yml:
--------------------------------------------------------------------------------
1 | datagrid:
2 | color:
3 | extends: custom_entity
4 | options:
5 | entityHint: color
6 | columns:
7 | code:
8 | label: Code
9 | label:
10 | label: Label
11 | created:
12 | label: Created
13 | frontend_type: date
14 | updated:
15 | label: Updated
16 | frontend_type: date
17 | filters:
18 | columns:
19 | code:
20 | type: string
21 | label: Code
22 | data_name: o.code
23 | label:
24 | type: string
25 | label: Label
26 | data_name: translation.label
27 | created:
28 | type: date
29 | label: Created
30 | data_name: o.created
31 | filter_by_having: true
32 | updated:
33 | type: date
34 | label: Updated
35 | data_name: o.updated
36 | filter_by_having: true
37 | sorters:
38 | columns:
39 | code:
40 | data_name: o.code
41 | label:
42 | data_name: translation.label
43 | created:
44 | data_name: o.created
45 | updated:
46 | data_name: o.updated
47 | default:
48 | code: '%oro_datagrid.extension.orm_sorter.class%::DIRECTION_ASC'
49 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/EnrichBundle/Resources/config/form_types.yml:
--------------------------------------------------------------------------------
1 | parameters:
2 | pim_enrich.view_element.category.tab.property.template: 'AcmeEnrichBundle:CategoryTree:Tab/property.html.twig'
3 |
4 | services:
5 | acme_enrich.form.type.color:
6 | class: Acme\Bundle\EnrichBundle\Form\Type\ColorType
7 | tags:
8 | - { name: form.type, alias: acme_enrich_color }
9 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/EnrichBundle/Resources/config/navigation.yml:
--------------------------------------------------------------------------------
1 | oro_menu_config:
2 | items:
3 | acme_enrich_color:
4 | label: 'Colors'
5 | route: 'pim_customentity_index'
6 | routeParameters: { customEntityName: color }
7 |
8 | tree:
9 | application_menu:
10 | children:
11 | pim_enrich_tab:
12 | children:
13 | acme_enrich_color: ~
14 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/EnrichBundle/Resources/config/view_elements/attribute.yml:
--------------------------------------------------------------------------------
1 | services:
2 | pim_enrich.view_element.attribute.tab.parameter:
3 | class: Acme\Bundle\EnrichBundle\View\Tab\MyCustomTab
4 | arguments:
5 | - 'pim_enrich.attribute.tab.parameter'
6 | - '%pim_enrich.view_element.attribute.tab.parameter.template%'
7 | tags:
8 | - { name: pim_enrich.view_element, type: pim_enrich_attribute_form.form_tab, position: 90 }
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/EnrichBundle/Resources/config/view_elements/category.yml:
--------------------------------------------------------------------------------
1 | parameters:
2 | pim_enrich.view_element.category.tab.property.template: 'AcmeEnrichBundle:Category:Tab/my_property.html.twig'
3 |
4 | services:
5 | pim_enrich.view_element.category.tab.history:
6 | parent: pim_enrich.view_element.base
7 | arguments:
8 | - 'pim_enrich.category.tab.history'
9 | - '%pim_enrich.view_element.category.tab.history.template%'
10 | calls:
11 | - [ addVisibilityChecker, ['@acme_enrich.view_element.visibility_checker.my_custom_visibility_checker', {my_custom_option: 'my_custom_option_value'}] ]
12 | tags:
13 | - { name: pim_enrich.view_element, type: pim_category.form_tab, position: 110 }
14 |
15 | pim_enrich.view_element.category.tab.my_custom_tab:
16 | parent: pim_enrich.view_element.base
17 | arguments:
18 | - 'pim_enrich.category.tab.my_custom_tab_title'
19 | - 'AcmeEnrichBundle:Category:Tab/my_custom_tab.html.twig'
20 | calls:
21 | - [ addVisibilityChecker, ['@pim_enrich.view_element.visibility_checker.edit_form'] ]
22 | tags:
23 | - { name: pim_enrich.view_element, type: pim_category.form_tab, position: 120 }
24 |
25 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/InstallerBundle/AcmeInstallerBundle.php:
--------------------------------------------------------------------------------
1 | load('processors.yml');
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/InstallerBundle/Resources/config/fixtures.yml:
--------------------------------------------------------------------------------
1 | colors:
2 | order: 70
3 | csv:
4 | processor: acme_installer.processor.color
5 | yml:
6 | processor: acme_installer.processor.color
7 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/InstallerBundle/Resources/config/processors.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_installer.processor.color:
3 | parent: pim_base_connector.processor.transformer
4 | arguments:
5 | - Acme\Bundle\CatalogBundle\Entity\Color
6 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/InstallerBundle/Resources/fixtures/mydataset/attribute_groups.yml:
--------------------------------------------------------------------------------
1 | attribute_groups:
2 | other:
3 | sort_order: 100
4 | labels:
5 | en_US: Other
6 | fr_FR: Autre
7 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/InstallerBundle/Resources/fixtures/mydataset/attributes.yml:
--------------------------------------------------------------------------------
1 | attributes:
2 | sku:
3 | labels:
4 | en_US: SKU
5 | type: pim_catalog_identifier
6 | group: other
7 | required: true
8 | unique: true
9 | useableAsGridFilter: true
10 | sortOrder: 1
11 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/InstallerBundle/Resources/fixtures/mydataset/categories.yml:
--------------------------------------------------------------------------------
1 | categories:
2 | default:
3 | labels:
4 | en_US: Master catalog
5 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/InstallerBundle/Resources/fixtures/mydataset/channels.csv:
--------------------------------------------------------------------------------
1 | code;label;currencies;locales;tree
2 | default;Default;en_US;USD;default
3 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/InstallerBundle/Resources/fixtures/mydataset/colors.csv:
--------------------------------------------------------------------------------
1 | code;label-en_US
2 | RED;red
3 | BLUE;blue
4 | ORANGE;orange
5 | GREEN;green
--------------------------------------------------------------------------------
/src/Acme/Bundle/InstallerBundle/Resources/fixtures/mydataset/currencies.yml:
--------------------------------------------------------------------------------
1 | currencies:
2 | - USD
3 | removed_currencies:
4 | - ADP
5 | - AFA
6 | - ALK
7 | - AOK
8 | - AON
9 | - AOR
10 | - ARM
11 | - ARP
12 | - ARL
13 | - ATS
14 | - AZM
15 | - BAD
16 | - BAN
17 | - BEC
18 | - BEF
19 | - BEL
20 | - BGL
21 | - BGM
22 | - BGO
23 | - BOL
24 | - BOP
25 | - BRB
26 | - BRC
27 | - BRE
28 | - BRR
29 | - BRN
30 | - BRZ
31 | - BYB
32 | - CHE
33 | - CHW
34 | - CSD
35 | - CSK
36 | - DEM
37 | - EEK
38 | - ESA
39 | - ESB
40 | - ESP
41 | - FIM
42 | - FRF
43 | - GHC
44 | - GRD
45 | - GYD
46 | - IEP
47 | - ISJ
48 | - ILR
49 | - ITL
50 | - KRH
51 | - KRO
52 | - LUF
53 | - LVR
54 | - MGF
55 | - MKN
56 | - MTL
57 | - MXP
58 | - MZE
59 | - MZM
60 | - NIC
61 | - NLG
62 | - PES
63 | - PLZ
64 | - PTE
65 | - ROL
66 | - SDD
67 | - SDP
68 | - SIT
69 | - SKK
70 | - SUR
71 | - TMM
72 | - TPE
73 | - TRL
74 | - UGS
75 | - UYP
76 | - VEB
77 | - VNN
78 | - XAU
79 | - XBA
80 | - XBB
81 | - XBC
82 | - XBD
83 | - XEU
84 | - XFO
85 | - XFU
86 | - XPD
87 | - XDR
88 | - XSU
89 | - XTS
90 | - XXX
91 | - YUD
92 | - YUM
93 | - YUN
94 | - YUR
95 | - ZMK
96 | - ZRN
97 | - ZRZ
98 | - ZWD
99 | - ZWL
100 | - ZWR
101 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/InstallerBundle/Resources/fixtures/mydataset/group_types.yml:
--------------------------------------------------------------------------------
1 | group_types:
2 | VARIANT:
3 | variant: 1
4 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/InstallerBundle/Resources/fixtures/mydataset/locales.yml:
--------------------------------------------------------------------------------
1 | locales:
2 | en_US:
3 | fallback: ~
4 | currency: USD
5 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/InstallerBundle/Resources/fixtures/mydataset/users.yml:
--------------------------------------------------------------------------------
1 | users:
2 | admin:
3 | username: admin
4 | password: admin
5 | email: admin@example.com
6 | firstname: Peter
7 | lastname: Doe
8 | owner: Main
9 | catalog_locale: en_US
10 | catalog_scope: ecommerce
11 | default_tree: master
12 | role: ROLE_ADMINISTRATOR
13 | enable: true
14 | julia:
15 | username: julia
16 | password: julia
17 | email: julia@example.com
18 | firstname: Julia
19 | lastname: Zaro
20 | owner: Main
21 | catalog_locale: de_DE
22 | catalog_scope: ecommerce
23 | default_tree: master
24 | role: ROLE_MANAGER
25 | enable: true
26 | mary:
27 | username: mary
28 | password: mary
29 | email: mary@example.com
30 | firstname: Mary
31 | lastname: Doe
32 | owner: Main
33 | catalog_locale: en_US
34 | catalog_scope: ecommerce
35 | default_tree: master
36 | role: ROLE_USER
37 | enable: true
38 | sandra:
39 | username: sandra
40 | password: sandra
41 | email: sandra@example.com
42 | firstname: Sandra
43 | lastname: Doe
44 | owner: Main
45 | catalog_locale: en_US
46 | catalog_scope: ecommerce
47 | default_tree: master
48 | role: ROLE_USER
49 | enable: true
50 | peter:
51 | username: peter
52 | password: peter
53 | email: peter@example.com
54 | firstname: Peter
55 | lastname: Doe
56 | owner: Main
57 | catalog_locale: en_US
58 | catalog_scope: ecommerce
59 | default_tree: master
60 | role: ROLE_ADMINISTRATOR
61 | enable: true
62 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/InstallerBundle/Ressources/fixtures/icecat_demo_dev/jobs.yml:
--------------------------------------------------------------------------------
1 | jobs:
2 | capitalize_values:
3 | connector: Akeneo Mass Edit Connector
4 | alias: capitalize_values
5 | label: Mass edit capitalize values
6 | type: mass_edit
7 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/NotifyConnectorBundle/AcmeNotifyConnectorBundle.php:
--------------------------------------------------------------------------------
1 | load('jobs.yml');
16 | $loader->load('job_parameters.yml');
17 | $loader->load('job_profile.yml');
18 | $loader->load('steps.yml');
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/NotifyConnectorBundle/JobParameters/ProductCsvExportNotify.php:
--------------------------------------------------------------------------------
1 | baseDefaultValuesProvider = $baseDefaultValuesProvider;
35 | $this->baseConstraintCollectionProvider = $baseConstraintCollectionProvider;
36 | $this->supportedJobNames = $supportedJobNames;
37 | }
38 |
39 | /**
40 | * {@inheritdoc}
41 | */
42 | public function getDefaultValues()
43 | {
44 | return array_merge(
45 | $this->baseDefaultValuesProvider->getDefaultValues(),
46 | ['urlToNotify' => 'http://']
47 | );
48 | }
49 |
50 | /**
51 | * {@inheritdoc}
52 | */
53 | public function getConstraintCollection()
54 | {
55 | $baseConstraints = $this->baseConstraintCollectionProvider->getConstraintCollection();
56 | $constraintFields = array_merge(
57 | $baseConstraints->fields,
58 | ['urlToNotify' => new Url()]
59 | );
60 |
61 | return new Collection(['fields' => $constraintFields]);
62 | }
63 |
64 | /**
65 | * {@inheritdoc}
66 | */
67 | public function supports(JobInterface $job)
68 | {
69 | return in_array($job->getName(), $this->supportedJobNames);
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/NotifyConnectorBundle/Resources/config/job_parameters.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_notifyconnector.job.job_parameters.csv_product_export_notify:
3 | class: 'Acme\Bundle\NotifyConnectorBundle\JobParameters\ProductCsvExportNotify'
4 | arguments:
5 | - '@pim_connector.job.job_parameters.default_values_provider.product_csv_export'
6 | - '@pim_connector.job.job_parameters.constraint_collection_provider.product_csv_export'
7 | - ['%acme_notifyconnector.job_name.csv_product_export_notify%']
8 | tags:
9 | - { name: akeneo_batch.job.job_parameters.constraint_collection_provider }
10 | - { name: akeneo_batch.job.job_parameters.default_values_provider }
11 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/NotifyConnectorBundle/Resources/config/jobs.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_notifyconnector.csv_product_export_notify:
3 | class: 'Akeneo\Tool\Component\Batch\Job\Job'
4 | arguments:
5 | - 'csv_product_export_notify' # Job name
6 | - '@event_dispatcher'
7 | - '@akeneo_batch.job_repository'
8 | -
9 | - '@pim_connector.step.csv_product.export'
10 | - '@acme_notifyconnector.step.notify' # You new custom step
11 | - true # Does the job is stoppable ?
12 | tags:
13 | - { name: akeneo_batch.job, connector: 'Acme CSV Notify Connector', type: 'export' }
14 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/NotifyConnectorBundle/Resources/config/providers.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_notifyconnector.provider.form.job_instance:
3 | class: 'Akeneo\Platform\Bundle\ImportExportBundle\Provider\Form\JobInstanceFormProvider'
4 | arguments:
5 | -
6 | csv_product_export_notify: pim-job-instance-csv-product-export-notify
7 | tags:
8 | - { name: pim_enrich.provider.form }
9 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/NotifyConnectorBundle/Resources/config/steps.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_notifyconnector.step.notify:
3 | class: 'Acme\Bundle\NotifyConnectorBundle\Step\NotifyStep'
4 | arguments:
5 | - 'notify' # The step name
6 | - '@event_dispatcher'
7 | - '@akeneo_batch.job_repository'
8 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/NotifyConnectorBundle/Resources/translations/messages.en.yml:
--------------------------------------------------------------------------------
1 | acme_notify_connector:
2 | jobs:
3 | notify_product_import:
4 | title: Product Import With Notification
5 | export:
6 | title: Product Export Step
7 | notify:
8 | title: Notification Step
9 | url:
10 | label: Notify url to call
11 | help: The url to call at the end of the export
12 |
13 | job_execution.summary.notified: Notification sent
14 |
15 | batch_jobs:
16 | csv_product_export_notify:
17 | label: Product Import Notify Csv
18 | export.label: Product import notify
19 | validation.label: File encoding validation
20 | notify.label: Notify step
21 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/NotifyConnectorBundle/Step/NotifyStep.php:
--------------------------------------------------------------------------------
1 | getJobParameters();
14 |
15 | $directory = dirname($jobParameters->get('storage')['file_path']);
16 | $fields = sprintf('directory=%s', urlencode($directory));
17 | $url = $jobParameters->get('urlToNotify');
18 |
19 | $ch = curl_init();
20 | curl_setopt($ch, CURLOPT_URL, $url);
21 | curl_setopt($ch, CURLOPT_POST, true);
22 | curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
23 |
24 | if (false !== curl_exec($ch)) {
25 | $stepExecution->addSummaryInfo('notified', 'yes');
26 | } else {
27 | $stepExecution->addSummaryInfo('notified', 'no');
28 | $stepExecution->addError('Failed to call target URL: '.curl_error($ch));
29 | }
30 |
31 | curl_close($ch);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/XmlConnectorBundle/AcmeXmlConnectorBundle.php:
--------------------------------------------------------------------------------
1 | get('storage')['file_path'];
26 |
27 | $fileIterator = $this->fileIteratorFactory->create($filePath);
28 | $fileIterator->rewind();
29 |
30 | return $fileIterator;
31 | }
32 |
33 | /**
34 | * {@inheritdoc}
35 | */
36 | protected function setupWriter(JobExecution $jobExecution)
37 | {
38 | $fileKey = strtr($this->getRelativeArchivePath($jobExecution), ['%filename%' => 'invalid_items.xml']);
39 | $this->filesystem->put($fileKey, '');
40 |
41 | $writeParams = $this->defaultValuesProvider->getDefaultValues();
42 | $writeParams['storage'] = [
43 | 'type' => 'local',
44 | 'file_path' => $this->filesystem->getAdapter()->getPathPrefix() . $fileKey,
45 | ];
46 |
47 | $writeJobParameters = new JobParameters($writeParams);
48 | $writeJobExecution = new JobExecution();
49 | $writeJobExecution->setJobParameters($writeJobParameters);
50 |
51 | $stepExecution = new StepExecution('processor', $writeJobExecution);
52 | $this->writer->setStepExecution($stepExecution);
53 | $this->writer->initialize();
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/XmlConnectorBundle/DependencyInjection/AcmeXmlConnectorExtension.php:
--------------------------------------------------------------------------------
1 | load('archiving.yml');
16 | $loader->load('jobs.yml');
17 | $loader->load('job_parameters.yml');
18 | $loader->load('steps.yml');
19 | $loader->load('readers.yml');
20 | $loader->load('writers.yml');
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/XmlConnectorBundle/Resources/config/archiving.yml:
--------------------------------------------------------------------------------
1 | parameters:
2 | acme_xml_connector.archiver.invalid_item_xml_writer.class: Acme\Bundle\XmlConnectorBundle\Archiver\XmlInvalidItemWriter
3 |
4 | services:
5 | acme_xml_connector.archiver.invalid_item_xml_writer:
6 | class: '%acme_xml_connector.archiver.invalid_item_xml_writer.class%'
7 | arguments:
8 | - '@pim_connector.event_listener.invalid_items_collector'
9 | - '@acme_xml_connector.writer.file.invalid_items_xml'
10 | - '@acme_xml_connector.reader.file.xml_iterator_factory'
11 | - '@oneup_flysystem.archivist_filesystem'
12 | - '@acme_xml_connector.job.job_parameters.simple_xml_product_import'
13 | - 'xml'
14 | tags:
15 | - { name: pim_connector.archiver }
16 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/XmlConnectorBundle/Resources/config/job_parameters.yml:
--------------------------------------------------------------------------------
1 | parameters:
2 | acme_xml_connector.job.job_parameters.simple_xml_import.class: Acme\Bundle\XmlConnectorBundle\Job\JobParameters\SimpleXmlImport
3 |
4 | services:
5 | acme_xml_connector.job.job_parameters.simple_xml_product_import:
6 | class: '%acme_xml_connector.job.job_parameters.simple_xml_import.class%'
7 | arguments:
8 | - '%pim_catalog.localization.decimal_separators%'
9 | - '%pim_catalog.localization.date_formats%'
10 | tags:
11 | - { name: akeneo_batch.job.job_parameters.constraint_collection_provider }
12 | - { name: akeneo_batch.job.job_parameters.default_values_provider }
13 |
14 | acme_xml_connector.job.job_parameters.provider.simple_xml_product_import:
15 | class: 'Akeneo\Platform\Bundle\ImportExportBundle\Provider\Form\JobInstanceFormProvider'
16 | arguments:
17 | -
18 | xml_product_import: pim-job-instance-xml-product-import
19 | tags:
20 | - { name: pim_enrich.provider.form }
21 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/XmlConnectorBundle/Resources/config/jobs.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_xml_connector.job.xml_product_import:
3 | class: '%pim_connector.job.simple_job.class%'
4 | arguments:
5 | - 'xml_product_import'
6 | - '@event_dispatcher'
7 | - '@akeneo_batch.job_repository'
8 | -
9 | - '@acme_xml_connector.step.xml_product_import.import'
10 | tags:
11 | - { name: akeneo_batch.job, connector: 'Akeneo XML Connector', type: '%pim_connector.job.import_type%' }
12 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/XmlConnectorBundle/Resources/config/readers.yml:
--------------------------------------------------------------------------------
1 | parameters:
2 | acme_xml_connector.reader.file.xml_product.class: Acme\Bundle\XmlConnectorBundle\Reader\File\XmlProductReader
3 | acme_xml_connector.reader.file.file_iterator.class: Acme\Bundle\XmlConnectorBundle\Reader\File\XmlFileIterator
4 |
5 | services:
6 | acme_xml_connector.reader.file.xml_iterator_factory:
7 | class: '%pim_connector.reader.file.file_iterator_factory.class%'
8 | arguments:
9 | - '%acme_xml_connector.reader.file.file_iterator.class%'
10 | - 'xml'
11 |
12 | acme_xml_connector.reader.file.xml_product:
13 | class: '%acme_xml_connector.reader.file.xml_product.class%'
14 | arguments:
15 | - '@pim_connector.array_converter.flat_to_standard.product'
16 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/XmlConnectorBundle/Resources/config/steps.yml:
--------------------------------------------------------------------------------
1 | services:
2 | acme_xml_connector.step.xml_product_import.import:
3 | class: '%pim_connector.step.item_step.class%'
4 | arguments:
5 | - 'import'
6 | - '@event_dispatcher'
7 | - '@akeneo_batch.job_repository'
8 | - '@acme_xml_connector.reader.file.xml_product'
9 | - '@pim_connector.processor.denormalization.product'
10 | - '@pim_connector.writer.database.product'
11 | - 10
12 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/XmlConnectorBundle/Resources/config/writers.yml:
--------------------------------------------------------------------------------
1 | parameters:
2 | acme_xml_connector.writer.file.xml.class: Acme\Bundle\XmlConnectorBundle\Writer\XmlWriter
3 |
4 | services:
5 | acme_xml_connector.writer.file.invalid_items_xml:
6 | class: '%acme_xml_connector.writer.file.xml.class%'
7 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/XmlConnectorBundle/Resources/fixtures/products.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/Acme/Bundle/XmlConnectorBundle/Writer/XmlWriter.php:
--------------------------------------------------------------------------------
1 | xml) {
31 | $jobParameters = $this->stepExecution->getJobParameters();
32 | $filePath = $jobParameters->get('storage')['file_path'];
33 |
34 | $this->xml = new \XMLWriter();
35 | $this->xml->openURI($filePath);
36 | $this->xml->startDocument('1.0', 'UTF-8');
37 | $this->xml->setIndent(4);
38 | $this->xml->startElement('products');
39 | }
40 | }
41 |
42 | /**
43 | * {@inheritdoc}
44 | */
45 | public function getWrittenFiles()
46 | {
47 | return $this->writtenFiles;
48 | }
49 |
50 | /**
51 | * {@inheritdoc}
52 | */
53 | public function write(array $items)
54 | {
55 | $exportDirectory = dirname($this->getPath());
56 | if (!is_dir($exportDirectory)) {
57 | $this->localFs->mkdir($exportDirectory);
58 | }
59 |
60 | foreach ($items as $item) {
61 | $this->xml->startElement('product');
62 | foreach ($item as $property => $value) {
63 | $this->xml->writeAttribute($property, $value);
64 | }
65 | $this->xml->endElement();
66 | }
67 | }
68 |
69 | /**
70 | * {@inheritdoc}
71 | */
72 | public function flush()
73 | {
74 | $this->xml->endElement();
75 | $this->xml->endDocument();
76 | $this->xml->flush();
77 | $jobParameters = $this->stepExecution->getJobParameters();
78 |
79 | $this->writtenFiles = [$this->stepExecution->getJobParameters()->get('storage')['file_path']];
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/technical_architecture/best_practices/index.rst:
--------------------------------------------------------------------------------
1 | Best Practices
2 | ==============
3 |
4 | .. toctree::
5 | :maxdepth: 1
6 | :titlesonly:
7 |
8 | project
9 | reusable_bundle
10 | ./core/conventions
11 | ./core/standards
12 |
--------------------------------------------------------------------------------
/technical_architecture/best_practices/project.rst:
--------------------------------------------------------------------------------
1 | Create a project
2 | ================
3 |
4 | .. warning::
5 |
6 | Here is a very early version of this section, we'll keep enriching it in the upcoming weeks.
7 |
8 | Setup the project
9 | -----------------
10 |
11 | The Akeneo PIM standard project comes with a default configuration to help you during the development.
12 |
13 | Please install it by following the :doc:`/install_pim/index` process.
14 |
15 | This distribution contains an empty src folder, your custom code will reside here.
16 |
17 | What about versioning?
18 | ----------------------
19 |
20 | You should use a version control system (VCS) for your project, for instance, our team uses Git with Github.
21 |
22 | The `.gitignore` file located in the root folder of your project defines what is NOT to be versioned.
23 |
24 | If you use another VCS, you should follow the guideline provided by this file to know what to version or not.
25 |
26 | Here are some explanations of the most important points:
27 |
28 | * Do **NOT** modify the code in the vendors
29 |
30 | The next time you update them with composer, your modifications would be lost.
31 |
32 | * Do **NOT** version vendors
33 | * Do **NOT** fork your vendors
34 |
35 | You would not benefit from dependencies patches otherwise.
36 |
37 | What about your dependencies?
38 | -----------------------------
39 |
40 | In your composer.json, you should try to rely as much as possible on stable dependencies (tags) when installing extra dependencies.
41 |
42 | Once installed don't hesitate to version your composer.lock. This practice ensures that all of your coworkers (or servers) will use the exact same version of all dependencies.
43 |
--------------------------------------------------------------------------------
/technical_architecture/component-or-bundle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/technical_architecture/component-or-bundle.png
--------------------------------------------------------------------------------
/technical_architecture/component-or-bundle.rst.inc:
--------------------------------------------------------------------------------
1 | Akeneo or Pim, Bundle or Component?
2 | -----------------------------------
3 |
4 | Since version 1.3, Akeneo PIM introduced components, that contain business logic or technical logic not coupled with Symfony Framework, although Bundles contain the glue to assemble components together.
5 |
6 | We use different namespaces, Akeneo for the technical parts not coupled with the PIM, Pim for the Community Edition parts and Enterprise suffix for the Enterprise Edition parts.
7 |
8 | We organise the code as above in any new development and try to update legacy code as much as we can in each minor version to make the stack more and more understandable.
9 |
10 | .. image:: /technical_architecture/component-or-bundle.png
11 | :width: 400pt
12 |
--------------------------------------------------------------------------------
/technical_architecture/events/index.rst:
--------------------------------------------------------------------------------
1 | Events
2 | ======
3 |
4 | .. note::
5 |
6 | For a description of event usage, please refer to the :doc:`cookbook `
7 |
8 | .. toctree::
9 | :maxdepth: 2
10 |
11 | storage_events
12 | workflow_events
13 |
--------------------------------------------------------------------------------
/technical_architecture/index.rst:
--------------------------------------------------------------------------------
1 | Technical architecture
2 | ======================
3 |
4 | Akeneo PIM is an OOP application, based on the framework Symfony 4.4, it also widely uses Doctrine ORM.
5 | If you are not familiar with one of these, the best move is to start by reading the `Symfony documentation`_ and `Doctrine documentation`_
6 |
7 | .. _Symfony documentation: https://symfony.com/doc/5.4/index.html
8 | .. _Doctrine documentation: https://www.doctrine-project.org/projects/doctrine-orm/en/2.14/index.html
9 |
10 | .. toctree::
11 | :maxdepth: 2
12 |
13 | best_practices/index
14 | event/index
15 | events/index
16 | localization/index
17 | notification/add
18 | performances_guide/index
19 | rest_api/get-product
20 | standard_format/index
21 | technical_information/index
22 |
--------------------------------------------------------------------------------
/technical_architecture/localization/change_pim_locale.rst:
--------------------------------------------------------------------------------
1 | How to change the PIM locale
2 | ============================
3 |
4 | In this cookbook, you will learn how to manage Akeneo PIM locales.
5 |
6 | How to allow more locales
7 | -------------------------
8 |
9 | The global Akeneo PIM locale and user interface locales are configurable. By default, the Akeneo PIM is configured to
10 | allow only locales translated to more than 80%.
11 |
12 | If you want to allow more locales, you can change the limit by overriding the parameter:
13 |
14 | .. code-block:: yaml
15 |
16 | parameters:
17 | pim_localization.provider.ui_locale.min_percentage: 0.7
18 |
19 | In this example, you allow locales translated to more than 70%.
20 |
21 | You can set this parameter directly in your ``app/config/parameters.yml`` file or in one of your custom bundle resource file (for instance ``Acme/Bundle/AppBundle/Resources/config/one_of_your_config_file.yml``).
22 |
23 | The last thing you need to do to take this change into account is to clear the symfony cache.
24 |
25 | .. code-block:: php
26 |
27 | bin/console cache:clear --env=prod
28 |
29 | How to improve translations
30 | ---------------------------
31 |
32 | If your locale is not allowed or if you need to add missing translations, you can fill the related ``messages.yml`` or,
33 | better, contribute and :doc:`/contribute_to_pim/translate`.
34 |
--------------------------------------------------------------------------------
/technical_architecture/localization/how_to_use_the_presenters.rst:
--------------------------------------------------------------------------------
1 | How to use Presenters
2 | =====================
3 |
4 | The Presenters are used to display the data for the end user according to their locale.
5 | For example, a metric value will be displayed `"0.15 Meter"` in English and `"0,15 Mètre"` in French.
6 | In this page you will learn how to create your own Presenters or modify predefined formats of default Presenters.
7 |
8 | How to register a new Presenter
9 | -------------------------------
10 |
11 | Several presenters are already defined for prices, metrics, numbers, etc.
12 | You can implement your own Presenter to display your custom values.
13 |
14 | To create your new Presenter, first create a class implementing `Akeneo\\Component\\Localization\\Presenter\\PresenterInterface`.
15 | Next, declare it as a service:
16 |
17 | .. code-block:: yaml
18 |
19 | pim_catalog.localization.presenter.my_own_presenter:
20 | class: '%my_own_presenter_class%'
21 | tags:
22 | - { name: pim_catalog.localization.presenter, type: 'product_value' }
23 |
24 | You have to tag your service with one of the following types:
25 |
26 | - `product_value`: used to present the `ProductValue` (e.g. prices, metrics, numbers, etc),
27 | - `attribute_option`: used to present the attribute options (e.g. the option `max_number` of the number attributes).
28 |
29 | Actually, the Presenter interface displays data according to the user locale, but you can create a Presenter using custom options.
30 |
31 |
32 | How to modify the predefined formats of default Presenters
33 | ----------------------------------------------------------
34 |
35 | .. _IntlDateFormatter: https://www.php.net/manual/en/class.intldateformatter.php
36 | .. _NumberFormatter: https://www.php.net/manual/en/class.numberformatter.php
37 |
38 | You can define your own formats to present dates, datetimes and prices depending on the user's locale.
39 | The formats of date, datetimes and currencies are predefined for a set of languages.
40 | When the requested format is not predefined, the fallback is defined by `IntlDateFormatter`_ and `NumberFormatter`_.
41 |
42 | To add or modify the default formats, you have to add or modify the `pim_catalog.localization.factory` tags (`date.formats`, `datetime.formats` and `currency.formats`).
43 |
44 | For example:
45 |
46 | .. code-block:: yaml
47 |
48 | pim_catalog.localization.factory.currency.formats:
49 | en_US: '¤#,##0.00'
50 | fr_FR: '#,##0.00 ¤'
51 |
--------------------------------------------------------------------------------
/technical_architecture/localization/index.rst:
--------------------------------------------------------------------------------
1 | How to Localize your data
2 | =========================
3 |
4 | Since the 1.5 version, Akeneo PIM can be used simultaneously by people of different languages in the same installation.
5 | This implies that it is necessary to manage language-related specificities.
6 | For example, the English decimal separator is a dot (.), the French one is a comma (,).
7 | The Akeneo PIM needs to be able to normalize and present this data.
8 |
9 | You will find in this chapter the cookbooks to add custom languages, normalizers and presenters.
10 |
11 | .. toctree::
12 |
13 | change_pim_locale
14 | how_to_use_the_localizers
15 | how_to_use_the_presenters
16 |
--------------------------------------------------------------------------------
/technical_architecture/performances_guide/batch_page_size.rst:
--------------------------------------------------------------------------------
1 | Job product batch size
2 | ======================
3 |
4 | A product catalog is unique to one's need. It is configured with a custom number of attributes, families, locales, channels, etc. Those different combinations may affect the batch jobs (CSV imports/exports, mass edits, indexation, etc) performances.
5 |
6 | Indeed the size of the products will define how much RAM they will take to be processed. During a product batch jobs, we regularly flush the processed products into the database to avoid too much memory consumption.
7 |
8 | But, if we flush them too often, the transaction time can slow the process: for each iteration, we clear the doctrine cache (to free some memory), index the products (so more communications between PHP and elastic search) and update the Mysql database. On the other hand, if we flush too sporadically, the RAM consumption can increase to a point where the PHP's garbage collector is called too many times and slows down the batch jobs.
9 |
10 | That's why there is no universal answer to the `pim_job_product_batch_size` parameter and if you encounter performance issues on your batch jobs, you may need to tweak it.
11 |
12 | To do so, try to increase it if your batch job seems unexpectedly slow and your product have a reasonable size. Or try to reduce it if the batch processes are too slow and your product have a lot of product values.
13 |
14 |
--------------------------------------------------------------------------------
/technical_architecture/performances_guide/index.rst:
--------------------------------------------------------------------------------
1 | Performances Guide
2 | ==================
3 |
4 | Your product catalog is unique, with different amount of attributes, families, locales, channels, products, etc. All those different combinations may cause different performance issues.
5 |
6 | The following chapter explains the different performances bottlenecks you can encounter by using *Akeneo PIM* and lists known issues. It also explains best practices you should implement to ensure the success of your project.
7 |
8 | Thank you to contact us when your use case is not covered, we could handle it in next minor version or provide an alternative solution for your project.
9 |
10 | .. warning::
11 |
12 | This is an early version of this chapter, we'll continue to complete it with more use cases.
13 | We also provide a :doc:`/maintain_pim/scalability_guide/index`.
14 |
15 | .. toctree::
16 | :maxdepth: 2
17 |
18 | rules_execution_memory_usage
19 | work_with_wysiwyg
20 | php7_hhvm
21 | batch_page_size
22 |
--------------------------------------------------------------------------------
/technical_architecture/performances_guide/php7_hhvm.rst:
--------------------------------------------------------------------------------
1 | PHP7 and HHVM Compatibility?
2 | ============================
3 |
4 | PHP7
5 | ----
6 |
7 | We continued our effort regarding Akeneo PIM PHP7 support.
8 |
9 | We're happy to announce that PHP7 is now supported and production ready for both CLI and Web.
10 |
11 | This modification introduces a new constraint, the minimum version of PHP for Akeneo PIM 2.x is now PHP 7.1.
12 |
13 | HHVM
14 | ----
15 |
16 | Will not be supported.
17 |
--------------------------------------------------------------------------------
/technical_architecture/performances_guide/work_with_wysiwyg.rst:
--------------------------------------------------------------------------------
1 | More than 100 WYSIWYG editors in a page
2 | ---------------------------------------
3 |
4 | WYSIWYG are javascript components and are executed on the client side. Hardware performances of the client can affect the speed of pages with WYSIWYG.
5 |
6 | That's why it's not recommended to have more than one hundred WYSIWYG in the same page. In the product edit form, only attributes in the
7 | current attribute group and the current scope are rendered. It means that you should not have more than one hundred WYSIWYG in the same
8 | attribute group and scope. When configuring mass edit common attributes, all scopes are rendered at
9 | the same time. It means you should not add more than one hundred WYSIWYG all scopes included at once.
10 |
11 | For example, a product with 2 attribute groups, 100 scopable WYSIWYG in each group and 5 scopes, has 1000 WYSIWYG. You can render them
12 | in the PEF because you will render WYSIWYG 100 by 100. But in mass edit, you should not add more than 20 WYSIWYG because
13 | they have 5 scopes and 100 WYSIWYG will be rendered.
14 |
--------------------------------------------------------------------------------
/technical_architecture/rest_api/configure-rest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/technical_architecture/rest_api/configure-rest.png
--------------------------------------------------------------------------------
/technical_architecture/rest_api/get-product.rst:
--------------------------------------------------------------------------------
1 | How to Use the Web REST API
2 | ===========================
3 |
4 | Akeneo PIM v1.7 comes with a brand new web API and a `dedicated website `_
5 |
--------------------------------------------------------------------------------
/technical_architecture/technical_information/client_side_compatibilities.rst:
--------------------------------------------------------------------------------
1 | Client side configuration and compatibilities
2 | =============================================
3 |
4 | Hardware
5 | --------
6 |
7 | For a comfortable user experience, the end user workstation should have:
8 |
9 | +--------+-------------+
10 | | Memory | 2GB minimum |
11 | +--------+-------------+
12 |
13 | Network
14 | -------
15 |
16 | Connecting to PIM through a VPN network could greatly impact the user experience by reducing the speed of the connection.
17 |
18 | Browsers
19 | --------
20 |
21 | +------------------------+-------------------------+
22 | | Supported Browsers | Chrome 30+, Firefox 47+ |
23 | +------------------------+-------------------------+
24 |
25 |
26 | Screen resolution
27 | -----------------
28 |
29 | +------------------------+-------------+
30 | | Minimal Resolution | 1280x800px |
31 | +------------------------+-------------+
32 | | Recommended Resolution | 1440x900px |
33 | +------------------------+-------------+
34 |
--------------------------------------------------------------------------------
/technical_architecture/technical_information/index.rst:
--------------------------------------------------------------------------------
1 | Application Technical Information
2 | =================================
3 |
4 | The following chapter is designed for both clients and partners and provides all technical information required to:
5 |
6 | * Buy/rent and provision required server(s) to run Akeneo PIM application
7 | * Check that end users workstation is compatible with Akeneo PIM application
8 | * Have an overview of technical skills required to modify/override some of the Akeneo PIM behaviours when needed
9 |
10 | We also want to provide the reader with a recommended architecture that would follow Akeneo's best practices.
11 |
12 | .. toctree::
13 | :maxdepth: 2
14 |
15 | application_technical_dependencies
16 | server_side_setup_for_hosting
17 | recommended_configuration
18 | client_side_compatibilities
19 | operation_processes
20 | flow_matrix
21 |
--------------------------------------------------------------------------------
/technical_architecture/technical_information/php_ini.rst.inc:
--------------------------------------------------------------------------------
1 | * Setup *CLI php.ini* file ``/etc/php/8.1/cli/php.ini``
2 |
3 | .. code-block:: yaml
4 |
5 | $ sudo vim /etc/php/8.1/cli/php.ini
6 | memory_limit = 1024M
7 | date.timezone = UTC
8 |
9 | .. note::
10 |
11 | Use the time zone matching your location, for example *America/Los_Angeles* or *Europe/Berlin*. See https://www.php.net/timezones for the list of all available timezones.
12 |
13 | * Setup *FPM php.ini* file ``/etc/php/8.1/fpm/php.ini``
14 |
15 | .. note::
16 |
17 | If you have several PHP versions on your server, these files can be located in ``/etc/php/x.x/fpm/php.ini`` and ``/etc/php/x.x/cli/php.ini``.
18 |
19 | .. code-block:: yaml
20 |
21 | $ sudo vim /etc/php/8.1/fpm/php.ini
22 | memory_limit = 512M
23 | date.timezone = UTC
24 |
25 | To avoid spending too much time on permission problems between the CLI user and the FPM user, a good practice is to use the same user for both of them.
26 |
27 | .. warning::
28 |
29 | This configuration is aimed to easily set up a development machine.
30 | **It is absolutely not suited for a production environment.**
31 |
32 | * Get your identifiers
33 |
34 | .. code-block:: bash
35 |
36 | $ id
37 | uid=1000(my_user), gid=1000(my_group), ...
38 |
39 | In this example, the user is *my_user* and the group is *my_group*.
40 |
41 | * Stop FPM
42 |
43 | .. code-block:: bash
44 |
45 | $ sudo service php8.1-fpm stop
46 |
47 | * Open the file ``/etc/php/8.1/fpm/pool.d/www.conf`` with your favorite text editor:
48 |
49 | .. code-block:: bash
50 |
51 | $ sudo vi /etc/php/8.1/fpm/pool.d/www.conf
52 | # replace these environment variables:
53 | user = my_user
54 | group = my_group
55 | listen = /run/php/php8.1-fpm.sock
56 | listen.owner = www-data
57 | listen.group = www-data
58 |
59 | .. note::
60 |
61 | On the default installation, FPM user and group are ``www-data``.
62 | ``listen.owner`` and ``listen.group`` must be set on the same user than your Apache server.
63 | ``/run/php/php8.1-fpm.sock`` is the default socket path. If you changed it in ``/etc/php/8.1/fpm/pool.d/www.conf``, change it in the Apache virtual host too.
64 |
65 | * Restart FPM
66 |
67 | .. code-block:: bash
68 |
69 | $ sudo service php8.1-fpm restart
70 |
--------------------------------------------------------------------------------
/technical_architecture/technical_information/server_side_setup_for_hosting.rst:
--------------------------------------------------------------------------------
1 | Server side set up for hosting
2 | ==============================
3 |
4 | Hardware
5 | --------
6 |
7 | The required configuration depends on your volume and your usage. As we are based on Elasticsearch and MySQL, please check their dedicated documentation to define your server size.
8 |
9 | .. warning::
10 |
11 | Should you use VCPu, keep in mind that VCPus do not provide same level of performance as real CPUs. Amazon servers, for instance, offer only 10 to 25% of performances of a real CPU.
12 |
13 | Software
14 | --------
15 |
16 | .. include:: /install_pim/manual/system_requirements/system_requirements.rst
17 |
--------------------------------------------------------------------------------
/technical_overview/index.rst:
--------------------------------------------------------------------------------
1 | Technical overview
2 | ==================
3 |
4 | .. toctree::
5 | :maxdepth: 2
6 | :hidden:
7 |
8 | product_information/index
9 | teamwork_assistant/index
10 | workflow/index
11 |
--------------------------------------------------------------------------------
/technical_overview/teamwork_assistant/catalog_impact.rst:
--------------------------------------------------------------------------------
1 | What Are The Impacts Of Catalog Updates On Projects?
2 | ====================================================
3 |
4 | Several catalog updates can impact project integrity. In this case we need to remove the impacted projects.
5 |
6 | Channel Updates
7 | _______________
8 |
9 | :Remove a channel: A project has to be removed if its channel is removed.
10 | :Remove a locale from a channel: A project has to be removed if its locale is now deactivated or if its locale is no
11 | longer part of its channel locales. This case happens when a locale is removed from a channel and both of them
12 | belong to a project.
13 | :Remove a currency from a channel: A project is removed if it uses a currency as product filter that is removed from its
14 | channel. This case happens when a currency is removed from a channel that belongs to a project.
15 |
16 | Attribute Updates
17 | _________________
18 |
19 | :Remove an attribute: A project must be removed if an attribute used as product filter is removed.
20 |
21 | Category Updates
22 | ________________
23 |
24 | :Remove a category: A project must be removed if a category used as product filter is removed.
25 |
--------------------------------------------------------------------------------
/technical_overview/teamwork_assistant/images/widget-AM-target-zone.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/technical_overview/teamwork_assistant/images/widget-AM-target-zone.jpg
--------------------------------------------------------------------------------
/technical_overview/teamwork_assistant/index.rst:
--------------------------------------------------------------------------------
1 | Teamwork Assistant (Enterprise Edition)
2 | =======================================
3 |
4 | .. toctree::
5 |
6 | Project creation
7 | Project completeness
8 | Project Completeness widget
9 | Catalog update impact
10 | Scalability guide
11 | Users permission summary for Behat tests
12 |
--------------------------------------------------------------------------------
/technical_overview/teamwork_assistant/scalability_guide.rst:
--------------------------------------------------------------------------------
1 | Teamwork Assistant Scalability Guide
2 | ____________________________________
3 |
4 | For the moment, the pre-processing data are computed once you save a project, when you save a product concerned by a
5 | project from the Product Edit Form and the sequential edit. Moreover, a command
6 | ``php bin/console pimee:project:recalculate`` is provided to help you to recalculate data according to your needs.
7 |
8 | This scalability guide will focus on how to use the Teamwork Assistant functionally (how much projects in the same time,
9 | etc.) and technically (how to use the recalculate command) in a healthy way.
10 |
11 | .. note::
12 |
13 | To know more about the project completeness visit the :doc:`project completeness ` reference.
14 |
15 | Computing Project Completeness
16 | ------------------------------
17 |
18 | Before beginning to work with the Teamwork Assistant, you must be aware that this feature has to compute a lot of
19 | data. The more products and attribute groups you have in a project, the more time project completeness computing will take.
20 | We did some benchmarks with our :doc:`medium catalog `
21 | on MySQL to give you an idea of the time it can take. A medium
22 | catalog is about 3,66 millions of product values.
23 |
24 |
25 | In this benchmark the catalog contained 5 users with read/edit permissions on all 15 attribute groups and 5 users
26 | with read/edit permissions on 7 attribute groups.
27 |
28 | +------------------------------------+-----------------------+
29 | | Project size (products) | time spent to compute |
30 | +====================================+=======================+
31 | | 50k products (3,6m product values) | 3h 36m 30s |
32 | | 50k products already calculated | 45m 30s |
33 | | 5k products | 19 min 10 sec |
34 | | 5k products already calculated | 4 min 18 sec |
35 | +------------------------------------+-----------------------+
36 |
37 | Here are the server’s features used for the bench:
38 | **CPU:** Intel E3-1220 V2 @ 3.1GHZ (4 cores)
39 | **RAM:** 16 GB
40 | **Disk:** SATA 3 - 7200 RPM disks
41 |
--------------------------------------------------------------------------------
/technical_overview/workflow/img/partial-approve.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/technical_overview/workflow/img/partial-approve.png
--------------------------------------------------------------------------------
/technical_overview/workflow/img/simple-workflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/technical_overview/workflow/img/simple-workflow.png
--------------------------------------------------------------------------------
/technical_overview/workflow/index.rst:
--------------------------------------------------------------------------------
1 | Collaborative workflow
2 | ======================
3 |
4 | This chapter describes the collaborative workflow involving Mary and Julia.
5 |
6 | **These cookbooks are about a feature only provided in the Enterprise Edition.**
7 |
8 | .. toctree::
9 | :maxdepth: 2
10 |
11 | simple_workflow
12 | partial_workflow
13 |
14 | If you need a presentation of Collaborative Workflow feature, take a look at the *Product focus* video!
15 |
16 | .. raw:: html
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/technical_overview/workflow/partial_workflow.rst:
--------------------------------------------------------------------------------
1 | Partial workflow
2 | ================
3 |
4 | In this scenario, Julia approves or rejects a draft partially.
5 |
6 | .. image:: img/partial-approve.png
7 |
--------------------------------------------------------------------------------
/technical_overview/workflow/simple_workflow.rst:
--------------------------------------------------------------------------------
1 | Simple workflow
2 | ===============
3 |
4 | This schema represents the simplest scenario when Julia approves or rejects a whole draft.
5 |
6 | .. image:: img/simple-workflow.png
7 |
--------------------------------------------------------------------------------
/troubleshooting/index.rst:
--------------------------------------------------------------------------------
1 | Troubleshooting guide
2 | =====================
3 |
4 | Auto_increment reaches max value for pim_catalog_completeness table
5 | -------------------------------------------------------------------
6 |
7 | .. note::
8 |
9 | Impacted versions: PIM <= 5.0
10 |
11 | After some time, the completeness table auto_increment identifier could reach the defined maximum.
12 | We made a fix to to allow for a lot more identifier in PIM-9750 ticket but for older database schema,
13 | you must apply this fix with the following MySql ALTER command:
14 |
15 | .. code-block:: sql
16 |
17 | ALTER TABLE pim_catalog_completeness MODIFY id bigint NOT NULL AUTO_INCREMENT;
18 |
19 |
20 | Asset family identifiers stored with a different case in attributes properties (EE only)
21 | ----------------------------------------------------------------------------------------
22 |
23 | .. note::
24 |
25 | Impacted versions: PIM EE <= 5.0
26 |
27 | We fixed the attributes import to sanitize the asset family identifiers in PIM-9753,
28 | and you may need to fix data already stored in database with the following clean command:
29 |
30 | .. code-block:: bash
31 |
32 | bin/console --env=prod pim:asset-manager:clean-asset-family-in-asset-collection-attributes
33 |
34 |
35 | Asset & Asset family codes being case-sensitive (EE only)
36 | ----------------------------------------------------------------------------------------
37 |
38 | .. note::
39 |
40 | Impacted versions: PIM EE <= 5.0
41 |
42 | The Asset index mapping has been updated to be case-insensitive on the Asset & Asset family codes.
43 | You may need to reset your index and re-index all Assets:
44 |
45 | .. code-block:: bash
46 |
47 | bin/console akeneo:elasticsearch:reset-indexes --index=akeneo_assetmanager_asset
48 | bin/console akeneo:asset-manager:index-assets --all
49 |
--------------------------------------------------------------------------------
/use_sso_authentication/common/images/wikimedia-saml2-browser-sso-redirect-post.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/akeneo/pim-docs/af4e9847d540d6a7c76dc3ad8af6fcb25607e6f6/use_sso_authentication/common/images/wikimedia-saml2-browser-sso-redirect-post.png
--------------------------------------------------------------------------------