<?php
/**
 * @package Unlimited Elements
 * @author unlimited-elements.com
 * @copyright (C) 2021 Unlimited Elements, All Rights Reserved.
 * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 * */
defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');

require_once 'addon_view_childparams.class.php';

if(GlobalsUC::$isProVersion){

	require_once GlobalsUC::$pathPro."childparams_pro.class.php";
}

class UniteCreatorAddonView{

	protected $objAddon;
	protected $settingsItemOutput, $settingsJSOutput, $objAddonType, $addonType;
	protected $showToolbar = true, $showHeader = true;
	protected $addonLocation;

	//show defenitions
	protected $putAllTabs = true, $arrTabsToPut = array();
	protected $isSVG = false, $showContstantVars = true, $showPreviewSettings = true;
	protected $showAddonDefaluts = true, $showTestAddon = true;

	protected $showTestAddonNew = false;		//hide me

	protected $textSingle, $textPlural, $tabHtmlTitle = null;
	protected $htmlEditorMode = null, $arrCustomConstants = null;
	protected $urlViewBack = null;
	protected $showSmallIconOption = null;
	protected $addonOptions;
	protected $arrSkipPanelParams = array();	//attributes that don't show in right panel
	protected $objChildParams = null;
	protected $hasAttributesCats = true;


	private function z______INIT_______(){}


	/**
	 * constructor
	 */
	public function __construct(){

		if(GlobalsUC::$isProVersion)
			$this->objChildParams = new UniteCreatorChildParamsPro();
		else
			$this->objChildParams = new UniteCreatorAddonViewChildParams();

	}

	/**
	 *
	 * init skip panel params
	 */
	public function initSkipPanelParams(){

		$this->arrSkipPanelParams = array();
		$this->arrSkipPanelParams[UniteCreatorDialogParam::PARAM_TYPOGRAPHY] = true;
		$this->arrSkipPanelParams[UniteCreatorDialogParam::PARAM_MARGINS] = true;
		$this->arrSkipPanelParams[UniteCreatorDialogParam::PARAM_PADDING] = true;
		$this->arrSkipPanelParams[UniteCreatorDialogParam::PARAM_BACKGROUND] = true;
		$this->arrSkipPanelParams[UniteCreatorDialogParam::PARAM_BORDER] = true;

	}


	/**
	 * run view
	 */
	public function runView($isPutHtml = true){

		$this->init();

		$this->putHtml();

		if($isPutHtml == false)
			return(false);

	}

	/**
	 * validate init settings
	 */
	private function validateInitSettings(){

		if($this->putAllTabs == false && empty($this->arrTabsToPut))
			UniteFunctionsUC::throwError("if all tabs setting turned off should be some tabs in arrTabsToPut array");

	}


