Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/old/vendor/mageworx/module-seocrosslinks/Block/Adminhtml/Crosslink/Edit/Tab/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/vendor/mageworx/module-seocrosslinks/Block/Adminhtml/Crosslink/Edit/Tab/Main.php
<?php
/**
 * Copyright © 2018 MageWorx. All rights reserved.
 * See LICENSE.txt for license details.
 */

namespace MageWorx\SeoCrossLinks\Block\Adminhtml\Crosslink\Edit\Tab;

use MageWorx\SeoCrossLinks\Model\Crosslink;
use Magento\Backend\Block\Widget\Tab\TabInterface;
use Magento\Store\Model\System\Store;
use Magento\Config\Model\Config\Source\Yesno as BooleanOptions;
use MageWorx\SeoCrossLinks\Model\Crosslink\Source\IsActive as LinkIsActive;
use MageWorx\SeoCrossLinks\Model\Crosslink\Source\LinkTo as LinkToOptions;
use MageWorx\SeoCrossLinks\Model\Crosslink\Source\Target as LinkTargetOptions;
use MageWorx\SeoCrossLinks\Model\Crosslink\Source\Crosslink\CrosslinkTypeKey as CrosslinkTypeKeyOptions;
use MageWorx\SeoAll\Helper\LandingPage;
use Magento\Catalog\Model\ResourceModel\Product as ProductResource;

class Main extends \Magento\Widget\Block\Adminhtml\Widget\Options  implements TabInterface
{
    /**
     * @var \Magento\Store\Model\System\Store
     */
    protected $systemStore;

    /**
     * @var BooleanOptions
     */
    protected $booleanOptions;

    /**
     * @var LinkIsActiveOptions
     */
    protected $linkIsActiveOptions;

    /**
     * @var LinkToOptions
     */
    protected $linkToOptions;

    /**
     * @var LinkTargetOptions
     */
    protected $linkTargetOptions;

    /**
     * @var CrosslinkTypeKeyOptions
     */
    protected $crosslinkTypeKeyOptions;

    /**
     * @var LandingPage
     */
    protected $landingPage;

    /**
     * @var ProductResource
     */
    protected $productResource;

    /**
     * Main constructor.
     *
     * @param LandingPage $landingPage
     * @param Store $systemStore
     * @param BooleanOptions $booleanOptions
     * @param LinkIsActive $linkIsActive
     * @param LinkToOptions $linkToOptions
     * @param LinkTargetOptions $linkTargetOptions
     * @param \Magento\Backend\Block\Template\Context $context
     * @param \Magento\Framework\Registry $registry
     * @param \Magento\Framework\Data\FormFactory $formFactory
     * @param \Magento\Framework\Option\ArrayPool $sourceModelPool
     * @param \Magento\Widget\Model\Widget $widget
     * @param CrosslinkTypeKeyOptions $crosslinkTypeKeyOptions
     * @param array $data
     */
    public function __construct(
        LandingPage $landingPage,
        Store $systemStore,
        BooleanOptions $booleanOptions,
        LinkIsActive $linkIsActive,
        LinkToOptions $linkToOptions,
        LinkTargetOptions $linkTargetOptions,
        \Magento\Backend\Block\Template\Context $context,
        \Magento\Framework\Registry $registry,
        \Magento\Framework\Data\FormFactory $formFactory,
        \Magento\Framework\Option\ArrayPool $sourceModelPool,
        \Magento\Widget\Model\Widget $widget,
        CrosslinkTypeKeyOptions $crosslinkTypeKeyOptions,
        ProductResource $productResource,
        array $data = []
    ) {
        $this->landingPage             = $landingPage;
        $this->systemStore             = $systemStore;
        $this->booleanOptions          = $booleanOptions;
        $this->linkIsActiveOptions     = $linkIsActive;
        $this->linkToOptions           = $linkToOptions;
        $this->linkTargetOption        = $linkTargetOptions;
        $this->crosslinkTypeKeyOptions = $crosslinkTypeKeyOptions;
        $this->productResource         = $productResource;
        parent::__construct($context, $registry, $formFactory, $sourceModelPool, $widget, $data);
    }

    public function addFields()
    {
        return $this;
    }

