<?php

/**
 * @file plugins/generic/customBlockManager/CustomBlockPlugin.php
 *
 * Copyright (c) 2014-2020 Simon Fraser University
 * Copyright (c) 2003-2020 John Willinsky
 * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
 *
 * @package plugins.generic.customBlockManager
 *
 * @class CustomBlockPlugin
 *
 * A generic sidebar block that can be customized through the CustomBlockManagerPlugin
 *
 */

namespace APP\plugins\generic\customBlockManager;

use APP\core\Application;
use PKP\facades\Locale;
use PKP\plugins\BlockPlugin;

class CustomBlockPlugin extends BlockPlugin
{
    /** @var string Name of this block plugin */
    public $_blockName;

    /** @var CustomBlockManagerPlugin Parent plugin */
    public $_parentPlugin;

    /**
     * Constructor
     *
     * @param string $blockName Name of this block plugin.
     * @param CustomBlockManagerPlugin $parentPlugin Custom block plugin management plugin.
     */
    public function __construct($blockName, $parentPlugin)
    {
        $this->_blockName = $blockName;
        $this->_parentPlugin = $parentPlugin;
        parent::__construct();
    }

    /**
     * Get the management plugin
     *
     * @return CustomBlockManagerPlugin
     */
    public function getManagerPlugin()
    {
        return $this->_parentPlugin;
    }

    /**
     * @copydoc Plugin::getName()
     */
    public function getName()
    {
        return $this->_blockName;
    }

    /**
     * @copydoc Plugin::getPluginPath()
     */
    public function getPluginPath()
    {
        $plugin = $this->getManagerPlugin();
        return $plugin->getPluginPath();
    }

    /**
     * @copydoc Plugin::getTemplatePath()
     */
    public function getTemplatePath($inCore = false)
    {
        $plugin = $this->getManagerPlugin();
        return $plugin->getTemplatePath($inCore);
    }

    /**
     * @copydoc Plugin::getHideManagement()
     */
    public function getHideManagement()
    {
        return true;
    }

    /**
     * @copydoc LazyLoadPlugin::getEnabled()
     *
     * @param null|mixed $contextId
     */
    public function getEnabled($contextId = null)
    {
        if (!Application::isInstalled()) {
            return true;
        }
        return parent::getEnabled($contextId);
    }

    /**
     * @copydoc Plugin::getDisplayName()
     */
    public function getDisplayName()
    {
        return $this->_blockName . ' ' . __('plugins.generic.customBlock.nameSuffix');
    }

    /**
     * @copydoc Plugin::getDescription()
     */
    public function getDescription()
    {
        return __('plugins.generic.customBlock.description');
    }

    /**
     * @copydoc BlockPlugin::getContents()
     *
     * @param null|mixed $request
     */
    public function getContents($templateMgr, $request = null)
    {
        $context = $request->getContext();
        $contextId = $context ? $context->getId() : Application::SITE_CONTEXT_ID;

        // Get the block contents.
        $customBlockTitle = $this->getSetting($contextId, 'blockTitle');
        $customBlockContent = $this->getSetting($contextId, 'blockContent');
        $currentLocale = Locale::getLocale();
        $contextPrimaryLocale = $context ? $context->getPrimaryLocale() : $request->getSite()->getPrimaryLocale();

        $divCustomBlockId = 'customblock-' . preg_replace('/\W+/', '-', $this->getName());
        $templateMgr->assign('customBlockId', $divCustomBlockId);

        $title = $customBlockTitle[$currentLocale] ? $customBlockTitle[$currentLocale] : $customBlockTitle[$contextPrimaryLocale];
        $content = $customBlockContent[$currentLocale] ? $customBlockContent[$currentLocale] : $customBlockContent[$contextPrimaryLocale];

        $templateMgr->assign('customBlockTitle', $title);
        $templateMgr->assign('customBlockContent', $content);
        $templateMgr->assign('showName', $this->getSetting($contextId, 'showName'));
        return parent::getContents($templateMgr, $request);
    }
}

if (!PKP_STRICT_MODE) {
    class_alias('\APP\plugins\generic\customBlockManager\CustomBlockPlugin', '\CustomBlockPlugin');
}