	/**
	 * get settings item output
	 */
	private function initSettingsItem(){

		$options = $this->objAddon->getOptions();

		//items editor - settings
		$settingsItem = new UniteCreatorSettings();
		$settingsItem->addRadioBoolean("enable_items", esc_html__("Enable Items", "unlimited-elements-for-elementor"), false);


		$params = array();
		$params["placeholder"] = __("Default is 'Items'","unlimited-elements-for-elementor");
		$params["class"] = "alias";

		$settingsItem->addTextBox("items_section_title", "", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".esc_html__("Section Label", "unlimited-elements-for-elementor"), $params);
		
		$settingsItem->addControl("enable_items", "items_section_title", "show", "true");

		//heading
		$params = array();
		$params["class"] = "alias";

		$settingsItem->addTextBox("items_section_heading", "", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".esc_html__("Section Heading", "unlimited-elements-for-elementor"), $params);
		$settingsItem->addControl("enable_items", "items_section_heading", "show", "true");

		//title field
		$params["placeholder"] = "Default is: {{{title}}}";

		$settingsItem->addTextBox("items_title_field", "", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".esc_html__("Title Field", "unlimited-elements-for-elementor"), $params);
		$settingsItem->addControl("enable_items", "items_title_field", "show", "true");


		$settingsItem->setStoredValues($options);
		
		$this->settingsItemOutput = new UniteSettingsOutputInlineUC();
		$this->settingsItemOutput->init($settingsItem);
		$this->settingsItemOutput->setAddCss("[wrapperid] .unite_table_settings_wide th{width:100px;}");

	}


	/**
	 * get settings item output
	 */
	private function initSettingsJS(){

		$options = $this->objAddon->getOptions();

		//items editor - settings
		$settingsJS = new UniteCreatorSettings();
		$settingsJS->addCheckbox("js_as_module", false, UniteSettingsUC::PARAM_NOTEXT, __("load as module", "unlimited-elements-for-elementor"));

		$settingsJS->setStoredValues($options);

		$this->settingsJSOutput = new UniteSettingsOutputInlineUC();
		$this->settingsJSOutput->init($settingsJS);

	}



	/**
	 * init svg addon type
	 */
	private function initByAddonType_svg(){

		$this->putAllTabs = false;
		$this->arrTabsToPut["html"] = true;
		$this->isSVG = true;
	}

	/**
	 * init by addon type generally
	 */
	private function initByAddonType_general(){

		if($this->objAddonType->typeName == GlobalsUC::ADDON_TYPE_BGADDON)
			$this->hasAttributesCats = false;

		if($this->objAddonType->addonView_htmlTabOnly == true){
			$this->putAllTabs = false;
			$this->arrTabsToPut["html"] = true;
		}

		if($this->objAddonType->addonView_showConstantVars == false)
			$this->showContstantVars = false;

		if($this->objAddonType->addonView_showPreviewSettings == false)
			$this->showPreviewSettings = false;

		if($this->objAddonType->addonView_showAddonDefaults == false)
			$this->showAddonDefaluts = false;

		if($this->objAddonType->addonView_showTestAddon == false)
			$this->showTestAddon = false;

		if(!empty($this->objAddonType->addonView_tabHtmlTitle))
			$this->tabHtmlTitle = $this->objAddonType->addonView_tabHtmlTitle;

		if(!empty($this->objAddonType->addonView_htmlEditorMode))
			$this->htmlEditorMode = $this->objAddonType->addonView_htmlEditorMode;

		if(!empty($this->objAddonType->addonView_arrCustomConstants))
			$this->arrCustomConstants = $this->objAddonType->addonView_arrCustomConstants;

		if(!empty($this->objAddonType->addonView_urlBack))
			$this->urlViewBack = $this->objAddonType->addonView_urlBack;

		$this->showSmallIconOption = $this->objAddonType->addonView_showSmallIconOption;

	}


	/**
	 * init by addon type
	 */
	private function initByAddonType(){

		$this->textSingle = $this->objAddonType->textSingle;
		$this->textPlural = $this->objAddonType->textPlural;

		if($this->objAddonType->isSVG){
			$this->initByAddonType_svg();
			return(false);
		}

		$this->initByAddonType_general();
	}




	/**
	 * init the view
	 */
	private function init(){

		$addonID = UniteFunctionsUC::getGetVar("id","",UniteFunctionsUC::SANITIZE_ID);

		if(empty($addonID))
			UniteFunctionsUC::throwError("Widget ID not given");

		$this->objAddon = new UniteCreatorAddon();

		$this->objAddon->setOperationType(UniteCreatorAddon::OPERATION_EDIT);

		$this->objAddon->initByID($addonID);

		$this->addonType = $this->objAddon->getType();
		$this->objAddonType = $this->objAddon->getObjAddonType();

		$this->addonOptions = $this->objAddon->getOptions();

		UniteCreatorAdmin::setAdminGlobalsByAddonType($this->objAddonType, $this->objAddon);

		$this->initByAddonType();

		$this->initSettingsItem();

		$this->initSettingsJS();

		$this->validateInitSettings();

		$this->initSkipPanelParams();
	}

	private function z________PUT_HTML______(){}


	/**
	 * get header title
	 */
	protected function getHeaderTitle(){

		$title = $this->objAddon->getTitle(true);
		$addonID = $this->objAddon->getID();

		$headerTitle = esc_html__("Edit ","unlimited-elements-for-elementor").$this->textSingle;
		$headerTitle .= " - " . $title;

		return($headerTitle);
	}


	/**
	 * put top html
	 */
	private function putHtml_top(){

		$headerTitle = $this->getHeaderTitle();

		require HelperUC::getPathTemplate("header");
	}

	/**
	 * modify general settings by svg type
	 */
	private function modifyGeneralSettings_SVG($generalSettings){

		$generalSettings->hideSetting("show_small_icon");
		$generalSettings->hideSetting("text_preview");

		return($generalSettings);
	}

	/**
	 * modify general settings by svg type
	 */
	private function modifyGeneralSettings_general($generalSettings){

		//hide preview settings
		if($this->showPreviewSettings == false){
			$generalSettings->hideSetting("show_small_icon");
			$generalSettings->hideSetting("text_preview");
			$generalSettings->hideSetting("preview_size");
			$generalSettings->hideSetting("preview_bgcol");
		}

		if($this->showSmallIconOption == false){
			$generalSettings->hideSetting("show_small_icon");

		}

		return($generalSettings);
	}


	/**
	 * init general settings from file
	 */
	private function initGeneralSettings(){

		$filepathAddonSettings = GlobalsUC::$pathSettings."addon_fields.php";

		require $filepathAddonSettings;

		if($this->isSVG)
			$generalSettings = $this->modifyGeneralSettings_SVG($generalSettings);
		else
			$generalSettings = $this->modifyGeneralSettings_general($generalSettings);


		return($generalSettings);
	}


	/**
	 * put general settings tab html
	 */
	private function putHtml_generalSettings(){

		$addonID = $this->objAddon->getID();
		$title = $this->objAddon->getTitle(true);

		$name = $this->objAddon->getNameByType();

		$catTitle = $this->objAddon->getCatTitle();

		$generalSettings = $this->initGeneralSettings();

		//set options from addon
		$arrOptions = $this->objAddon->getOptions();
		$generalSettings->setStoredValues($arrOptions);

		$settingsOutput = new UniteSettingsOutputWideUC();
		$settingsOutput->init($generalSettings);

		$addonTypeTitle = $this->objAddonType->textShowType;


		?>

		<div class="uc-edit-addon-col uc-col-first">

			<span id="addon_id" data-addonid="<?php echo esc_attr($addonID)?>" style="display:none"></span>

			<?php echo $this->textSingle.esc_html__(" Title", "unlimited-elements-for-elementor"); ?>:

			<div class="vert_sap5"></div>

			<input type="text" id="text_addon_title" value="<?php echo esc_attr($title)?>" class="unite-input-regular">

			<!-- NAME -->

			<div class="vert_sap15"></div>

			<?php echo $this->textSingle.esc_html__(" Name", "unlimited-elements-for-elementor"); ?>:

			<div class="vert_sap5"></div>

			<input type="text" id="text_addon_name" value="<?php echo esc_attr($name)?>" class="unite-input-regular">


			<!-- TYPE -->
			<div class="vert_sap20"></div>

			<?php esc_html_e("Widget Type", "unlimited-elements-for-elementor");?>: <b> <?php echo esc_html($addonTypeTitle)?> </b>

			<?php if(!empty($catTitle)):?>
			<div class="vert_sap10"></div>

			<?php esc_html_e("Category", "unlimited-elements-for-elementor");?>:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			<b> <?php echo $catTitle?> </b>

			<?php endif?>

			<?php UniteProviderFunctionsUC::doAction(UniteCreatorFilters::ACTION_EDIT_ADDON_ADDSETTINGS, $arrOptions)?>

		</div>

		<div class="uc-edit-addon-col uc-col-second">
				<?php
					$settingsOutput->draw("uc_general_settings", true);
				?>
		</div>


		<div class="unite-clear"></div>

		<div class="vert_sap15"></div>


		<?php

	}

	/**
	 * if put tab
	 */
	private function isPutTab($tabName){

		if($this->putAllTabs == true)
			return(true);

		if(isset($this->arrTabsToPut[$tabName]))
			return(true);

		return(false);
	}

	/**
	 * if put changelog tab
	 */
	private function isPutChangelogTab(){

		$isChangelogEnabled = HelperProviderUC::isAddonChangelogEnabled();

		return $isChangelogEnabled === true;
	}

	/**
	 * if put revisions tab
	 */
	private function isPutRevisionsTab(){

		$isRevisionsEnabled = HelperProviderUC::isAddonRevisionsEnabled();

		return $isRevisionsEnabled === true;
	}

	/**
	 * put tabs html
	 */
	private function putHtml_tabs(){

		$isPut_general = true;		//always put general tab

		$isPut_html = $this->isPutTab("html");
		$isPut_attr = $this->isPutTab("attr");
		$isPut_itemattr = $this->isPutTab("itemattr");
		$isPut_css = $this->isPutTab("css");
		$isPut_js = $this->isPutTab("js");
		$isPut_includes = $this->isPutTab("includes");
		$isPut_assets = $this->isPutTab("assets");
		$isPut_changelog = $this->isPutChangelogTab();
		$isPut_revisions = $this->isPutRevisionsTab();

		$htmlTabTitle = esc_html__("HTML", "unlimited-elements-for-elementor");
		if($this->isSVG == true)
			$htmlTabTitle = esc_html__("SVG Content","unlimited-elements-for-elementor");
		else{

			if(!empty($this->tabHtmlTitle))
				$htmlTabTitle = $this->tabHtmlTitle;

		}

		?>

		<div id="uc_tabs" class="uc-tabs uc-tabs-disabled" data-inittab="uc_tablink_general">

			<?php if($isPut_general):?>
			<a id="uc_tablink_general" href="javascript:void(0)" data-contentid="uc_tab_general">
				<?php esc_html_e("General", "unlimited-elements-for-elementor")?>
			</a>
			<?php endif?>

			<?php if($isPut_attr):?>
			<a id="uc_tablink_attr" href="javascript:void(0)" data-contentid="uc_tab_attr">
				<?php esc_html_e("Attributes", "unlimited-elements-for-elementor")?>
			</a>
			<?php endif?>

			<?php if($isPut_itemattr):?>
			<a id="uc_tablink_itemattr" href="javascript:void(0)" data-contentid="uc_tab_itemattr">
				<?php esc_html_e("Item Attributes", "unlimited-elements-for-elementor")?>
			</a>
			<?php endif?>

			<?php if($isPut_html):?>
			<a id="uc_tablink_html" href="javascript:void(0)" data-contentid="uc_tab_html">
				<?php echo esc_html($htmlTabTitle)?>
			</a>
			<?php endif?>

			<?php if($isPut_css):?>
			<a id="uc_tablink_css" href="javascript:void(0)" data-contentid="uc_tab_css">
				<?php esc_html_e("CSS", "unlimited-elements-for-elementor")?>
			</a>
			<?php endif?>

			<?php if($isPut_js):?>
			<a id="uc_tablink_js" href="javascript:void(0)" data-contentid="uc_tab_js">
				<?php esc_html_e("Javascript", "unlimited-elements-for-elementor")?>
			</a>
			<?php endif?>

			<?php if($isPut_includes):?>
			<a id="uc_tablink_includes" href="javascript:void(0)" data-contentid="uc_tab_includes">
				<?php esc_html_e("js/css Includes", "unlimited-elements-for-elementor")?>
			</a>
			<?php endif?>

			<?php if($isPut_assets):?>
			<a id="uc_tablink_assets" href="javascript:void(0)" data-contentid="uc_tab_assets">
				<?php esc_html_e("Assets", "unlimited-elements-for-elementor")?>
			</a>
			<?php endif?>

			<?php if($isPut_changelog): ?>
				<a id="uc_tablink_changelog" href="javascript:void(0)" data-contentid="uc_tab_changelog">
					<?php esc_html_e("Changelog", "unlimited-elements-for-elementor") ?>
				</a>
			<?php endif?>

			<?php if($isPut_revisions): ?>
				<a id="uc_tablink_revisions" href="javascript:void(0)" data-contentid="uc_tab_revisions">
					<?php esc_html_e("Revisions", "unlimited-elements-for-elementor") ?>
				</a>
			<?php endif?>
		</div>

		<div class="unite-clear"></div>

		<?php
	}


	/**
	 * put item for library include
	 */
	private function putIncludeLibraryItem($title, $name, $arrIncludes){

		$htmlChecked = "";
		if(in_array($name, $arrIncludes) == true)
			$htmlChecked = "checked='checked'";

		?>

			<li>
				<input type="checkbox" id="check_include_<?php echo esc_attr($name)?>" data-include="<?php echo esc_attr($name)?>" <?php echo UniteProviderFunctionsUC::escAddParam($htmlChecked)?>>

				<label for="check_include_<?php echo esc_attr($name)?>">
					<?php echo esc_html($title)?>
				</label>

			</li>

		<?php
	}


	/**
	 * put library includes
	 */
	private function putHtml_LibraryIncludes($arrJsLibIncludes){

		$objLibrary = new UniteCreatorLibrary();
		$arrLibrary = $objLibrary->getArrLibrary();

		foreach($arrLibrary as $item){
			$name = $item["name"];
			$title = $item["title"];

			$this->putIncludeLibraryItem($title, $name, $arrJsLibIncludes);
		}


	}

	/**
	 * put includes assets browser
	 */
	private function putHtml_Includes_assetsBrowser(){

		$objAssets = new UniteCreatorAssetsWork();
		$objAssets->initByKey("includes", $this->objAddon);

		$pathAssets = $this->objAddon->getPathAssetsFull();
		$objAssets->putHTML($pathAssets);

	}


	/**
	 * put includes html
	 */
	private function putHtml_Includes(){

		$arrJsLibIncludes = $this->objAddon->getJSLibIncludes();
		$arrJsIncludes = $this->objAddon->getJSIncludes();
		$arrCssIncludes = $this->objAddon->getCSSIncludes();

		$dataJs = UniteFunctionsUC::jsonEncodeForHtmlData($arrJsIncludes, "init");
		$dataCss = UniteFunctionsUC::jsonEncodeForHtmlData($arrCssIncludes, "init");


		?>
			<table id="uc_table_includes" class="unite_table_items">
				<thead>
					<tr>
						<th class="uc-table-includes-left">
							<b>
							<?php esc_html_e("Choose From Browser", "unlimited-elements-for-elementor")?>
							</b>
						</th>
						<th class="uc-table-includes-right">
							<b>
							<?php esc_html_e("JS / Css Includes", "unlimited-elements-for-elementor")?>
							</b>
						</th>
					</tr>
				</thead>
				<tbody>
					<tr>
						<td valign="top">
							<?php $this->putHtml_Includes_assetsBrowser(); ?>
						</td>
						<td valign="top">

							<ul id="uc-js-libraries" class="unite-list-hor">
								<li class="pright_10">
									<span class="unite-title2"><?php esc_html_e("Libraries", "unlimited-elements-for-elementor")?>:</span> </b>
								</li>
								<?php $this->putHtml_LibraryIncludes($arrJsLibIncludes)?>
							</ul>

							<div class="unite-clear"></div>

							<div id="uc_includes_wrapper">

								<div class="unite-title2">Js Includes:</div>

								<ul id="uc-js-includes" class="uc-js-includes" data-type="js" <?php echo UniteProviderFunctionsUC::escAddParam($dataJs)?>></ul>

								<div class="unite-title2">Css Includes:</div>

								<ul id="uc-css-includes" class="uc-css-includes" data-type="css" <?php echo UniteProviderFunctionsUC::escAddParam($dataCss)?>></ul>

							</div>

						</td>
					</tr>
				</tbody>
			</table>

			<div id="uc_dialog_unclude_settings" title="<?php esc_html_e("Include Settings")?>" class="unite-inputs" style="display:none">
				<div class="unite-dialog-inside">

					<?php esc_html_e("Include When:", "unlimited-elements-for-elementor")?>

					<span class="hor_sap"></span>

					<select id="uc_dialog_include_attr"></select>

					<span id="uc_dialog_include_value_container" style="display:none">

						<span class="hor_sap5"></span>

						<?php esc_html_e("equals", "unlimited-elements-for-elementor")?>

						<span class="hor_sap5"></span>

						<select id="uc_dialog_include_values" multiple class="uc-dialog-include-settings__values"></select>

					</span>

					<?php HelperHtmlUC::putDialogControlFieldsNotice() ?>

					<div class="vert_sap20"></div>

					<label class="unite-inputs-label">
						<?php _e("Handle")?>
					</label>

					<input type="text" name="include_handle" class="unite-input-alias">

					<i>* <?php _e("leave empty for auto", "unlimited-elements-for-elementor")?></i>

					<div class="vert_sap10"></div>

					<div class="uc-dialog-includes-js">

						<label>
							<input id="uc_dialog_include_after_elementor_frontend" type="checkbox" name="include_after_elementor_frontend">
							&nbsp;
							<?php _e("Include after elementor-frontend.js", "unlimited-elements-for-elementor")?>

						</label>

						<div class="vert_sap10"></div>
						<label>
							<input id="uc_dialog_include_as_module" type="checkbox" name="include_as_module">
							&nbsp;
							<?php _e("Include as ES6 module", "unlimited-elements-for-elementor")?>

						</label>

					</div>

				</div>
			</div>


			<?php

	}


	/**
	 * put assets tab html
	 */
	private function putHtml_assetsTab(){

		$path = $this->objAddon->getPathAssets();
		$pathAbsolute = $this->objAddon->getPathAssetsFull();

		$textNotSet = esc_html__("[not set]", "unlimited-elements-for-elementor");

		$unsetAddHtml = "style='display:none'";
		$htmlPath = $textNotSet;
		$dataPath = "";
		if(!empty($path)){
			$unsetAddHtml = "";
			$htmlPath = htmlspecialchars($path);
			$dataPath = $htmlPath;
		}

		?>
			<div class="uc-assets-folder-wrapper">
				<span class="uc-assets-folder-label"><?php echo $this->textSingle.esc_html__(" Assets Path: ", "unlimited-elements-for-elementor")?></span>
				<span id="uc_assets_path" class="uc-assets-folder-folder" data-path="<?php echo esc_attr($dataPath)?>" data-textnotset="<?php echo esc_attr($textNotSet)?>"><?php echo esc_html($htmlPath)?></span>
				<a id="uc_button_set_assets_folder" href="javascript:void(0)" class="unite-button-secondary"><?php esc_html_e("Set", "unlimited-elements-for-elementor")?></a>
				<a id="uc_button_set_assets_unset" href="javascript:void(0)" class="unite-button-secondary" <?php echo UniteProviderFunctionsUC::escAddParam($unsetAddHtml)?>><?php esc_html_e("Unset", "unlimited-elements-for-elementor")?></a>
			</div>
		<?php

		$objAssets = new UniteCreatorAssetsWork();
		$objAssets->initByKey("assets_manager", $this->objAddon);

		$objAssets->putHTML($pathAbsolute);
	}

	/**
	 * put changelog tab html
	 */
	private function putHtml_changelogTab(){

		$changelog = new UniteCreatorAddonChangelog();
		$types = $changelog->getTypes();

		?>
		<div class="uc-changelogs-wrapper">
			<div class="uc-changelogs-form">
				<div class="uc-changelogs-form-error">
					<div class="uc-changelogs-form-error-title"></div>
					<div class="uc-changelogs-form-error-content"></div>
				</div>
				<div class="uc-changelogs-form-editing">
					<div class="uc-changelogs-form-editing-title">
						<?php esc_html_e("Editing:", "unlimited-elements-for-elementor"); ?>
					</div>
					<div class="uc-changelogs-form-editing-content"></div>
				</div>
				<input type="hidden" name="id" />
				<select name="type">
					<option value="" selected disabled>
						<?php esc_html_e("Select type", "unlimited-elements-for-elementor"); ?>
					</option>
					<?php foreach($types as $value => $label): ?>
						<option value="<?php esc_attr_e($value); ?>"><?php esc_html_e($label); ?></option>
					<?php endforeach; ?>
				</select>
				<textarea name="text" placeholder="<?php esc_attr_e("Enter text", "unlimited-elements-for-elementor"); ?>"></textarea>
				<div class="uc-changelogs-form-actions">
					<button class="uc-changelogs-form-clear unite-button-secondary">
						<?php esc_html_e("Clear", "unlimited-elements-for-elementor"); ?>
					</button>
					<button
						id="uc-changelogs-form-submit"
						class="uc-changelogs-form-submit unite-button-primary"
						data-text-default="<?php esc_attr_e("Save", "unlimited-elements-for-elementor"); ?>"
						data-text-loading="<?php esc_attr_e("Saving...", "unlimited-elements-for-elementor"); ?>"
					>
						<?php esc_html_e("Save", "unlimited-elements-for-elementor"); ?>
					</button>
				</div>
			</div>
			<div class="uc-changelogs-loader">
				<?php esc_html_e("Loading...", "unlimited-elements-for-elementor"); ?>
			</div>
			<div class="uc-changelogs-content"></div>
		</div>
		<?php
	}

	/**
	 * put revisions tab html
	 */
	private function putHtml_revisionsTab(){

		?>
		<div class="uc-revisions-wrapper">
			<div class="uc-revisions-loader">
				<?php esc_html_e("Loading...", "unlimited-elements-for-elementor"); ?>
			</div>
			<div class="uc-revisions-content"></div>
		</div>
		<?php
	}

	/**
	 * put expand link
	 */
	private function putLinkExpand($textareaID = ""){

		?>
			<a class="uc-tabcontent-link-expand" href="javascript:void(0)" data-forid="<?php echo $textareaID?>"><?php esc_html_e("expand", "unlimited-elements-for-elementor");?></a>
		<?php
	}


	/**
	 * put html js left content
	 */
	private function putHTML_jsLeftContent(){

		$this->settingsJSOutput->draw("uc_form_js_options");

	}

	/**
	 * put html tab content
	 */
	private function putHtml_tabTableRow($textareaID, $title, $areaHtml, $paramsPanelID, $addVariableID = null, $isItemsRelated = false, $params = array()){

		$rowClass = "";
		$rowAddHtml = "";

		$paramsPanelClassAdd = " uc-params-panel-main";

		if($isItemsRelated == true){
			$rowClass = "uc-items-related";
			$hasItems = $this->objAddon->isHasItems();

			if($hasItems == false)
				$rowAddHtml = "style='display:none'";

			$paramsPanelClassAdd = "";

		}

		$isExpanded = UniteFunctionsUC::getVal($params, "expanded");
		$isExpanded = UniteFunctionsUC::strToBool($isExpanded);

		$mode = UniteFunctionsUC::getVal($params, "mode");

		$areaAddParams = "";
		if(!empty($mode))
			$areaAddParams = " data-mode='{$mode}'";


		if($isExpanded == true)
			$rowClass .= " uc-row-expanded";

		if(!empty($rowClass)){
			$rowClass = esc_attr($rowClass);
			$rowClass = "class='$rowClass'";
		}

		$styleRight = "";
		if($this->isSVG == true)
			$styleRight = 'style="display:none;"';

		?>
					<tr <?php echo UniteProviderFunctionsUC::escAddParam($rowClass)?> <?php echo UniteProviderFunctionsUC::escAddParam($rowAddHtml)?>>
						<td class="uc-tabcontent-cell-left">

							<div class="uc-editor-title"><?php echo esc_html($title)?></div>
							<textarea id="<?php echo esc_attr($textareaID)?>" class="area_addon <?php echo esc_attr($textareaID)?>" <?php echo UniteProviderFunctionsUC::escAddParam($areaAddParams)?>><?php echo esc_html($areaHtml)?></textarea>
							<?php if($isExpanded == false)
									$this->putLinkExpand($textareaID)?>
							<?php
							switch($textareaID){
								case "area_addon_js":
									$this->putHTML_jsLeftContent();
								break;
							}
							?>
						</td>
						<td class="uc-tabcontent-cell-right" <?php echo UniteProviderFunctionsUC::escAddParam($styleRight)?>>

							<?php if($isItemsRelated == true):?>
								<div class="uc-params-panel-filters">
									<a href="javascript:void(0)" class="uc-filter-active" data-filter="item" onfocus="this.blur()"><?php esc_html_e("Item", "unlimited-elements-for-elementor")?></a>
									<a href="javascript:void(0)" data-filter="main" onfocus="this.blur()"><?php esc_html_e("Main", "unlimited-elements-for-elementor")?></a>
								</div>
							<?php endif?>

							<div id="<?php echo esc_attr($paramsPanelID)?>" class="uc-params-panel<?php echo esc_attr($paramsPanelClassAdd)?>"></div>

							<?php if(!empty($addVariableID)):?>
						    <a id="<?php echo esc_attr($addVariableID)?>" type="button" href="javascript:void(0)" class="unite-button-secondary mleft_20"><?php esc_html_e("Add Variable", "unlimited-elements-for-elementor")?></a>
							<?php endif?>

						</td>
					</tr>

		<?php
	}


	/**
	 * put tab table sap
	 */
	private function putHtml_tabTableSap($isItemsRelated = false){

		$rowClass = "";
		if($isItemsRelated == true)
			$rowClass = "class='uc-items-related'";

		?>
			<tr <?php echo UniteProviderFunctionsUC::escAddParam($rowClass)?>>
				<td colspan="2"><div class="vert_sap10"></div></td>
			</tr>
		<?php
	}


	/**
	 * put overwiew tab html
	 */
	private function putHtml_overviewTab(){

		$title = $this->objAddon->getTitle();
		$name = $this->objAddon->getName();
		$description = $this->objAddon->getDescription();
		$link = $this->objAddon->getOption("link_resource");
		if(!empty($link))
			$link = HelperHtmlUC::getHtmlLink($link, $link, "uc_overview_link","",true);

		$addonIcon = $this->objAddon->getUrlIcon();


		?>
		<div class="uc-tab-overview">
			<div class="uc-section-inline"><?php esc_html_e("Widget Title", "unlimited-elements-for-elementor")?>: <span id="uc_overview_title" class="unite-bold"><?php echo esc_html($title)?></span></div>
			<div class="uc-section-inline"><?php esc_html_e("Widget Name", "unlimited-elements-for-elementor")?>: <span id="uc_overview_name" class="unite-bold"><?php echo esc_html($name)?></span></div>
			<div class="uc-section">
				<div class="uc-section-title"><?php esc_html_e("Widget Description", "unlimited-elements-for-elementor")?>:</div>
				<div id="uc_overview_description" class="uc-section-content uc-desc-wrapper">
					<?php echo esc_html($description)?>
				</div>
				<div class="unite-clear"></div>
			</div>
			<div class="uc-section-inline"><?php esc_html_e("Link to resource", "unlimited-elements-for-elementor")?>: <?php echo esc_html($link)?></div>
			<div class="uc-section">
				<div class="uc-section-title uc-title-icon"><?php esc_html_e("Widget Icon", "unlimited-elements-for-elementor")?>:</div>
				<div id="uc_overview_icon" class="uc-section-content uc-addon-icon-small" style="background-image:url('<?php echo UniteProviderFunctionsUC::escAddParam($addonIcon)?>')"></div>
			</div>

		</div>


		<?php
	}


	/**
	 * put powered by twig html
	 */
	private function putHTMLPoweredByTwig(){
		?>
		 <div class="uc-edit-addon-poweredby">

		 	<?php _e("Powered by Twig Template Engine. ", "unlimited-elements-for-elementor")?>
		 		<a href="<?php echo GlobalsUC::LINK_TWIG?>" target="_blank"><?php _e("show documentation", "unlimited-elements-for-elementor")?></a>.
		 		<?php _e("To show code examples in right panel ")?>

		 		<a  href="javascript:void(0)" class="uc-link-code-examples" ><?php _e("click here", "unlimited-elements-for-elementor")?></a>.

		 </div>
		<?php
	}

	/**
	 * put tabs content
	 */
	private function putHtml_content(){

		$css = $this->objAddon->getCss(true);
		$cssItem = $this->objAddon->getCssItem(true);

		$html = $this->objAddon->getHtml(true);
		$htmlItem = $this->objAddon->getHtmlItem(true);
		$htmlItem2 = $this->objAddon->getHtmlItem2(true);

		$js = $this->objAddon->getJs(true);
		$hasItems = $this->objAddon->isHasItems();

		$params = $this->objAddon->getParams();
		$paramsItems = $this->objAddon->getParamsItems();

		$paramsEditorItems = new UniteCreatorParamsEditor();

		if($hasItems == false)
			$paramsEditorItems->setHiddenAtStart();

		$paramsEditorItems->init("items");


		?>

		<div id="uc_tab_contents" class="uc-tabs-content-wrapper uc-addon-props">

			<!-- General -->

			<div id="uc_tab_general" class="uc-tab-content" style="display:none">

				<?php
				try{

					$this->putHtml_generalSettings();

				}catch(Exception $e){
					HelperHtmlUC::outputException($e);
				}
				?>

			</div>

			<!-- Attributes -->

			<div id="uc_tab_attr" class="uc-tab-content" style="display:none">

				<?php
					$paramsEditorMain = new UniteCreatorParamsEditor();
					$paramsEditorMain->init("main", $this->hasAttributesCats);
					$paramsEditorMain->outputHtmlTable();
				?>

			</div>

			<!-- Item Attributes -->

			<div id="uc_tab_itemattr" class="uc-tab-content uc-tab-itemattr" style="display:none">

				<?php
					$this->settingsItemOutput->draw("uc_form_edit_addon");
					$paramsEditorItems->outputHtmlTable();
				?>

			</div>


			<!-- HTML -->

			<div id="uc_tab_html" class="uc-tab-content" style="display:none">

				<table class="uc-tabcontent-table">

					<?php

						//------------- put html row

						$textareaID = "area_addon_html";
						$rowTitle = $this->textSingle.esc_html__(" HTML","unlimited-elements-for-elementor");

						if($this->isSVG == true)
							$rowTitle = esc_html__("SVG Content","unlimited-elements-for-elementor");

						if(!empty($this->tabHtmlTitle))
							$rowTitle = $this->tabHtmlTitle.esc_html__(" Content","unlimited-elements-for-elementor");


						$areaHtml = $html;
						$paramsPanelID = "uc_params_panel_main";
						$addVariableID = "uc_params_panel_main_addvar";

						$params = array();
						if(!empty($this->htmlEditorMode))
							$params["mode"] = $this->htmlEditorMode;

						$params["expanded"] = true;

						$this->putHtml_tabTableRow($textareaID, $rowTitle, $areaHtml, $paramsPanelID, $addVariableID, false, $params);


						//------------- put html item row

						$this->putHtml_tabTableSap(true);

						$textareaID = "area_addon_html_item";
						$rowTitle = esc_html__("Item HTML","unlimited-elements-for-elementor");
						$areaHtml = $htmlItem;
						$paramsPanelID = "uc_params_panel_item";
						$addVariableID = "uc_params_panel_item_addvar";
						$isItemsRelated = true;

						$this->putHtml_tabTableRow($textareaID, $rowTitle, $areaHtml, $paramsPanelID, $addVariableID, $isItemsRelated);

						$this->putHtml_tabTableSap(true);

						//------------- put html item row 2

						$textareaID = "area_addon_html_item2";
						$rowTitle = esc_html__("Item HTML 2","unlimited-elements-for-elementor");
						$areaHtml = $htmlItem2;
						$paramsPanelID = "uc_params_panel_item2";
						$addVariableID = "uc_params_panel_item_addvar2";
						$isItemsRelated = true;

						$this->putHtml_tabTableRow($textareaID, $rowTitle, $areaHtml, $paramsPanelID, $addVariableID, $isItemsRelated);

					?>

				</table>

				<?php $this->putHTMLPoweredByTwig() ?>
			</div>

			<!-- CSS -->

			<div id="uc_tab_css" class="uc-tab-content" style="display:none">

				<table class="uc-tabcontent-table">

					<?php
						//--------- css addon --------

						$textareaID = "area_addon_css";
						$rowTitle = $this->textSingle.esc_html__(" CSS","unlimited-elements-for-elementor");
						$areaHtml = $css;
						$paramsPanelID = "uc_params_panel_css";

						$this->putHtml_tabTableRow($textareaID, $rowTitle, $areaHtml, $paramsPanelID, null);

						//--------- css item --------

						$textareaID = "area_addon_css_item";
						$rowTitle = esc_html__("Item CSS","unlimited-elements-for-elementor");
						$areaHtml = $cssItem;
						$paramsPanelID = "uc_params_panel_css_item";

						$this->putHtml_tabTableRow($textareaID, $rowTitle, $areaHtml, $paramsPanelID, null, true);

					?>

				</table>

				<?php $this->putHTMLPoweredByTwig() ?>

			</div>

			<!-- JS -->

			<div id="uc_tab_js" class="uc-tab-content" style="display:none">

				<table class="uc-tabcontent-table">
					<?php
					$textareaID = "area_addon_js";
					$rowTitle = $this->textSingle.esc_html__(" Javascript","unlimited-elements-for-elementor");
					$areaHtml = $js;
					$paramsPanelID = "uc_params_panel_js";
					$params = array();
					$params["expanded"] = true;

					$this->putHtml_tabTableRow($textareaID, $rowTitle, $areaHtml, $paramsPanelID, null, false, $params);

					?>

				</table>

				<?php $this->putHTMLPoweredByTwig() ?>

			</div>

			<!-- INCLUDES -->
			<div id="uc_tab_includes" class="uc-tab-content" style="display:none">

				<?php $this->putHtml_Includes()?>

			</div>

			<!-- ASSETS -->
			<div id="uc_tab_assets" class="uc-tab-content" style="display:none">
				<?php $this->putHtml_assetsTab() ?>
			</div>

			<!-- CHANGELOG -->
			<div id="uc_tab_changelog" class="uc-tab-content" style="display:none">
				<?php $this->putHtml_changelogTab() ?>
			</div>

			<!-- REVISIONS -->
			<div id="uc_tab_revisions" class="uc-tab-content" style="display:none">
				<?php $this->putHtml_revisionsTab() ?>
			</div>

		</div>

		<!-- END TABS -->


		<?php
	}


	/**
	 * put action buttons html
	 */
	private function putHtml_actionButtons(){

		$addonID = $this->objAddon->getID();
		$addonType = $this->objAddon->getType();

		$urlTestAddon = HelperUC::getViewUrl_TestAddon($addonID);

		$urlTestAddonNew = HelperUC::getViewUrl("testaddonnew", "id=$addonID");

		$urlPreviewAddon = HelperUC::getViewUrl_TestAddon($addonID,"preview=1");

		$urlAddonDefaults = helperuc::getViewUrl_AddonDefaults($addonID);

		$textPreviewAddon = esc_html__("Preview ","unlimited-elements-for-elementor").$this->textSingle;
		$textTestAddon = esc_html__("Test ","unlimited-elements-for-elementor").$this->textSingle;
		$textTestAddonNew = esc_html__("Test ","unlimited-elements-for-elementor").$this->textSingle . " - New";
		$textBack = esc_html__("Back To ","unlimited-elements-for-elementor").$this->textPlural.esc_html__(" List","unlimited-elements-for-elementor");
		$textDefaults = $this->textSingle.esc_html__(" Defaults","unlimited-elements-for-elementor");

		$textExport = esc_html__("Export ", "unlimited-elements-for-elementor").$this->textSingle;

		$isExistsInCatalog = $this->objAddon->isExistsInCatalog();

		$urlBack = HelperUC::getViewUrl_Addons($addonType);

		if(!empty($this->urlViewBack))
			$urlBack = $this->urlViewBack;


		?>

		<div class="uc-edit-addon-buttons-panel-wrapper">

			<div id="uc_buttons_panel" class="uc-edit-addon-buttons-panel">

				<div class="unite-float-left">

					<div class="uc-button-action-wrapper">
						<a id="button_update_addon" class="button_update_addon unite-button-primary" href="javascript:void(0)"><?php esc_html_e("Update", "unlimited-elements-for-elementor");?></a>

						<div style="padding-top:6px;">

							<span id="uc_loader_update" class="loader_text" style="display:none"><?php esc_html_e("Updating...", "unlimited-elements-for-elementor")?></span>
							<span id="uc_message_addon_updated" class="unite-color-green" style="display:none"></span>

						</div>
					</div>

					<a class="unite-button-secondary" href="<?php echo esc_url($urlBack)?>"><?php echo esc_html($textBack)?></a>

					<?php if($this->showAddonDefaluts == true):?>
					<a href="<?php echo esc_url($urlAddonDefaults)?>" class="unite-button-secondary"><?php echo esc_html($textDefaults) ?></a>
					<?php endif?>

					<?php if($this->showTestAddon == true):?>
					<a href="<?php echo esc_url($urlTestAddon)?>" target="_blank" class="unite-button-secondary " ><?php echo esc_html($textTestAddon)?></a>

					<?php if($this->showTestAddonNew == true):?>
						<a href="<?php echo esc_url($urlTestAddonNew)?>" target="_blank" class="unite-button-primary " style="background-color:green !important;"><?php echo esc_html($textTestAddonNew)?></a>
						&nbsp;&nbsp;
					<?php endif?>

					<a href="<?php echo esc_url($urlPreviewAddon)?>" target="_blank" class="unite-button-secondary " ><?php echo esc_html($textPreviewAddon)?></a>
					<?php endif?>

					<?php if($isExistsInCatalog == true): ?>

						<a id="uc_button_update_catalog" class="button_update_addon unite-button-secondary" href="javascript:void(0)"><?php esc_html_e("Update From Catalog", "unlimited-elements-for-elementor");?></a>
						<span id="uc_loader_update_catalog" class="loader_text" style="display:none"><?php esc_html__("Updating...", "unlimited-elements-for-elementor"); ?></span>
						<span id="uc_message_addon_updated_catalog" class="unite-color-green" style="display:none"></span>

					<?php endif?>

				</div>

				<div class="unite-float-right mright_10">
					<a id="button_export_addon" href="javascript:void(0)" class="unite-button-secondary " ><?php echo esc_html($textExport)?></a>
				</div>


				<div class="unite-clear"></div>

			</div>
		</div>
		<?php
	}

	private function z__________PARAMS_______(){}


	/**
	 * create child param
	 */
	protected function createChildParam($param, $type = null, $addParams = false){

		$arr = array("name"=>$param, "type"=>$type);

		switch($type){
			//case UniteCreatorDialogParam::PARAM_IMAGE:
			//break;
		}

		if(!empty($addParams))
			$arr = array_merge($arr, $addParams);

		return($arr);
	}



	/**
	 * add custom fields
	 * function for override
	 */
	protected function addCustomFieldsParams($arrParams, $postID){

		return($arrParams);
	}



	/**
	 * get post child params
	 */
	public function getChildParams_post($postID = null, $arrAdditions = array()){

		$arrParams = $this->objChildParams->getChildParams_post($postID, $arrAdditions);

		return($arrParams);
	}


	/**
	 * get post child params
	 */
	protected function getChildParams_instagramItem(){

		$arrParams = array();
		$arrParams[] = $this->createChildParam("caption",UniteCreatorDialogParam::PARAM_EDITOR);
		$arrParams[] = $this->createChildParam("thumb");
		$arrParams[] = $this->createChildParam("image");
		$arrParams[] = $this->createChildParam("link");
		$arrParams[] = $this->createChildParam("num_likes");
		$arrParams[] = $this->createChildParam("num_comments");
		$arrParams[] = $this->createChildParam("time_passed");
		$arrParams[] = $this->createChildParam("link");
		$arrParams[] = $this->createChildParam("isvideo");
		$arrParams[] = $this->createChildParam("num_video_views");
		$arrParams[] = $this->createChildParam("video_class");

		return($arrParams);
	}



	/**
	 * add responsive parameters
	 */
	protected function getAddParams_responsive(){

		$arrParams = array();
		$arrParams[] = $this->createChildParam(null);

		$addParams = array("condition"=>"responsive");

		$arrParams[] = $this->createChildParam("tablet", null ,$addParams);
		$arrParams[] = $this->createChildParam("mobile",null, $addParams);

		return($arrParams);

	}

	/**
	 * add simple array
	 */
	protected function getAddParams_array(){

		$strText = "{% for value in [param_prefix] %}\n";
		$strText .= "	{{value}}\n";
		$strText .= "{% endfor %}\n";

		$arrParams = array();
		$arrParams[] = $this->createChildParam(null, null, array("raw_insert_text"=>$strText));

		return($arrParams);
	}


	/**
	 * get post child params
	 */
	protected function getChildParams_instagramMain(){

		$arrParams = array();
		$arrParams[] = $this->createChildParam("name", UniteCreatorDialogParam::PARAM_EDITOR);
		$arrParams[] = $this->createChildParam("username");
		$arrParams[] = $this->createChildParam("biography", UniteCreatorDialogParam::PARAM_EDITOR);
		$arrParams[] = $this->createChildParam("image_profile");
		$arrParams[] = $this->createChildParam("num_followers");
		$arrParams[] = $this->createChildParam("num_following");
		$arrParams[] = $this->createChildParam("num_posts");
		$arrParams[] = $this->createChildParam("url_external");
		$arrParams[] = $this->createChildParam("link");
		$arrParams[] = $this->createChildParam("no_items_code",null,array("child_param_name"=>"hasitems"));

		return($arrParams);
	}

	/**
	 * get dataset param
	 */
	protected function getAddParams_dataset($paramDataset){

		$datasetType = UniteFunctionsUC::getVal($paramDataset, "dataset_type");
		$datasetQuery = UniteFunctionsUC::getVal($paramDataset, "dataset_{$datasetType}_query");

		$arrItemHeaders = array();
		$arrItemHeaders = UniteProviderFunctionsUC::applyFilters(UniteCreatorFilters::FILTER_GET_DATASET_HEADERS, $arrItemHeaders, $datasetType, $datasetQuery);

		$arrChildKeys = array();

		foreach($arrItemHeaders as $key){
			$arrChildKeys[] = $this->createChildParam($key);
		}


		return($arrChildKeys);
	}





	/**
	 * add dynamic fields child keys
	 * function for override
	 */
	protected function addDynamicChildKeys($arrChildKeys){

		return($arrChildKeys);
	}

	/**
	 * get child post options - postID, and if use custom fields
	 */
	private function getChildPostOptions(){

		$paramPostList = $this->objAddon->getParamByType(UniteCreatorDialogParam::PARAM_POSTS_LIST);

		$output = array();
		$output["post_id"] = null;
		$output["use_custom_fields"] = false;
		$output["use_category"] = false;
		$output["add_woo"] = false;

		//return by post list
		if(!empty($paramPostList)){

			$useCategory = UniteFunctionsUC::getVal($paramPostList, "use_category");
			$useCategory = UniteFunctionsUC::strToBool($useCategory);
			$output["use_category"] = $useCategory;

			$postExample = UniteFunctionsUC::getVal($paramPostList, "post_example");
			$useCustomFields = UniteFunctionsUC::getVal($paramPostList, "use_custom_fields");
			$useCustomFields = UniteFunctionsUC::strToBool($useCustomFields);

			if(!empty($postExample)){

				$output = array();
				$output["post_id"] = $postExample;
				$output["use_custom_fields"] = $useCustomFields;
			}

			$forWooProducts = UniteFunctionsUC::getVal($paramPostList, "for_woocommerce_products");
			$forWooProducts = UniteFunctionsUC::strToBool($forWooProducts);

			$output["add_woo"] = $forWooProducts;

		}


		return($output);
	}

	/**
	 * get post additions for showing post params first time
	 * search in param and in post options
	 */
	protected function getParamChildKeys_getPostAdditions($postOptions){

		$enableCustomFields = $postOptions["use_custom_fields"];

		$isAddWoo = UniteFunctionsUC::getVal($postOptions, "add_woo");

		$arrAdditions = array();

		if($isAddWoo == true)
			$arrAdditions[GlobalsProviderUC::POST_ADDITION_WOO] = GlobalsProviderUC::POST_ADDITION_WOO;

		if($enableCustomFields == true)
			$arrAdditions[GlobalsProviderUC::POST_ADDITION_CUSTOMFIELDS] = GlobalsProviderUC::POST_ADDITION_CUSTOMFIELDS;

		$params = $this->objAddon->getParams(UniteCreatorDialogParam::PARAM_POSTS_LIST);


		if(empty($params))
			return($arrAdditions);


		$param = $params[0];
		$enableCustomFields = UniteFunctionsUC::getVal($param, "use_custom_fields");
		$enableCustomFields = UniteFunctionsUC::strToBool($enableCustomFields);

		$enableCategory = UniteFunctionsUC::getVal($param, "use_category");
		$enableCategory = UniteFunctionsUC::strToBool($enableCategory);

		if($enableCustomFields == true)
			$arrAdditions[GlobalsProviderUC::POST_ADDITION_CUSTOMFIELDS] = GlobalsProviderUC::POST_ADDITION_CUSTOMFIELDS;

		if($enableCategory == true)
			$arrAdditions[GlobalsProviderUC::POST_ADDITION_CATEGORY] = GlobalsProviderUC::POST_ADDITION_CATEGORY;

		$arrAdditions = array_values($arrAdditions);

		return($arrAdditions);
	}



	/**
	 * get params child keys
	 */
	protected function getParamChildKeys(){

		$postOptions = $this->getChildPostOptions();

		$postID = $postOptions["post_id"];

		$arrAdditions = $this->getParamChildKeys_getPostAdditions($postOptions);

		$arrPostParams = $this->getChildParams_post($postID, $arrAdditions);

		$arrChildKeys = array();
		$arrChildKeys[UniteCreatorDialogParam::PARAM_POST] = $arrPostParams;
		$arrChildKeys["uc_current_post"] = $arrPostParams;

		$arrChildKeys[UniteCreatorDialogParam::PARAM_INSTAGRAM] = $this->getChildParams_instagramMain();
		$arrChildKeys["uc_instagram_item"] = $this->getChildParams_instagramItem();

		$arrChildKeys = $this->addDynamicChildKeys($arrChildKeys);

		$arrChildKeys["uc_code_examples"] = $this->objChildParams->getChildParams_codeExamples();
		$arrChildKeys["uc_code_examples_js"] = $this->objChildParams->getChildParams_codeExamplesJS();

		$arrChildKeys[UniteCreatorDialogParam::PARAM_IMAGE] = $this->objChildParams->getChildParams_image();


		//add dataset params
		$paramDataset = $this->objAddon->getParamByType(UniteCreatorDialogParam::PARAM_DATASET);
		if(!empty($paramDataset))
			$arrChildKeys[UniteCreatorDialogParam::PARAM_DATASET] = $this->getAddParams_dataset($paramDataset);


		return($arrChildKeys);
	}



	/**
	 * get additional param keys by type
	 */
	protected function getAddParamKeys(){

		$arrAddKeys = array();

		$arrAddKeys[UniteCreatorDialogParam::PARAM_MULTIPLE_SELECT] = $this->getAddParams_array();
		$arrAddKeys[UniteCreatorDialogParam::PARAM_NUMBER] = $this->getAddParams_responsive();

		$arrAddKeys[UniteCreatorDialogParam::PARAM_POST_TERMS] = $this->objChildParams->getAddParams_terms();
		$arrAddKeys[UniteCreatorDialogParam::PARAM_WOO_CATS] = $this->objChildParams->getAddParams_terms(true);

		$arrAddKeys[UniteCreatorDialogParam::PARAM_LISTING] = $this->objChildParams->getAddParams_listing();

		$arrAddKeys[UniteCreatorDialogParam::PARAM_USERS] = $this->objChildParams->getAddParams_users();

		$arrAddKeys[UniteCreatorDialogParam::PARAM_ICON_LIBRARY] = $this->objChildParams->getAddParams_iconLibrary();

		$arrAddKeys[UniteCreatorDialogParam::PARAM_LINK] = $this->objChildParams->getAddParams_link();
		$arrAddKeys[UniteCreatorDialogParam::PARAM_DATETIME] = $this->objChildParams->getAddParams_datetime();

		$arrAddKeys[UniteCreatorDialogParam::PARAM_SLIDER] = $this->objChildParams->getAddParams_slider();
		$arrAddKeys[UniteCreatorDialogParam::PARAM_DROPDOWN] = $this->objChildParams->getAddParams_dropdown();
		$arrAddKeys[UniteCreatorDialogParam::PARAM_RADIOBOOLEAN] = $this->objChildParams->getAddParams_dropdown();

		$arrAddKeys[UniteCreatorDialogParam::PARAM_MENU] = $this->objChildParams->getAddParams_menu();
		$arrAddKeys[UniteCreatorDialogParam::PARAM_TEMPLATE] = $this->objChildParams->getAddParams_template();

		return($arrAddKeys);
	}


	/**
	 * get code replacements for params panel
	 */
	protected function getParamTemplateCodes(){

		$codeNoItems = "{% if [param_name] == false %}\n\n";
		$codeNoItems .= "	No items text\n\n";
		$codeNoItems .= "{% else %}\n\n";
		$codeNoItems .= "	{{put_items()}}\n\n";
		$codeNoItems .= "{% endif %}";

		$arrCode = array();
		$arrCode["no_items_code"] = $codeNoItems;

		return($arrCode);
	}


	private function z____________OTHERS___________(){}


	/**
	 * get thumb sizes - function for override
	 */
	protected function getThumbSizes(){
		return(null);
	}

	/**
	 * get image param add fields
	 */
	protected function getImageAddFields(){

		return(null);
	}

	/**
	 * put config
	 */
	private function putConfig(){

		$options = array();
		$options["url_preview"] = $this->objAddon->getPreviewImageUrl();

		$arrThumbSizes = $this->getThumbSizes();

		$options["thumb_sizes"] = $arrThumbSizes;

		$arrImageAddFields = $this->getImageAddFields();

		$options["image_add_fields"] = $arrImageAddFields;

		$options["items_type"] = $this->objAddon->getItemsType();

		$dataOptions = UniteFunctionsUC::jsonEncodeForHtmlData($options, "options");

		$params = $this->objAddon->getParams();
		$dataParams = UniteFunctionsUC::jsonEncodeForHtmlData($params, "params");


		$paramsItems = $this->objAddon->getParamsItems();
		$dataParamsItems = UniteFunctionsUC::jsonEncodeForHtmlData($paramsItems, "params-items");

		$variablesItems = $this->objAddon->getVariablesItem();
		$variablesMain = $this->objAddon->getVariablesMain();

		$paramsCats = $this->objAddon->getParamsCats();

		$dataVarItems = UniteFunctionsUC::jsonEncodeForHtmlData($variablesItems, "variables-items");
		$dataVarMain = UniteFunctionsUC::jsonEncodeForHtmlData($variablesMain, "variables-main");

		$dataParamsCats = UniteFunctionsUC::jsonEncodeForHtmlData($paramsCats, "params-cats");

		$objOutput = new UniteCreatorOutput();
		$objOutput->setProcessType(UniteCreatorParamsProcessor::PROCESS_TYPE_CONFIG);

		$objOutput->initByAddon($this->objAddon);

		$arrConstantData = $objOutput->getConstantDataKeys(true);

		if($this->showContstantVars == false)
			$arrConstantData = array();

		if(!empty($this->arrCustomConstants))
			$arrConstantData += $this->arrCustomConstants;


		$dataPanelKeys = UniteFunctionsUC::jsonEncodeForHtmlData($arrConstantData, "panel-keys");

		$arrItemConstantData = $objOutput->getItemConstantDataKeys();

		$dataItemPanelKeys = UniteFunctionsUC::jsonEncodeForHtmlData($arrItemConstantData, "panel-item-keys");

		//child keys of some fields
		$arrPanelChildKeys = $this->getParamChildKeys();

		$dataPanelChildKeys = UniteFunctionsUC::jsonEncodeForHtmlData($arrPanelChildKeys, "panel-child-keys");

		$arrPanelAddKeys = $this->getAddParamKeys();

		$dataPanelAddKeys = UniteFunctionsUC::jsonEncodeForHtmlData($arrPanelAddKeys, "panel-add-keys");

		$arrPanelTemplateCode = $this->getParamTemplateCodes();
		$dataPanelCode = UniteFunctionsUC::jsonEncodeForHtmlData($arrPanelTemplateCode, "panel-template-code");

		$dataSkipParams = UniteFunctionsUC::jsonEncodeForHtmlData($this->arrSkipPanelParams, "panel-skip-params");


		?>

		<div id="uc_edit_item_config" style="display:none"
			<?php echo UniteProviderFunctionsUC::escAddParam($dataParams)?>
			<?php echo UniteProviderFunctionsUC::escAddParam($dataParamsItems)?>
			<?php echo UniteProviderFunctionsUC::escAddParam($dataPanelKeys)?>
			<?php echo UniteProviderFunctionsUC::escAddParam($dataPanelAddKeys)?>
			<?php echo UniteProviderFunctionsUC::escAddParam($dataItemPanelKeys)?>
			<?php echo UniteProviderFunctionsUC::escAddParam($dataVarItems)?>
			<?php echo UniteProviderFunctionsUC::escAddParam($dataVarMain)?>
			<?php echo UniteProviderFunctionsUC::escAddParam($dataParamsCats)?>
			<?php echo UniteProviderFunctionsUC::escAddParam($dataOptions)?>
			<?php echo UniteProviderFunctionsUC::escAddParam($dataPanelChildKeys)?>
			<?php echo UniteProviderFunctionsUC::escAddParam($dataPanelCode)?>
			<?php echo UniteProviderFunctionsUC::escAddParam($dataSkipParams)?>
		></div>

		<?php
	}


	/**
	 * put js
	 */
	private function putJs(){
		?>

		<script type="text/javascript">

		jQuery(document).ready(function(){
			var objAdmin = new UniteCreatorAdmin();
			objAdmin.initEditAddonView();
		});

		</script>

		<?php
	}


	/**
	 * bulk dialog
	 */
	private function putBulkDialog(){
		?>
		<div id="uc_dialog_bulk" title="<?php esc_html_e("Bulk Operations", "unlimited-elements-for-elementor")?>" class="unite-inputs" style="display:none">

			bulk operations dialog

		</div>
		<?php
	}


	/**
	 * get contents of bulk dialog from ajax
	 */
	public function getBulkDialogContents($data){

		$addonID = UniteFunctionsUC::getVal($data, "addon_id");
		UniteFunctionsUC::validateNotEmpty($addonID,"addon id");

		$paramType = UniteFunctionsUC::getVal($data, "param_type");

		$paramData = UniteFunctionsUC::getVal($data, "param_data");

		$paramTitle = UniteFunctionsUC::getVal($paramData, "title");
		$paramName = UniteFunctionsUC::getVal($paramData, "name");


		//get data
		$addon = new UniteCreatorAddon();
		$addon->initByID($addonID);
		$addonType = $addon->getType();

		$catID = $addon->getCatID();
		UniteFunctionsUC::validateNotEmpty($catID);

		$addons = new UniteCreatorAddons();
		$arrAddons = $addons->getCatAddons($catID, false, null, $addonType);

		//make html

		ob_start();

		$addonTitle = $addon->getTitle();

		?>
		<br>

		<?php echo esc_html($paramType) ?> <?php _e("attribute","unlimited-elements-for-elementor")?>: <b> <?php echo esc_html($paramTitle)?> ( <?php echo esc_html($paramName)?> ) </b>
		<span class="hor_sap40"></span>
		<?php _e("Widget","unlimited-elements-for-elementor")?>: <b> <?php echo esc_html($addonTitle)?> </b>

		<br><br>

		<div class="unite-dialog-inner-constant">

		<div class="uc-dialog-loader loader_text" style="display:none"><?php esc_html_e("Updating Addons", "unlimited-elements-for-elementor")?>...</div>

		<table class="unite_table_items">

			<tr>
				<th class="">
					<input type='checkbox' title="<?php esc_html_e("Select All Addons", "unlimited-elements-for-elementor")?>" class="uc-check-all">
				</th>
				<th><b><?php esc_html_e("Widget Title", "unlimited-elements-for-elementor")?></b></th>
				<th><b><?php esc_html_e("Status", "unlimited-elements-for-elementor")?></b></th>
			</tr>

		<?php

		$numSelected = 0;

		foreach($arrAddons as $index=>$catAddon){
			$title = $catAddon->getTitle();
			$catAddonID = $catAddon->getID();
			if($catAddonID == $addonID)
				continue;

			$rowClass = $index%2?"unite-row1":"unite-row2";

			$isMain = ($paramType == "main");
			$isExists = $catAddon->isParamExists($paramName, $isMain);

			$status = "<span class='unite-color-red'>".__("not exists","unlimited-elements-for-elementor")."</span>";
			if($isExists)
				$status = "<span class='unite-color-green'>".__("exists","unlimited-elements-for-elementor")."</span>";

			$checked = "";
			if($isExists == false){
				$checked = " checked";
				$numSelected++;
				$rowClass .= " unite-row-selected";
			}

			?>
			<tr class="<?php echo esc_attr($rowClass)?>">
				<td>
					<input type='checkbox' data-id="<?php echo esc_attr($catAddonID)?>" <?php echo UniteProviderFunctionsUC::escAddParam($checked)?> class="uc-check-select">
				</td>
				<td><?php echo esc_html($title)?></td>
				<td><?php echo $status?></td>
			</tr>
			<?php
		}

		?>
		</table>
		</div>

		<br>

		<span class='uc-section-selected'>
			<span id='uc_bulk_dialog_num_selected'><?php echo esc_html($numSelected)?></span> <?php esc_html_e("selected")?>
		</span>

		<span class="hor_sap"></span>

		<a href="javascript:void(0)" data-action="update" class="uc-action-button unite-button-primary"><?php esc_html_e("Add / Update in Widgets", "unlimited-elements-for-elementor")?></a>

		<span class="hor_sap40"></span>

		<a href="javascript:void(0)" data-action="delete" class="uc-action-button unite-button-secondary"><?php esc_html_e("Delete From Widgets", "unlimited-elements-for-elementor")?></a>


		<?php

		$html = ob_get_contents();
		ob_end_clean();


		$response = array();
		$response["html"] = $html;

		return($response);
	}

	/**
	 * get contents of addon changelog from ajax
	 */
	public function getChangelogContents($data){

		$addonID = UniteFunctionsUC::getVal($data, "addon_id");
		UniteFunctionsUC::validateNotEmpty($addonID, "addon id");

		$changelog = new UniteCreatorAddonChangelog();
		$changelogs = $changelog->getAddonChangelogs($addonID);

		ob_start();

		?>
		<?php if(empty($changelogs)): ?>
			<div class="uc-changelogs-empty">
				<?php esc_html_e("No changelogs yet.", "unlimited-elements-for-elementor"); ?>
			</div>
		<?php else: ?>
			<ul class="uc-changelogs">
				<?php foreach($changelogs as $log): ?>
					<li class="uc-changelog" data-id="<?php esc_attr_e($log["id"]); ?>" data-log="<?php esc_attr_e(json_encode($log)); ?>">
						<div class="uc-changelog-content">
							<div class="uc-changelog-text">
								<b><?php esc_html_e($log["type_title"]); ?>:</b>
								<?php echo $log["text_html"]; ?>
							</div>
							<div class="uc-changelog-info" title="<?php echo $log["created_date"]; ?>">
								<?php echo human_time_diff($log["created_time"], current_time("timestamp")); ?>
								<?php esc_html_e("ago", "unlimited-elements-for-elementor"); ?>
								<?php esc_html_e("by", "unlimited-elements-for-elementor"); ?>
								<?php echo $log["user_username"]; ?>
							</div>
						</div>
						<div class="uc-changelog-actions">
							<button
								class="uc-changelog-button uc-changelog-edit unite-button-secondary"
								title="<?php esc_attr_e("Edit", "unlimited-elements-for-elementor"); ?>"
							>
								<i class="fa fa-pen"></i>
							</button>
							<button
								class="uc-changelog-button uc-changelog-delete unite-button-secondary"
								title="<?php esc_attr_e("Delete", "unlimited-elements-for-elementor"); ?>"
							>
								<i class="fa fa-trash"></i>
							</button>
						</div>
					</li>
				<?php endforeach; ?>
			</ul>
		<?php endif; ?>
		<?php

		$html = ob_get_contents();
		ob_end_clean();

		$response = array();
		$response["html"] = $html;

		return ($response);
	}

	/**
	 * get contents of addon revisions from ajax
	 */
	public function getRevisionsContents($data){

		$addonID = UniteFunctionsUC::getVal($data, "addon_id");
		UniteFunctionsUC::validateNotEmpty($addonID, "addon id");

		$addon = new UniteCreatorAddon();
		$addon->initByID($addonID);

		$revisioner = new UniteCreatorAddonRevisioner();
		$revisions = $revisioner->getAddonRevisions($addon);
		$previousRevision = null;

		ob_start();

		?>
		<?php if(empty($revisions)): ?>
			<div class="uc-revisions-empty">
				<?php esc_html_e("No revisions yet.", "unlimited-elements-for-elementor"); ?>
			</div>
		<?php else: ?>
			<ul class="uc-revisions">
				<?php foreach($revisions as $revision): ?>

					<?php if($previousRevision === null && $revision["is_today"] === true): ?>
						<li class="uc-revisions-label">
							<?php esc_html_e("Today", "unlimited-elements-for-elementor"); ?>
						</li>
					<?php elseif($previousRevision === null && $revision["is_today"] === false): ?>
						<li class="uc-revisions-label">
							<?php esc_html_e("Past", "unlimited-elements-for-elementor"); ?>
						</li>
					<?php elseif($previousRevision !== null && $previousRevision["is_today"] !== $revision["is_today"]): ?>
						<li class="uc-revisions-label">
							<?php esc_html_e("Past", "unlimited-elements-for-elementor"); ?>
						</li>
					<?php endif; ?>

					<?php $previousRevision = $revision; ?>

					<li class="uc-revision" data-id="<?php echo $revision["id"]; ?>">
							<span class="uc-revision-name" title="<?php echo $revision["date"]; ?>">
								<?php esc_html_e("Revision:", "unlimited-elements-for-elementor"); ?>
								<?php echo human_time_diff($revision["time"], current_time("timestamp")); ?>
								<?php esc_html_e("ago", "unlimited-elements-for-elementor"); ?>
								<?php esc_html_e("by", "unlimited-elements-for-elementor"); ?>
								<?php echo $revision["username"]; ?>
							</span>
						<button
							class="uc-revision-button uc-revision-restore unite-button-secondary"
							title="<?php esc_attr_e("Restore", "unlimited-elements-for-elementor"); ?>"
						>
							<i class="fa fa-history"></i>
						</button>
						<button
							class="uc-revision-button uc-revision-download unite-button-secondary"
							title="<?php esc_attr_e("Download", "unlimited-elements-for-elementor"); ?>"
						>
							<i class="fa fa-download"></i>
						</button>
					</li>

				<?php endforeach; ?>
			</ul>
		<?php endif; ?>
		<?php

		$html = ob_get_contents();
		ob_end_clean();

		$response = array();
		$response["html"] = $html;

		return ($response);
	}


	/**
	 * put params and variables dialog
	 */
	private function putDialogs(){

		$addonType = $this->objAddon->getType();

		//dialog param
		$objDialogParam = UniteCreatorDialogParam::getInstance($addonType);


		$objDialogParam->init(UniteCreatorDialogParam::TYPE_MAIN, $this->objAddon);
		$objDialogParam->outputHtml();

		//dialog variable item

		$objDialogVariableItem = UniteCreatorDialogParam::getInstance($addonType);
		$objDialogVariableItem->init(UniteCreatorDialogParam::TYPE_ITEM_VARIABLE, $this->objAddon);
		$objDialogVariableItem->outputHtml();

		//dialog variable main
		$objDialogVariableMain = UniteCreatorDialogParam::getInstance($addonType);
		$objDialogVariableMain->init(UniteCreatorDialogParam::TYPE_MAIN_VARIABLE, $this->objAddon);
		$objDialogVariableMain->outputHtml();

		$this->putBulkDialog();
	}


	/**
	 * put some html that will appear before tabs
	 */
	private function putHtml_beforeTabs(){
		?>
				<div id="uc_update_addon_error" class="unite_error_message" style="display:none"></div>
		<?php
	}


	/**
	 * put html
	 */
	private function putHtml(){

		if($this->showHeader == true)
			$this->putHtml_top();
		else
			require HelperUC::getPathTemplate("header_missing");
		?>
		<div class="content_wrapper unite-content-wrapper">
		<?php
		if($this->showToolbar == true)
			$this->putHtml_actionButtons();

		$this->putHtml_beforeTabs();

		$this->putHtml_tabs();
		$this->putHtml_content();

		$this->putConfig();
		$this->putJs();

		$this->putDialogs();

		?>
		</div>
		<?php
	}


}