    /**
     * Prepare form
     *
     * @return $this
     */
    protected function _prepareForm()
    {
        /** @var \MageWorx\SeoCrossLinks\Model\Crosslink $crosslink */
        $crosslink = $this->_coreRegistry->registry('mageworx_seocrosslinks_crosslink');

        $form = $this->_formFactory->create();
        $form->setFieldNameSuffix('crosslink');

        /** @var  \Magento\Framework\Data\Form\Element\Fieldset $fieldset */
        $fieldset = $form->addFieldset(
            'base_fieldset',
            [
                'legend' => __('Crosslink Info'),
                'class'  => 'fieldset-wide'
            ]
        );

        if ($crosslink->getId()) {
            $fieldset->addField(
                'crosslink_id',
                'hidden',
                ['name' => 'crosslink_id']
            );
        }

        $fieldset->addField(
            'keyword',
            'textarea',
            [
                'name'      => 'keyword',
                'label'     => __('Keyword'),
                'title'     => __('Keyword'),
                'required'  => true,
                'note'      => $this->getKeywordFieldNote(),
            ]
        );

        $fieldset->addField(
            'link_title',
            'text',
            [
                'name'      => 'link_title',
                'label'     => __('Link Title'),
                'title'     => __('Link Title'),
            ]
        );

        $fieldset->addField(
            'link_target',
            'select',
            [
                'label'     => __('Link Target'),
                'title'     => __('Link Target'),
                'name'      => 'link_target',
                'required'  => true,
                'options'   => $this->linkTargetOption->toArray()
            ]
        );

        if ($this->_storeManager->isSingleStoreMode()) {
            $fieldset->addField(
                'store_id',
                'hidden',
                [
                    'name'      => 'stores[]',
                    'value'     => $this->_storeManager->getStore(true)->getId()
                ]
            );
            $crosslink->setStoreId($this->_storeManager->getStore(true)->getId());
        }

        /**
         * Check is single store mode
         */
        if (!$this->_storeManager->isSingleStoreMode()) {
            $field = $fieldset->addField(
                'store_id',
                'multiselect',
                [
                    'name'     => 'stores[]',
                    'label'    => __('Store View'),
                    'title'    => __('Store View'),
                    'required' => true,
                    'values'   => $this->systemStore->getStoreValuesForForm(false, true),
                    'note'     =>__('NOTE: Cross Link will be build in the chosen store views.'),
                ]
            );
        }

        $reference = $fieldset->addField(
            'reference',
            'select',
            [
                'label'     => __('Reference'),
                'name'      => 'reference',
                'values'    => $this->linkToOptions->toOptionArray(),
                'note'      => __("NOTE: Cross link will not be shown on the page if this page is specified as target page for this keyword.")
            ]
        );

        $url = $fieldset->addField(
            CrosslinkTypeKeyOptions::URL_REQUEST_IDENTIFIER,
            'text',
            [
                'label'    => __('Custom URL'),
                'name'     => CrosslinkTypeKeyOptions::URL_REQUEST_IDENTIFIER,
                'index'    => CrosslinkTypeKeyOptions::URL_REQUEST_IDENTIFIER,
                'class'    => 'required-entry',
                'required' => true,
                'note'     => $this->getStaticUrlFieldNote()
            ]
        );

        $category = $this->addCategoryChooserField(
            $fieldset,
            CrosslinkTypeKeyOptions::CATEGORY_REQUEST_IDENTIFIER,
            $crosslink->getRefCategoryId()
        );

        $product  = $this->addProductChooserField(
            $fieldset,
            CrosslinkTypeKeyOptions::PRODUCT_REQUEST_IDENTIFIER,
            $crosslink->getRefProductSku()
        );
        if ($this->landingPage->isLandingPageEnabled()) {
            $landingpage = $this->addLandingpageChooserField(
                $fieldset,
                CrosslinkTypeKeyOptions::LANDINGPAGE_REQUEST_IDENTIFIER,
                $crosslink->getRefLandingpageId()
            );
        }

        $fieldset->addField(
            'replacement_count',
            'text',
            [
                'label'    => __('Max Replacement Count per Page'),
                'name'     => 'replacement_count',
                'index'    => 'replacement_count',
                'class'    => 'required-entry not-negative-amount integer validate-number-range number-range-0-100',
                'note'     => __('Max # of this keyword per page. 100 is the max value.'),
                'required' => true,
            ]
        );

        $fieldset->addField(
            'priority',
            'text',
            [
                'label'    => __('Priority'),
                'name'     => 'priority',
                'index'    => 'priority',
                'class'    => 'required-entry not-negative-amount integer validate-number-range number-range-0-100',
                'note'     => __('100 is the highest priority.'),
                'required' => true,
            ]
        );

        $fieldset->addField(
            'nofollow_rel',
            'select',
            [
                'label'     => __('Nofollow'),
                'title'     => __('Nofollow'),
                'name'      => 'nofollow_rel',
                'required'  => false,
                'options'   => $this->booleanOptions->toArray()
            ]
        );

        $fieldset->addField(
            'is_active',
            'select',
            [
                'label'     => __('Is Active'),
                'title'     => __('Is Active'),
                'name'      => 'is_active',
                'required'  => true,
                'options'   => $this->linkIsActiveOptions->toArray()
            ]
        );

        $dependency = $this->getLayout()->createBlock(
            'Magento\Backend\Block\Widget\Form\Element\Dependence'
        )->addFieldMap(
            $reference->getHtmlId(),
            $reference->getName()
        )->addFieldMap(
            $url->getHtmlId(),
            $url->getName()
        )->addFieldMap(
            $product->getHtmlId(),
            $product->getName()
        )->addFieldMap(
            $category->getHtmlId(),
            $category->getName()
        )->addFieldDependence(
            $url->getName(),
            $reference->getName(),
            Crosslink::REFERENCE_TO_STATIC_URL
        )->addFieldDependence(
            $product->getName(),
            $reference->getName(),
            Crosslink::REFERENCE_TO_PRODUCT_BY_SKU
        )->addFieldDependence(
            $category->getName(),
            $reference->getName(),
            Crosslink::REFERENCE_TO_CATEGORY_BY_ID
        );
        if ($this->landingPage->isLandingPageEnabled()) {
            $dependency->addFieldMap(
                $landingpage->getHtmlId(),
                $landingpage->getName()
            )->addFieldDependence(
                $landingpage->getName(),
                $reference->getName(),
                Crosslink::REFERENCE_TO_LANDINGPAGE_BY_ID
            );
        }

        $this->setChild('form_after', $dependency);

        $this->addJsDependency($reference);

        $crosslinkData = $this->_session->getData('mageworx_seocrosslinks_crosslink_data', true);
        if ($crosslinkData) {
            $crosslink->addData($crosslinkData);
        } else {
            if (!$crosslink->getId()) {
                $crosslink->addData($crosslink->getDefaultValues());
            }
        }

        /** For avoid display their ids as field value - we show the names instead. */
        $crosslink->unsetData(CrosslinkTypeKeyOptions::CATEGORY_REQUEST_IDENTIFIER);
        $crosslink->unsetData(CrosslinkTypeKeyOptions::PRODUCT_REQUEST_IDENTIFIER);

        $form->addValues($crosslink->getData());
        $this->setForm($form);
        return parent::_prepareForm();
    }

