<?php
/*!
* Jetpack CRM
* https://jetpackcrm.com
* V2.52+
*
* Copyright 2020 Automattic
*
* Date: 19/03/18
*/
defined( 'ZEROBSCRM_PATH' ) || exit( 0 );
class zeroBSCRM_TagManager{
private $objTypeID = false;
// following all set by objTypeID pass, v3.0+
private $objType = false;
private $singular = false;
private $plural = false;
// v3.0 this was removed private $postType = false; // set in child class 'zerobs_customer' // ONLY USED IN save funcs etc. maybe, potentially just legacy now.
// renamed 'listViewSlug' v3.0+ private $postPage = false;
private $listViewSlug = false;
// except these:
private $langLabels = false;
private $extraBoxes = '';
function __construct($args=array()) {
#} =========== LOAD ARGS ==============
$defaultArgs = array(
'objTypeID' => false, //5 (v3.0+)
'objType' => false, //transaction
'singular' => false, //Transaction
'plural' => false, //Transactions
//'postType' => false, //zerobs_transaction - removed v3.0 +
// renamed 'listViewSlug' v3.0+ 'postPage' => false, //manage-transactions-tags
'listViewSlug' => false,
'langLabels' => array(
),
'extraBoxes' => '' // html for extra boxes e.g. upsells :)
); foreach ($defaultArgs as $argK => $argV){ $$argK = $argV; if (is_array($args) && isset($args[$argK])) { if (is_array($args[$argK])){ $newData = $$argK; if (!is_array($newData)) $newData = array(); foreach ($args[$argK] as $subK => $subV){ $newData[$subK] = $subV; }$$argK = $newData;} else { $$argK = $args[$argK]; } } }
#} =========== / LOAD ARGS =============
global $zbs;
// we load from DAL defaults, if objType passed (overriding anything passed, if empty/false)
if ( ! empty( $objTypeID ) ) { // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
$objTypeID = (int)$objTypeID;
if ($objTypeID > 0){
// obj type (contact)
$objTypeStr = $zbs->DAL->objTypeKey($objTypeID);
if ((!isset($this->objType) || $this->objType == false) && !empty($objTypeStr)) $this->objType = $objTypeStr;
// singular
$objSingular = $zbs->DAL->typeStr($objTypeID);
if ((!isset($this->singular) || $this->singular == false) && !empty($objSingular)) $this->singular = $objSingular;
// plural
$objPlural = $zbs->DAL->typeStr($objTypeID,true);
if ((!isset($this->plural) || $this->plural == false) && !empty($objPlural)) $this->plural = $objPlural;
// listViewSlug
$objSlug = $zbs->DAL->listViewSlugFromObjID($objTypeID);
if ((!isset($this->listViewSlug) || $this->listViewSlug == false) && !empty($objSlug)) $this->listViewSlug = $objSlug;
}
}
// anything to save?
$this->catchPost();
}
public function catchPost(){
// If post, fire do_action
if (isset($_POST['zbs-tag-form-master']) && $_POST['zbs-tag-form-master'] == $this->objType){
// fire it
do_action('zerobs_save_'.$this->objType.'_tags', $this->objID, $this->obj);
}
}
public function drawTagView(){
if (empty($this->objType) || empty($this->listViewSlug) || empty($this->singular) || empty($this->plural)){
return 'Error.';
}
global $zbs;
?><div id="zbs-edit-master-wrap"><form method="post" id="zbs-edit-form" enctype="multipart/form-data"><input type="hidden" name="zbs-edit-form-master" value="<?php echo esc_attr( $this->objType ); ?>" />
<style>
</style>
<?php // left in for later :)
$currentFields = array(); $allFields = array(); ?>
<!-- field editor -->
<div id="zbs-edit-field-editor" class="ui segment secondary">
<?php if (current_user_can('administrator')){ ?>
<h4 class="ui horizontal divider header">
<i class="list layout icon"></i>
<?php echo esc_html( $this->singular ) .' '. esc_html__('Field Manager',"zero-bs-crm"); ?>
</h4>
<div id="zbs-edit-field-wrap" class="ui divided grid">
<div class="ui active inverted dimmer hidden" id="zbs-field-manager-loading" style="display:none">
<div class="ui text loader"><?php esc_html_e('Loading',"zero-bs-crm");?></div>
</div>
<div class="row">
<div class="twelve wide column">
<h4><?php esc_html_e('Current Fields',"zero-bs-crm"); ?></h4>
<div id="zbs-column-manager-current-fields" class="ui segment zbs-column-manager-connected">
<?php if (is_array($currentFields)) foreach ($currentFields as $colKey => $col){
?><div id="zbs-column-manager-field-<?php echo esc_attr( $colKey ); ?>" class="ui basic button zbs-column-manager-field" data-key="<?php echo esc_attr( $colKey ); ?>"><?php esc_html_e($col[0],"zero-bs-crm"); ?></div><?php
} ?>
</div>
</div>
<div class="four wide column">
<h4><?php esc_html_e('Available Fields',"zero-bs-crm"); ?></h4>
<div id="zbs-column-manager-available-fields" class="ui segment zbs-column-manager-connected">
<?php if (is_array($allFields)) foreach ($allFields as $colKey => $col){
if ( ! array_key_exists( $colKey, $currentFields ) ) { // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
?><div id="zbs-column-manager-field-<?php echo esc_attr( $colKey ); ?>" class="ui basic button zbs-column-manager-field" data-key="<?php echo esc_attr( $colKey ); ?>"><?php esc_html_e($col[0],"zero-bs-crm"); ?></div><?php
}
} ?>
</div>
</div>
</div>
</div>
<?php } // / can admin ?>
</div>
<!-- field manager -->
<div id="zbs-edit-warnings-wrap">
<?php #} Pre-loaded msgs, because I wrote the helpers in php first... should move helpers to js and fly these
echo zeroBSCRM_UI2_messageHTML('warning hidden','Error Retrieving '.$this->plural,'There has been a problem retrieving your '.$this->singular.', if this issue persists, please contact support.','disabled warning sign','zbsCantLoadData');
?>
</div>
<!-- main view: list + sidebar -->
<div id="zbs-edit-wrap" class="ui divided grid">
<?php
if (count($zbs->pageMessages) > 0){
#} Updated Msgs
// was doing like this, but need control over styling
// do_action( 'zerobs_updatemsg_contact');
// so for now just using global :)
echo '<div class="row" style="padding-bottom: 0 !important;"><div class="sixteen wide column" id="zbs-edit-notification-wrap">';
foreach ($zbs->pageMessages as $msg){
// for now these can be any html :)
echo $msg;
}
echo '</div></div>';
}
?>
<div class="row">
<!-- record list -->
<div class="twelve wide column" id="zbs-edit-table-wrap">
<?php
#} Main Metaboxes
zeroBSCRM_do_meta_boxes( 'zerobs_edit_tags', 'normal', $this->objType );
?>
</div>
<!-- side bar -->
<div class="four wide column" id="zbs-edit-sidebar-wrap">
<?php
#} Sidebar metaboxes
zeroBSCRM_do_meta_boxes( 'zerobs_edit_tags', 'side', $this->objType );
?>
<?php ##WLREMOVE ?>
<?php echo $this->extraBoxes; ?>
<?php ##/WLREMOVE ?>
</div>
</div>
<!-- could use this for mobile variant?)
<div class="two column mobile only row" style="display:none"></div>
-->
</div> <!-- / mainlistview wrap -->
</form></div>
<script type="text/javascript">
<?php
// make simpler
$tags = $zbs->DAL->getTagsForObjType(array(
'objtypeid'=>$zbs->DAL->objTypeID($this->objType),//ZBS_TYPE_CONTACT in place of 'contact'=>1, 'transaction'=> etc.
'excludeEmpty'=>false,
'withCount'=>false,
'ignoreowner' => true
));
$tagsArr = array(); if (is_array($tags) && count($tags) > 0) foreach ($tags as $t){
$tagsArr[] = $t['name'];
}
$tags = $tagsArr;
?>
// this forces firing of our custom init in admin.tags.metabox.js
var zbsCustomTagInitFunc = 'zbsJS_bindTagManagerInit';
var zbsDontDrawTags = true; // don't draw em in edit box
// and this OVERRIDES the tag metabox list:
var zbsCRMJS_currentTags = <?php echo json_encode($tags); ?>;
jQuery(function($){
console.log("======= TAG MANAGER VIEW UI =========");
});
// General options for listview
var zbsEditSettings = {
<?php /*objid: <?php echo $this->objID; ?>,*/ ?>
objdbname: '<?php echo esc_html( $this->objType ); ?>'
};
var zbsDrawEditViewBlocker = false;
var zbsDrawEditAJAXBlocker = false;
var zbsObjectViewLinkPrefixCustomer = '<?php echo jpcrm_esc_link( 'view', -1, 'zerobs_customer', true ); ?>';
var zbsObjectEditLinkPrefixCustomer = '<?php echo jpcrm_esc_link( 'edit', -1, 'zerobs_customer', true ); ?>';
var zbsObjectViewLinkPrefixCompany = '<?php echo jpcrm_esc_link( 'view', -1, 'zerobs_company', true ); ?>';
var zbsListViewLink = '<?php echo jpcrm_esc_link( $this->listViewSlug ); ?>';
var zbsClick2CallType = parseInt('<?php echo esc_html( zeroBSCRM_getSetting('clicktocalltype') ); ?>');
var zbsEditViewLangLabels = {
'today': '<?php echo esc_html( zeroBSCRM_slashOut(__('Today',"zero-bs-crm")) ); ?>',
<?php $labelCount = 0;
if (is_array($this->langLabels) && count($this->langLabels) > 0) foreach ($this->langLabels as $labelK => $labelV){
if ($labelCount > 0) echo ',';
echo esc_html( $labelK ).":'".esc_html( zeroBSCRM_slashOut($labelV) )."'";
$labelCount++;
} ?>
};
<?php #} Nonce for AJAX
echo "var zbscrmjs_secToken = '" . esc_js( wp_create_nonce( 'zbscrmjs-ajax-nonce' ) ) . "';"; ?></script><?php
} // /draw func
} // class