<?php
/*!
* Jetpack CRM
* https://jetpackcrm.com
* V3.0
*
* Copyright 2020 Automattic
*
* Date: 20/02/2019
*/
defined( 'ZEROBSCRM_PATH' ) || exit( 0 );
/* ======================================================
Init Func
====================================================== */
function zeroBSCRM_TagManagerMetaboxSetup(){
// lazy page switch
$typeInt = -1;
if (zeroBSCRM_is_customertags_page()) $typeInt = ZBS_TYPE_CONTACT;
if (zeroBSCRM_is_companytags_page()) $typeInt = ZBS_TYPE_COMPANY;
if (zeroBSCRM_is_quotetags_page()) $typeInt = ZBS_TYPE_QUOTE;
if (zeroBSCRM_is_invoicetags_page()) $typeInt = ZBS_TYPE_INVOICE;
if (zeroBSCRM_is_transactiontags_page()) $typeInt = ZBS_TYPE_TRANSACTION;
if (zeroBSCRM_is_formtags_page()) $typeInt = ZBS_TYPE_FORM;
if (zeroBSCRM_is_tasktags_page()) $typeInt = ZBS_TYPE_TASK;
if ($typeInt > 0){
// Tag List
$zeroBS__Metabox_TagList = new zeroBS__Metabox_TagList( __FILE__, $typeInt );
// Add Tags
$zeroBS__Metabox_TagAdd = new zeroBS__Metabox_TagAdd( __FILE__, $typeInt );
}
}
add_action( 'admin_init','zeroBSCRM_TagManagerMetaboxSetup');
/* ======================================================
/ Init Func
====================================================== */
/* ======================================================
Declare Globals
====================================================== */
#} Used throughout
// Don't know who added this, but GLOBALS are out of scope here
//global $zbsCustomerFields,$zbsCustomerQuoteFields,$zbsCustomerInvoiceFields;
/* ======================================================
/ Declare Globals
====================================================== */
// PerfTest: zeroBSCRM_performanceTest_startTimer('custmetabox');
/* ======================================================
Tag List Metabox
====================================================== */
class zeroBS__Metabox_TagList extends zeroBS__Metabox{
/**
* The legacy object name (e.g. 'zerobs_customer')
*
* @var string
*/
private $postType; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.PropertyNotSnakeCase
public function __construct( $plugin_file, $typeInt = ZBS_TYPE_CONTACT ) {
global $zbs;
// set these
$this->typeInt = $typeInt;
$this->postType = $zbs->DAL->typeCPT($typeInt);
$this->metaboxID = 'zerobs-'.$zbs->DAL->objTypeKey($typeInt).'-tags-edit';
$this->metaboxTitle = __($zbs->DAL->typeStr($typeInt).' Tags',"zero-bs-crm");
$this->metaboxScreen = 'zerobs_edit_tags'; // we can use anything here as is now using our func
$this->metaboxArea = 'normal';
$this->metaboxLocation = 'high';
$this->saveOrder = 1;
// headless!
$this->headless = true;
// call this
$this->initMetabox();
}
public function html( $contact, $metabox ) {
global $zbs;
// Get all tags
$tags = $zbs->DAL->getTagsForObjType(array(
'objtypeid'=>$this->typeInt,
'excludeEmpty'=>false,
'withCount'=>true,
'ignoreowner' => true,
// sort
'sortByField' => 'tagcount',
'sortOrder' => 'DESC'
));
// pre-inject some potential js errors :)
?><div id="zbs-error-prep"><?php
echo zeroBSCRM_UI2_messageHTML('info hidden',__('Tag Exists',"zero-bs-crm"),__('Cannot add a tag. A tag already exists with this text',"zero-bs-crm"),'','zbsTagAlreadyExists');
echo zeroBSCRM_UI2_messageHTML('info hidden',__('Tag Text Empty',"zero-bs-crm"),__('You cannot add empty tags',"zero-bs-crm"),'','zbsTagEmpty');
?></div><?php
// long term perhaps we need a list metabox type, for now, hardcoded:
?><table class="ui celled table" id="zbs-tag-manager" style="margin-top:0;">
<thead>
<tr>
<th><?php esc_html_e('Name',"zero-bs-crm"); ?></th>
<th><?php esc_html_e('Slug',"zero-bs-crm"); ?></th>
<?php /* this shows 1 date as DAL2 migration...<th><?php _e('First Used',"zero-bs-crm"); ?></th> */ ?>
<th class="center aligned"><?php esc_html_e('Count',"zero-bs-crm"); ?></th>
<th class="center aligned"><?php esc_html_e('Action','zero-bs-crm'); ?></th>
</tr>
</thead>
<tbody>
<?php
if (count($tags) > 0){
foreach ($tags as $tag){
$link = jpcrm_esc_link('listtagged',-1,$this->postType,-1,$tag['id']);
?>
<tr>
<td><?php if ( isset( $tag['name'] ) ) echo '<a href="' . esc_url( $link ) . '" class="ui large label">' . esc_html( $tag['name'] ) . '</a>'; // phpcs:ignore Generic.ControlStructures.InlineControlStructure.NotAllowed ?></td>
<td><?php if (isset($tag['slug'])) echo esc_html( $tag['slug'] ); ?></td>
<?php /* this shows 1 date as DAL2 migration... <td><?php if (isset($tag['created']) && !empty($tag['created']) && $tag['created'] !== -1) echo zeroBSCRM_locale_utsToDate($tag['created']); ?></td> */ ?>
<td class="center aligned"><?php if (isset($tag['count'])) echo '<a href="' . esc_url( $link ) . '">' . esc_html( zeroBSCRM_prettifyLongInts($tag['count']) ) . '</a>'; ?></td>
<td class="center aligned"><button type="button" class="ui mini button black zbs-delete-tag" data-tagid="<?php echo esc_attr( $tag['id'] ); ?>"><i class="trash alternate icon"></i> <?php esc_html_e( 'Delete', 'zero-bs-crm' ); ?></button></td>
</tr>
<?php
}
}
?>
</tbody>
</table><?php
if (count($tags) == 0) echo zeroBSCRM_UI2_messageHTML('info',__('No Tags Found',"zero-bs-crm"),__('There are no Tags here, create one using the box to the right.',"zero-bs-crm"),'disabled warning sign','zbsNoTagResults');
?><script type="text/javascript">
<?php #} Nonce for AJAX
echo "var zbscrmjs_secToken = '" . esc_js( wp_create_nonce( 'zbscrmjs-ajax-nonce' ) ) . "';"; ?>
var zbsTagListLang = {
'delete': '<?php zeroBSCRM_slashOut(__('Delete',"zero-bs-crm")); ?>',
'deleteswaltitle': '<?php zeroBSCRM_slashOut(__('Are you sure?','zero-bs-crm')); ?>',
'deleteswaltext': '<?php zeroBSCRM_slashOut(__('This will delete the tag and remove it from any tagged '.__($zbs->DAL->typeStr($this->typeInt),'zero-bs-crm').'. This is irreversable.','zero-bs-crm')); ?>',
'deleteswalconfirm': '<?php zeroBSCRM_slashOut(__('Yes, delete the tag!','zero-bs-crm')); ?>',
'tagdeleted':'<?php zeroBSCRM_slashOut(__('Tag Deleted!','zero-bs-crm')); ?>',
'tagremoved':'<?php zeroBSCRM_slashOut(__('Your tag has been removed.','zero-bs-crm')); ?>',
'tagnotdeleted':'<?php zeroBSCRM_slashOut(__('Tag Not Deleted!','zero-bs-crm')); ?>',
'tagnotremoved':'<?php zeroBSCRM_slashOut(__('Your tag was not removed, please try again.','zero-bs-crm')); ?>',
};
</script><?php
}
}
/* ======================================================
/ Tag List Metabox
====================================================== */
/* ======================================================
Create Tags Box
====================================================== */
class zeroBS__Metabox_TagAdd extends zeroBS__Metabox_Tags{
/**
* The legacy object name (e.g. 'zerobs_customer')
*
* @var string
*/
private $postType; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.PropertyNotSnakeCase
public function __construct( $plugin_file, $typeInt = ZBS_TYPE_CONTACT) {
global $zbs;
$this->typeInt = $typeInt; // until db2 ZBS_TYPE_CONTACT;
$this->postType = $zbs->DAL->typeCPT($typeInt);
$this->metaboxID = 'zerobs-'.$zbs->DAL->objTypeKey($typeInt).'-tags';
$this->metaboxTitle = __('Add '.$zbs->DAL->typeStr($typeInt).' Tags',"zero-bs-crm");
$this->metaboxScreen = 'zerobs_edit_tags'; // we can use anything here as is now using our func
$this->metaboxArea = 'side';
$this->metaboxLocation = 'high';
// call this
$this->initMetabox();
}
// html + save dealt with by parent class :)
}
/* ======================================================
/ Create Tags Box
====================================================== */