2017-07-06 17:41:10 +02:00
< ? php
class AdminCategoriesController extends AdminCategoriesControllerCore
{
public function renderForm ()
{
$this -> initToolbar ();
/** @var Category $obj */
$obj = $this -> loadObject ( true );
$context = Context :: getContext ();
$id_shop = $context -> shop -> id ;
$selected_categories = array (( isset ( $obj -> id_parent ) && $obj -> isParentCategoryAvailable ( $id_shop )) ? ( int ) $obj -> id_parent : ( int ) Tools :: getValue ( 'id_parent' , Category :: getRootCategory () -> id ));
$unidentified = new Group ( Configuration :: get ( 'PS_UNIDENTIFIED_GROUP' ));
$guest = new Group ( Configuration :: get ( 'PS_GUEST_GROUP' ));
$default = new Group ( Configuration :: get ( 'PS_CUSTOMER_GROUP' ));
$unidentified_group_information = sprintf ( $this -> l ( '%s - All people without a valid customer account.' ), '<b>' . $unidentified -> name [ $this -> context -> language -> id ] . '</b>' );
$guest_group_information = sprintf ( $this -> l ( '%s - Customer who placed an order with the guest checkout.' ), '<b>' . $guest -> name [ $this -> context -> language -> id ] . '</b>' );
$default_group_information = sprintf ( $this -> l ( '%s - All people who have created an account on this site.' ), '<b>' . $default -> name [ $this -> context -> language -> id ] . '</b>' );
if ( ! ( $obj = $this -> loadObject ( true ))) {
return ;
}
2017-08-02 12:53:42 +02:00
$image = _PS_CAT_IMG_DIR_ . $obj -> id . '.' . $this -> imageType ;
$image_url = ImageManager :: thumbnail ( $image , $this -> table . '_' . ( int ) $obj -> id . '.' . $this -> imageType , 350 , $this -> imageType , true , true );
$image_size = file_exists ( $image ) ? filesize ( $image ) / 1000 : false ;
$images_types = ImageType :: getImagesTypes ( 'categories' );
$format = array ();
$thumb = $thumb_url = '' ;
$formated_category = ImageType :: getFormatedName ( 'category' );
$formated_medium = ImageType :: getFormatedName ( 'medium' );
foreach ( $images_types as $k => $image_type ) {
if ( $formated_category == $image_type [ 'name' ]) {
$format [ 'category' ] = $image_type ;
} elseif ( $formated_medium == $image_type [ 'name' ]) {
$format [ 'medium' ] = $image_type ;
$thumb = _PS_CAT_IMG_DIR_ . $obj -> id . '-' . $image_type [ 'name' ] . '.' . $this -> imageType ;
if ( is_file ( $thumb )) {
$thumb_url = ImageManager :: thumbnail ( $thumb , $this -> table . '_' . ( int ) $obj -> id . '-thumb.' . $this -> imageType , ( int ) $image_type [ 'width' ], $this -> imageType , true , true );
}
}
}
2017-07-06 17:41:10 +02:00
$image_homeimg = _PS_CAT_IMG_DIR_ . 'home/' . $obj -> id . '.jpg' ;
$image_homeimg_url = ImageManager :: thumbnail ( $image_homeimg , $this -> table . '_homeimg_' . ( int ) $obj -> id . '.' . $this -> imageType , 350 , $this -> imageType , true , true );
2017-08-29 15:25:15 +02:00
$image_iconcat = _PS_CAT_IMG_DIR_ . 'iconcat/' . $obj -> id . '.jpg' ;
$image_iconcat_url = ImageManager :: thumbnail ( $image_homeimg , $this -> table . '_iconcat_' . ( int ) $obj -> id . '.' . $this -> imageType , 350 , $this -> imageType , true , true );
2017-07-06 17:41:10 +02:00
$image_univers = _PS_CAT_IMG_DIR_ . 'univers/' . $obj -> id . '.jpg' ;
$image_univers_url = ImageManager :: thumbnail ( $image_univers , $this -> table . '_univers_' . ( int ) $obj -> id . '.' . $this -> imageType , 350 , $this -> imageType , true , true );
$skins = array ();
foreach ( explode ( ',' , Configuration :: get ( 'ADVCONSTRUCTOR_TYPE' )) as $skin ) {
$skins [] = array (
'id' => $skin ,
'name' => $skin
);
}
$categories_univers_list = 'doublecube, vrac, pochette_transparente, simplecube, sachetorganza, pochette, coffret, aurore_chocolats, pyramide' ;
$categories_univers = array ();
foreach ( explode ( ',' , $categories_univers_list ) as $cat ) {
$categories_univers [] = array (
'id' => $cat ,
'name' => $cat ,
);
}
$this -> fields_form = array (
'tinymce' => true ,
'legend' => array (
'title' => $this -> l ( 'Category' ),
'icon' => 'icon-tags'
),
'input' => array (
array (
'type' => 'text' ,
'label' => $this -> l ( 'Name' ),
'name' => 'name' ,
'lang' => true ,
'required' => true ,
'class' => 'copy2friendlyUrl' ,
'hint' => $this -> l ( 'Invalid characters:' ) . ' <>;=#{}' ,
),
array (
'type' => 'switch' ,
'label' => $this -> l ( 'Displayed' ),
'name' => 'active' ,
'required' => false ,
'is_bool' => true ,
'values' => array (
array (
'id' => 'active_on' ,
'value' => 1 ,
'label' => $this -> l ( 'Enabled' )
),
array (
'id' => 'active_off' ,
'value' => 0 ,
'label' => $this -> l ( 'Disabled' )
)
)
),
array (
'type' => 'switch' ,
'label' => $this -> l ( 'Affichée sur l\'accueil ?' ),
'name' => 'home' ,
'required' => false ,
'is_bool' => true ,
'default' => 1 ,
'values' => array (
array (
'id' => 'home_on' ,
'value' => 1 ,
'label' => $this -> l ( 'Enabled' )
),
array (
'id' => 'home_off' ,
'value' => 0 ,
'label' => $this -> l ( 'Disabled' )
)
)
),
array (
'type' => 'categories' ,
'label' => $this -> l ( 'Parent category' ),
'name' => 'id_parent' ,
'tree' => array (
'id' => 'categories-tree' ,
'selected_categories' => $selected_categories ,
'disabled_categories' => ( ! Tools :: isSubmit ( 'add' . $this -> table ) && ! Tools :: isSubmit ( 'submitAdd' . $this -> table )) ? array ( $this -> _category -> id ) : null ,
'root_category' => $context -> shop -> getCategory ()
)
),
array (
'type' => 'textarea' ,
'label' => $this -> l ( 'Description' ),
'name' => 'description' ,
'autoload_rte' => true ,
'lang' => true ,
'hint' => $this -> l ( 'Invalid characters:' ) . ' <>;=#{}'
),
array (
'type' => 'textarea' ,
'label' => $this -> l ( 'Description longue' ),
'name' => 'long_description' ,
'autoload_rte' => true ,
'lang' => true ,
'hint' => $this -> l ( 'Invalid characters:' ) . ' <>;=#{}'
),
2017-08-02 12:53:42 +02:00
array (
'type' => 'file' ,
'label' => $this -> l ( 'Category Cover Image' ),
'name' => 'image' ,
'display_image' => true ,
'image' => $image_url ? $image_url : false ,
'size' => $image_size ,
'delete_url' => self :: $currentIndex . '&' . $this -> identifier . '=' . $this -> _category -> id . '&token=' . $this -> token . '&deleteImage=1' ,
'hint' => $this -> l ( 'This is the main image for your category, displayed in the category page. The category description will overlap this image and appear in its top-left corner.' ),
'format' => $format [ 'category' ]
),
2017-07-06 17:41:10 +02:00
array (
'type' => 'file' ,
'label' => $this -> l ( 'Image accueil' ),
'name' => 'homeimg' ,
'display_image' => true ,
'image' => $image_homeimg_url ? $image_homeimg_url : false ,
'delete_url' => self :: $currentIndex . '&' . $this -> identifier . '=' . $this -> _category -> id . '&token=' . $this -> token . '&deleteImage=1&folder=home' ,
'hint' => $this -> l ( 'Upload a category image from your computer.' ),
),
2017-08-29 15:25:15 +02:00
2017-07-06 17:41:10 +02:00
array (
'type' => 'select' ,
'label' => $this -> l ( 'Icone category' ),
'name' => 'liste_icons_univers' ,
'hint' => $this -> l ( 'Choose a category' ),
'options' => array (
'query' => $categories_univers ,
'id' => 'id' ,
'name' => 'name' ,
)
),
2017-08-29 15:25:15 +02:00
array (
'type' => 'file' ,
'label' => $this -> l ( 'Icon' ),
'name' => 'iconat' ,
'display_image' => true ,
'image' => $image_iconcat_url ? $image_iconcat_url : false ,
'delete_url' => self :: $currentIndex . '&' . $this -> identifier . '=' . $this -> _category -> id . '&token=' . $this -> token . '&deleteImage=1&folder=iconcat' ,
'hint' => $this -> l ( 'Upload a category image from your computer.' ),
),
2017-07-06 17:41:10 +02:00
array (
'type' => 'file' ,
'label' => $this -> l ( 'Image dans le listing Univers' ),
'name' => 'univers' ,
'display_image' => true ,
'image' => $image_univers_url ? $image_univers_url : false ,
'delete_url' => self :: $currentIndex . '&' . $this -> identifier . '=' . $this -> _category -> id . '&token=' . $this -> token . '&deleteImage=1&folder=home' ,
'hint' => $this -> l ( 'Upload a category image from your computer.' ),
),
array (
'type' => 'textarea' ,
'label' => $this -> l ( 'Meta title' ),
'name' => 'meta_title' ,
'lang' => true ,
'rows' => 5 ,
'cols' => 100 ,
'hint' => $this -> l ( 'Forbidden characters:' ) . ' <>;=#{}'
),
array (
'type' => 'textarea' ,
'label' => $this -> l ( 'Meta description' ),
'name' => 'meta_description' ,
'lang' => true ,
'rows' => 5 ,
'cols' => 100 ,
'hint' => $this -> l ( 'Forbidden characters:' ) . ' <>;=#{}'
),
array (
'type' => 'tags' ,
'label' => $this -> l ( 'Meta keywords' ),
'name' => 'meta_keywords' ,
'lang' => true ,
'hint' => $this -> l ( 'To add "tags," click in the field, write something, and then press "Enter."' ) . ' ' . $this -> l ( 'Forbidden characters:' ) . ' <>;=#{}'
),
array (
'type' => 'text' ,
'label' => $this -> l ( 'Friendly URL' ),
'name' => 'link_rewrite' ,
'lang' => true ,
'required' => true ,
'hint' => $this -> l ( 'Only letters, numbers, underscore (_) and the minus (-) character are allowed.' )
),
array (
'type' => 'text' ,
'label' => $this -> l ( 'URL spécifique' ),
'name' => 'specific_url' ,
'lang' => true ,
'hint' => $this -> l ( 'URL de la destination' )
),
array (
'type' => 'group' ,
'label' => $this -> l ( 'Group access' ),
'name' => 'groupBox' ,
'values' => Group :: getGroups ( Context :: getContext () -> language -> id ),
'info_introduction' => $this -> l ( 'You now have three default customer groups.' ),
'unidentified' => $unidentified_group_information ,
'guest' => $guest_group_information ,
'customer' => $default_group_information ,
'hint' => $this -> l ( 'Mark all of the customer groups which you would like to have access to this category.' )
),
array (
'type' => 'textarea' ,
'label' => $this -> l ( 'Description dans le listing Univers' ),
'name' => 'description_univers' ,
'autoload_rte' => true ,
'lang' => true ,
'hint' => $this -> l ( 'Invalid characters:' ) . ' <>;=#{}'
),
2017-08-03 13:10:18 +02:00
array (
'type' => 'text' ,
'label' => $this -> l ( 'URL du produit exclusif' ),
'name' => 'linkExclusive' ,
'lang' => true ,
'hint' => $this -> l ( 'Only letters, numbers, underscore (_) and the minus (-) character are allowed.' ),
),
2017-07-06 17:41:10 +02:00
),
'submit' => array (
'title' => $this -> l ( 'Save' ),
'name' => 'submitAdd' . $this -> table . ( $this -> _category -> is_root_category && ! Tools :: isSubmit ( 'add' . $this -> table ) && ! Tools :: isSubmit ( 'add' . $this -> table . 'root' ) ? '' : 'AndBackToParent' )
),
);
$this -> tpl_form_vars [ 'shared_category' ] = Validate :: isLoadedObject ( $obj ) && $obj -> hasMultishopEntries ();
$this -> tpl_form_vars [ 'PS_ALLOW_ACCENTED_CHARS_URL' ] = ( int ) Configuration :: get ( 'PS_ALLOW_ACCENTED_CHARS_URL' );
$this -> tpl_form_vars [ 'displayBackOfficeCategory' ] = Hook :: exec ( 'displayBackOfficeCategory' );
// Display this field only if multistore option is enabled
if ( Configuration :: get ( 'PS_MULTISHOP_FEATURE_ACTIVE' ) && Tools :: isSubmit ( 'add' . $this -> table . 'root' )) {
$this -> fields_form [ 'input' ][] = array (
'type' => 'switch' ,
'label' => $this -> l ( 'Root Category' ),
'name' => 'is_root_category' ,
'required' => false ,
'is_bool' => true ,
'values' => array (
array (
'id' => 'is_root_on' ,
'value' => 1 ,
'label' => $this -> l ( 'Yes' )
),
array (
'id' => 'is_root_off' ,
'value' => 0 ,
'label' => $this -> l ( 'No' )
)
)
);
unset ( $this -> fields_form [ 'input' ][ 2 ], $this -> fields_form [ 'input' ][ 3 ]);
}
// Display this field only if multistore option is enabled AND there are several stores configured
if ( Shop :: isFeatureActive ()) {
$this -> fields_form [ 'input' ][] = array (
'type' => 'shop' ,
'label' => $this -> l ( 'Shop association' ),
'name' => 'checkBoxShopAsso' ,
);
}
// remove category tree and radio button "is_root_category" if this category has the root category as parent category to avoid any conflict
if ( $this -> _category -> id_parent == ( int ) Configuration :: get ( 'PS_ROOT_CATEGORY' ) && Tools :: isSubmit ( 'updatecategory' )) {
foreach ( $this -> fields_form [ 'input' ] as $k => $input ) {
if ( in_array ( $input [ 'name' ], array ( 'id_parent' , 'is_root_category' ))) {
unset ( $this -> fields_form [ 'input' ][ $k ]);
}
}
}
if ( ! ( $obj = $this -> loadObject ( true ))) {
return ;
}
// Added values of object Group
$category_groups_ids = $obj -> getGroups ();
$groups = Group :: getGroups ( $this -> context -> language -> id );
// if empty $carrier_groups_ids : object creation : we set the default groups
if ( empty ( $category_groups_ids )) {
$preselected = array ( Configuration :: get ( 'PS_UNIDENTIFIED_GROUP' ), Configuration :: get ( 'PS_GUEST_GROUP' ), Configuration :: get ( 'PS_CUSTOMER_GROUP' ));
$category_groups_ids = array_merge ( $category_groups_ids , $preselected );
}
foreach ( $groups as $group ) {
$this -> fields_value [ 'groupBox_' . $group [ 'id_group' ]] = Tools :: getValue ( 'groupBox_' . $group [ 'id_group' ], ( in_array ( $group [ 'id_group' ], $category_groups_ids )));
}
$this -> fields_value [ 'is_root_category' ] = ( bool ) Tools :: isSubmit ( 'add' . $this -> table . 'root' );
return AdminController :: renderForm ();
}
public function postProcess () {
parent :: postProcess ();
$images = array (
'banner' => 'banners' ,
'univers' => 'univers' ,
'homeimg' => 'home' ,
2017-08-29 15:25:15 +02:00
'iconcat' => 'iconcat'
2017-07-06 17:41:10 +02:00
);
foreach ( $images as $imageName => $folder )
{
if ( isset ( $_FILES [ $imageName ]) && ! empty ( $_FILES [ $imageName ][ 'tmp_name' ]))
{
$obj = $this -> loadObject ( TRUE );
$fileTemp = $_FILES [ $imageName ][ 'tmp_name' ];
$fileParts = pathinfo ( $_FILES [ $imageName ][ 'name' ]);
if ( $fileParts [ 'extension' ] == 'jpg' || $fileParts [ 'extension' ] == 'png' )
{
if ( ! is_dir ( _PS_CAT_IMG_DIR_ . $folder ))
mkdir ( _PS_CAT_IMG_DIR_ . $folder , 0775 );
$res = move_uploaded_file ( $fileTemp , _PS_CAT_IMG_DIR_ . $folder . '/' . $obj -> id . '.jpg' );
if ( ! $res )
{
$this -> errors [] = sprintf ( Tools :: displayError ( 'An error occured during upload of file %s' ), $obj -> id . '.' . $fileParts [ 'extension' ]);
}
else
{
$this -> confirmations [] = sprintf ( $this -> l ( 'File %s has been uploaded' ), $obj -> id . '.' . $fileParts [ 'extension' ]);
}
}
else
{
$this -> errors [] = sprintf ( Tools :: displayError ( 'File %s have not good extension, only .jpg or .png' ), $obj -> id . '.' . $fileParts [ 'extension' ]);
}
}
}
}
}