    /**
     * @param \Magento\Framework\Data\Form\Element\Fieldset $fieldset
     * @param $name
     * @param null $value
     * @return mixed
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    protected function addCategoryChooserField($fieldset, $name, $value = null)
    {
        $field = $fieldset->addField(
            $name,
            'label',
            [
                'name'      => $name,
                'label'     =>  __('Select Category...'),
                'required'  => true,
                'index'     => $name,
                'class'     => 'widget-option',
                'value'     => 'category/' . $value,
            ]
        );

        /** @var \Magento\Catalog\Block\Adminhtml\Category\Widget\Chooser $helperBlock */
        $helperBlock = $this->getLayout()->createBlock(
            '\Magento\Catalog\Block\Adminhtml\Category\Widget\Chooser',
            '',
            ['data' => []]
        );

        $helperBlock->setConfig(
            []
        )->setFieldsetId(
            $fieldset->getId()
        )->prepareElementHtml(
            $field
        );

        return $field;
    }

    /**
     * @param $fieldset
     * @param $name
     * @param null $value
     * @return mixed
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    protected function addProductChooserField($fieldset, $name, $value = null)
    {
        if ($value) {
            $value = $this->productResource->getIdBySku($value);
        }

        $field = $fieldset->addField(
            $name,
            'label',
            [
                'name'      => $name,
                'label'     =>  __('Select Product...'),
                'required'  => true,
                'class'     => 'widget-option',
                'index'    => 'ref_product_sku',
                'value'     => 'product/' . $value,
            ]
        );

        $helperBlock = $this->getLayout()->createBlock(
            'Magento\Catalog\Block\Adminhtml\Product\Widget\Chooser',
            '',
            ['data' => []]
        );

        if ($helperBlock instanceof \Magento\Framework\DataObject) {
            $helperBlock->setConfig(
                []
            )->setFieldsetId(
                $fieldset->getId()
            )->prepareElementHtml(
                $field
            );
        }

        return $field;
    }

    /**
     * @param $fieldset
     * @param $name
     * @param null $value
     * @return mixed
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    protected function addLandingpageChooserField($fieldset, $name, $value = null)
    {
        $field = $fieldset->addField(
            $name,
            'label',
            [
                'name'      => $name,
                'label'     =>  __('Select Landing Page...'),
                'required'  => true,
                'class'     => 'widget-option',
                'index'    => 'ref_landingpage_id',
                'value'     => $value,
            ]
        );

        $helperBlock = $this->getLayout()->createBlock(
            'MageWorx\SeoAll\Block\Adminhtml\LandingPage\LandingpageGrid',
            '',
            ['data' => []]
        );

        if ($helperBlock instanceof \Magento\Framework\DataObject) {
            $helperBlock->setConfig(
                []
            )->setFieldsetId(
                $fieldset->getId()
            )->prepareElementHtml(
                $field
            );
        }

        return $field;
    }

    /**
     * @param $reference
     * @return $this
     */
    protected function addJsDependency($reference)
    {
        $referenceOptions = json_encode($this->getCrosslinksTypeReferenceKeyEntityOptions());

        $reference->setAfterElementHtml("<script>

            require(['jquery'], function($) {
               
                var referenceOptions = $referenceOptions;
                               
                function actionChooser(action, entityName) {
                    
                    var inputElementClass = '.field-chooser' + entityName + ' input';
                    var fieldClass = '.field-' + entityName;
                    var chooserClass = '.field-chooser' + entityName;
                             
                    if (action == 'hide') {
                        $(inputElementClass).removeClass('required-entry');
                        $(fieldClass).hide();                    
                        $(chooserClass).hide();
                    } 
                    if (action == 'show') {                    
                        $(inputElementClass).addClass('required-entry');
                        $(fieldClass).show();                    
                        $(chooserClass).show();
                    }
                }
                    
                $('#reference').on('change', function() {
                    
                    for (key in referenceOptions) {
                        actionChooser('hide', referenceOptions[key]);
                    }                    
                    var value = $(this).val();
                    actionChooser('show', referenceOptions[value]);
                });
                                              
                $('document').ready(function () {
                   $('#reference').trigger('change');                  
                });
            }
        );
        </script>");

        return $this;
    }

    /**
     * Prepare label for tab
     *
     * @return string
     */
    public function getTabLabel()
    {
        return __('Cross Link');
    }

    /**
     * Prepare title for tab
     *
     * @return string
     */
    public function getTabTitle()
    {
        return $this->getTabLabel();
    }

    /**
     * Can show tab in tabs
     *
     * @return boolean
     */
    public function canShowTab()
    {
        return true;
    }

    /**
     * Tab is hidden
     *
     * @return boolean
     */
    public function isHidden()
    {
        return false;
    }

    protected function getKeywordFieldNote()
    {
        $hrefBefore = '<a href="http://support.mageworx.com/extensions/seo_suite_pro_and_ultimate/how_to_add_keywords_for_creating_internal_links.html" target="_blank">';
        $hrefAfter  = '</a>';

        $note = '<p>' . __("NOTE: Enter one keyword (keyword phrase) per line. "
                . "A new cross link rule will be created for each entered keyword.");

        $note .= '</p><p>' . __("For multiple keywords use the Reduced Multisave Priority feature."
                . " It reduces the keyword priority for every next keyword on the list "
                . "(thus, the most important keywords appear in the first place).");

        $note .= '</p><p>' . __("Adding '+' before or after a keyword will apply the Cross Link rule to all its variations. "
                . "E.g. Entering 'iphone 5+' will apply the rule to 'iphone 5s', 'iphone 5c', etc. (but not to 'iphone 5').") . '</p>';

        $note .= '<p>' . __('For more info, follow the %1 link %2.', $hrefBefore, $hrefAfter) . '</p>';

        return $note;
    }

    protected function getStaticUrlFieldNote()
    {
        $note = '<p>';
        $note .= __("Link without 'http[s]://' as customer/account/<br>will be converted to<br>http[s]://(store_URL_here)/customer/account/");
        $note .= '</p><p>';
        $note .= __("Link with 'http[s]://' will be added as it is.");
        $note .= '</p>';
        return $note;
    }

    /**
     * @return array
     */
    protected function getCrosslinksTypeReferenceKeyEntityOptions()
    {
        $referenceKeyOptions = $this->crosslinkTypeKeyOptions->toArray();
        unset($referenceKeyOptions[Crosslink::REFERENCE_TO_STATIC_URL]);
        return $referenceKeyOptions;
    }
}

Spamworldpro Mini