THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

je réalise un module qui vise à ajouter un nouveau type de contenu à Thélia, soit une nouvelle "Resource" :
Thélia propose : Folder, Content, Category, Product, Brand etc... je souhaiterais ajoute "News" par exemple.

Tout à bien débuté mais je rencontre des difficultés pour la gestion des images et des documents. D'une part le FileController me renvoie l'erreur suivante :

1/1 ResourceException in AdminResources.php line 173: Resource `thelia` not found

    in AdminResources.php line 173
    at AdminResources->getResource('news', 'thelia') in FileController.php line 77
    at FileController->saveFileAjaxAction('1', 'news', 'image', array('image/jpeg' => array('jpg', 'jpeg'), 'image/png' => array('png'), 'image/gif' => array('gif')), array()) in FileController.php line 277
    at FileController->saveImageAjaxAction('1', 'news')
    at call_user_func_array(array(object(FileController), 'saveImageAjaxAction'), array('1', 'news')) in HttpKernel.php line 139
    at HttpKernel->handleRaw(object(Request), '1') in HttpKernel.php line 62
    at HttpKernel->handle(object(Request), '1', true) in TheliaHttpKernel.php line 76
    at TheliaHttpKernel->handle(object(Request), '1', true) in BackOfficePathMiddleware.php line 106
    at BackOfficePathMiddleware->handle(object(Request), '1', true) in ParamInitMiddleware.php line 87
    at ParamInitMiddleware->handle(object(Request), '1', true) in SessionMiddleware.php line 80
    at SessionMiddleware->handle(object(Request), '1', true) in StackedHttpKernel.php line 23
    at StackedHttpKernel->handle(object(Request), '1', true) in Kernel.php line 185
    at Kernel->handle(object(Request)) in index_dev.php line 37

D'autre part le FileManager me refoule car il ne connait pas l'ImageType "news"

J'ai réussi à contourner cela en réécrivant partiellement FileController et en faisant pointer les url du type image/type/news/id/save-ajax vers celui-ci grâce au router du module mais cela me fait réécrire beaucoup de code je trouve.

Soit les 2 questions suivantes :
1. N'y a t'il pas un moyen d'agir sur la fonction
$this->checkAuth($this->getAdminResources()->getResource($parentType, static::MODULE_RIGHT), array(), AccessManager::UPDATE); pour que le FileController accepte la modification d'une ressource de type News sans tout réécrire ?
(actuellement je reprends les fonctions du FileController en ajoutant $this->getAdminResources()->addModuleResources(['NEWS' => 'admin.news']);)

2. Comment ajouter un nouveau type d'image au FileManager de Thélia ?
(actuellement j'ai intégré $fileManager->addFileModel($objectType, 'news', 'NewsSystem\Model\NewsImage'); dans la fonction FileController->processFile();

J'espère avoir été suffisamment clair !

Merci d'avance smile

Offline


Bonjour,

en fait ce que je souhaite finalement c'est étendre, grâce à mon module, le fichier Thelia\Config\Resources\config.xml mais je ne comprends pas ce dernier.

D'une part rajouter <parameter key="NEWS">admin.news</parameter> dans

<parameter key="admin.resources" type="collection">
            <parameter key="thelia" type="collection">
                <parameter key="SUPERADMINISTRATOR">SUPERADMINISTRATOR</parameter>
                <parameter key="ADDRESS">admin.address</parameter>
                <parameter key="ADMINISTRATOR">admin.configuration.administrator</parameter>
                <parameter key="ADVANCED_CONFIGURATION">admin.configuration.advanced</parameter>
                <parameter key="AREA">admin.configuration.area</parameter>
                <parameter key="ATTRIBUTE">admin.configuration.attribute</parameter>
                <parameter key="BRAND">admin.brand</parameter>
                <parameter key="CATEGORY">admin.category</parameter>
                <parameter key="CONFIG">admin.configuration"</parameter>
                <parameter key="CONTENT">admin.content</parameter>
                <parameter key="COUNTRY">admin.configuration.country</parameter>
                <parameter key="STATE">admin.configuration.state</parameter>
                <parameter key="COUPON">admin.coupon</parameter>
                <parameter key="CURRENCY">admin.configuration.currency</parameter>
                <parameter key="CUSTOMER">admin.customer</parameter>
                <parameter key="FEATURE">admin.configuration.feature</parameter>
                <parameter key="FOLDER">admin.folder</parameter>
                <parameter key="HOME">admin.home</parameter>
                <parameter key="LANGUAGE">admin.configuration.language</parameter>
                <parameter key="MAILING_SYSTEM">admin.configuration.mailing-system</parameter>
                <parameter key="MESSAGE">admin.configuration.message</parameter>
                <parameter key="MODULE">admin.module</parameter>
                <parameter key="HOOK">admin.hook</parameter>
                <parameter key="MODULE_HOOK">admin.module-hook</parameter>
                <parameter key="ORDER">admin.order</parameter>
                <parameter key="ORDER_STATUS">admin.configuration.order-status</parameter>
                <parameter key="PRODUCT">admin.product</parameter>
                <parameter key="PROFILE">admin.configuration.profile</parameter>
                <parameter key="SHIPPING_ZONE">admin.configuration.shipping-zone</parameter>
                <parameter key="TAX">admin.configuration.tax</parameter>
                <parameter key="TEMPLATE">admin.configuration.template</parameter>
                <parameter key="SYSTEM_LOG">admin.configuration.system-logs</parameter>
                <parameter key="ADMIN_LOG">admin.configuration.admin-logs</parameter>
                <parameter key="STORE">admin.configuration.store</parameter>
                <parameter key="TRANSLATIONS">admin.configuration.translations</parameter>
                <parameter key="UPDATE">admin.configuration.update</parameter>
                <parameter key="EXPORT">admin.export</parameter>
                <parameter key="IMPORT">admin.import</parameter>
                <parameter key="TOOLS">admin.tools</parameter>
                <parameter key="SALES">admin.sales</parameter>
                <parameter key="API">admin.configuration.api</parameter>
                <parameter key="TITLE">admin.customer.title</parameter>
            </parameter>
        </parameter>

et d'autre part rajouter
<parameter key="document.news">NewsModule\Model\NewsDocument</parameter>
<parameter key="image.news">NewsModule\Model\NewsImage</parameter>
dans
<parameter key="file_model.classes" type="collection">
            <parameter key="document.product">Thelia\Model\ProductDocument</parameter>
            <parameter key="image.product">Thelia\Model\ProductImage</parameter>

            <parameter key="document.category">Thelia\Model\CategoryDocument</parameter>
            <parameter key="image.category">Thelia\Model\CategoryImage</parameter>

            <parameter key="document.content">Thelia\Model\ContentDocument</parameter>
            <parameter key="image.content">Thelia\Model\ContentImage</parameter>

            <parameter key="document.folder">Thelia\Model\FolderDocument</parameter>
            <parameter key="image.folder">Thelia\Model\FolderImage</parameter>

            <parameter key="document.brand">Thelia\Model\BrandDocument</parameter>
            <parameter key="image.brand">Thelia\Model\BrandImage</parameter>

            <parameter key="image.module">Thelia\Model\ModuleImage</parameter>
        </parameter>

Je ne vois pas comment inclure cela dans le fichier config.xml de mon module. Quelqu'un pourrait-il m'aiguiller ?

Merci ! smile