loadCoreJs();
$assets->loadDataTables(array('buttons', 'responsive'));
$assets->loadAdminEndCss();
$frame = WaicFrame::_();
$path = $this->getModule()->getModPath() . 'assets/';
$frame->addScript('waic-workflow', $path . 'admin.workflow.js');
$frame->addStyle('waic-workflow', $path . 'admin.workflow.css');
$module = $this->getModule();
$workspace = $frame->getModule('workspace');
$workspace->getModel('history')->calcTokens();
//$features = $module->getWorkspaceFeatures();
$lang = array(
'btn-delete' => esc_html__('Delete', 'ai-copilot-content-generator'),
'btn-publish' => esc_html__('Publish', 'ai-copilot-content-generator'),
'btn-unpublish' => esc_html__('Unpublish', 'ai-copilot-content-generator'),
'confirm-delete' => esc_html__('Are you sure you want to delete all these tasks?', 'ai-copilot-content-generator') . '
' . esc_html__('delete generated content', 'ai-copilot-content-generator') . '
',
'confirm-publish' => esc_html__('Are you sure you want to publish all these tasks?', 'ai-copilot-content-generator'),
'confirm-unpublish' => esc_html__('Are you sure you want to unpublish all these tasks?', 'ai-copilot-content-generator'),
'pageNext' => esc_html__('Next', 'ai-copilot-content-generator'),
'pagePrev' => esc_html__('Prev', 'ai-copilot-content-generator'),
'lengthMenu' => esc_html__('per page', 'ai-copilot-content-generator'),
'tableLoading' => esc_html__('Loading...', 'ai-copilot-content-generator'),
'btn-save' => esc_html__('Save', 'ai-copilot-content-generator'),
'btn-cancel' => esc_html__('Cancel', 'ai-copilot-content-generator'),
'btn-copy' => esc_html__('Copy', 'ai-copilot-content-generator'),
'label-status' => esc_html__('Status', 'ai-copilot-content-generator'),
'confirm-template' => esc_html__('Create template', 'ai-copilot-content-generator'),
'template-name' => esc_html__('Template Name', 'ai-copilot-content-generator'),
'template-desc' => esc_html__('Template Description', 'ai-copilot-content-generator'),
'confirm-tmp-delete' => esc_html__('Are you sure you want to delete template?', 'ai-copilot-content-generator'),
);
$curTab = WaicReq::getVar('cur');
$this->assign('lang', $lang);
$this->assign('tabs', $module->getWorkflowTabsList(is_null($curTab) || empty($curTab) ? '' : $curTab));
$this->assign('templates', $module->getModel()->getWorkflowTemplates());
$this->assign('tmp_url', $workspace->getFeatureUrl('template'));
$this->assign('new_url', $workspace->getFeatureUrl('builder'));
$this->assign('ai_url', $workspace->getFeatureUrl('settings'));
//$this->assign('img_path', WAIC_IMG_DIR);
$this->assign('is_pro', $frame->isPro());
$phase1 = class_exists( 'WaicWorkflowPhase1Admin' ) ? WaicWorkflowPhase1Admin::renderPanel() : '';
return $phase1 . parent::getContent('adminWorkflow');
}
public function showWorkflowBuilder( $taskId = 0 ) {
$taskId = (int) $taskId;
$frame = WaicFrame::_();
$path = $this->getModule()->getModPath() . 'assets/';
wp_enqueue_script('wp-i18n');
wp_enqueue_editor();
wp_enqueue_script('media-upload');
$frame->addScript('waic-workflow-editor', $path . 'workflow.editor.js', array('jquery','wp-element','wp-hooks'));
$frame->addStyle('waic-workflow-editor', $path . 'workflow.editor.css');
$task = empty($taskId)
? array(
'params' => array(
'nodes' => array(
array(
'id' => '1',
'type' => 'trigger',
'position' => array('x' => 350, 'y' => 200),
'data' => array(),
),
),
),
'enges' => array(),
'settings' => array(),
)
: WaicFrame::_()->getModule('workspace')->getModel('tasks')->getTask($taskId);
$model = $this->getModule()->getModel();
//$this->assign('triggers', $model->getTriggers());
$jsData = array(
'blocks' => $model->getAllBlocksSettings(),
'global' => $model->getWorkflowSettings(),
'task_id' => $taskId,
'status' => WaicUtils::getArrayValue($task, 'status'),
'title' => WaicUtils::getArrayValue($task, 'title'),
'today' => WaicUtils::getFormatedDateTime(WaicUtils::getTimestamp(), 'Y-m-d'),
'lang' => array(
'title_plh' => __('Enter workflow title', 'ai-copilot-content-generator'),
'title_dialog' => __('Enter a title for this scenario', 'ai-copilot-content-generator'),
'settings_dialog' => __('Workflow settings', 'ai-copilot-content-generator'),
'log_dialog' => __('Workflow log', 'ai-copilot-content-generator'),
'editor_dialog' => __('HTML-editor', 'ai-copilot-content-generator'),
'date_label' => __('Date', 'ai-copilot-content-generator'),
'btn_save' => __('Ok', 'ai-copilot-content-generator'),
'btn_cancel' => __('Cancel', 'ai-copilot-content-generator'),
'btn_run' => __('Run', 'ai-copilot-content-generator'),
'btn_stop' => __('Stop', 'ai-copilot-content-generator'),
'сhoose' => __('Choose', 'ai-copilot-content-generator'),
'search' => __('Search', 'ai-copilot-content-generator'),
'variables' => __('Variables', 'ai-copilot-content-generator'),
'copy' => __('Copy', 'ai-copilot-content-generator'),
'unload_dialog' => __('Are you sure you want to leave without saving?', 'ai-copilot-content-generator'),
'var_dialog' => __('Select Variables', 'ai-copilot-content-generator'),
'var_none' => __('No variables. Perhaps the node is not connected to parent nodes with the required variables.', 'ai-copilot-content-generator'),
'var_plh_user_meta' => __('Enter Meta Key', 'ai-copilot-content-generator'),
'var_plh_post_meta' => __('Enter Meta Key', 'ai-copilot-content-generator'),
'var_plh_prod_meta' => __('Enter Meta Key', 'ai-copilot-content-generator'),
'var_plh_prod_attr' => __('Enter Taxonomy', 'ai-copilot-content-generator'),
'var_plh_webhook_field' => __('Enter Field Key', 'ai-copilot-content-generator'),
'var_tooltip_webhook_field' => __('Enter Webhook Field Key. Separate keys with forward-slash / to build nested data.', 'ai-copilot-content-generator') . '' . __('Example', 'ai-copilot-content-generator') . ':user/idaddress/streetdescription',
'var_plh_webhook_result' => __('Enter Field Key', 'ai-copilot-content-generator'),
'var_tooltip_webhook_result' => __('Enter Webhook Result Field Key. Separate keys with forward-slash / to build nested data.', 'ai-copilot-content-generator') . '' . __('Example', 'ai-copilot-content-generator') . ':codemessagedata/status',
'var_plh_query_param' => __('Enter Query Parameter Key', 'ai-copilot-content-generator'),
'var_plh_run_vars' => __('Enter Run Variable Code', 'ai-copilot-content-generator'),
'var_plh_json_field' => __('Enter JSON Field Key', 'ai-copilot-content-generator'),
),
'flow' => $model->convertTaskParameters(WaicUtils::getArrayValue($task, 'params'), false),
);
WaicFrame::_()->addJSVar('waic-workflow-editor', 'WAIC_WORKFLOW', $jsData);
return parent::getContent('workflowBuilder');
}
public function getLogData( $taskId, $dd ) {
$html = '';
$taskId = (int) $taskId;
if (!WaicUtils::checkDateTime($dd, 'Y-m-d')) {
$dd = false;
}
$modelFlow = $this->getModel();
$stats = $modelFlow->getStatuses();
$logs = $modelFlow->getFlowLog($taskId, $dd);
$runIdPrev = 0;
$statuses = $this->getModel('flowlogs')->getStatuses();
$runPrev = false;
$cnt = 0;
$loop = array();
foreach ($logs as $log) {
$runId = $log['run_id'];
if ($runId != $runIdPrev) {
if (!empty($runPrev)) {
if (!empty($runPrev['run_ended'])) {
$html .= '' . $runPrev['run_ended'] . '
Workflow ' . $stats[$runPrev['run_status']] . '
' . ( empty($runPrev['run_error']) ? '' : ' -
' . $runPrev['run_error'] . '
' ) . '
';
}
$html .= '';
}
$html .= '';
$trigger = $modelFlow->getDefBlock('trigger', $log['tr_code']);
$html .= '
' . $log['added'] . '
[' . $log['tr_id'] . '] v' . $log['version'] . ' Trigger ' . ( $trigger ? $trigger->getName() : '???' ) . ( empty($log['obj_id']) ? '' : ': ObjId = ' . $log['obj_id'] ) . '
';
$html .= '
' . $log['run_started'] . '
Workflow started
';
$runIdPrev = $runId;
$runPrev = $log;
}
$blType = $log['bl_type'];
$block = $modelFlow->getDefBlock(empty($blType) ? 'action' : 'logic', $log['bl_code']);
$existLog = $log['log_id'] > 0;
if ($existLog) {
$r = empty($log['result']) ? array() : WaicUtils::jsonDecode($log['result']);
$status = $log['log_status'];
$result = $statuses[$status];
if (3 == $status) {
if (3 == $blType) {
$cnt = $log['cnt'];
$loop = empty($r['loop']) ? array() : $r['loop'];
$result = ' Found ' . $cnt . ' items' ;
} else if (2 == $blType) {
$result = empty($r['result']) ? 'FALSE' : 'TRUE';
} else {
foreach ($r as $k => $v) {
if (strpos($k, 'waic_', 0) === 0) {
$result .= ' (Result = ' . $v . ')';
break;
}
}
}
} else if (7 == $status) {
$result .= ' -
' . $log['log_error'] . '
';
}
$step = $log['step'];
$loopKey = $step - 1;
$html .= '
' . $log['log_started'] . '
[' . $log['bl_id'] . '] ' . $block->getName() .
( empty($step) ? '' : ' ' . $step . '/' . $cnt . ( empty($loop[$loopKey]) || is_array($loop[$loopKey]) ? '' : ' (Step = ' . $loop[$loopKey] . ')' ) ) .
': ' . $result . '
';
}
}
if (empty($dd) && count($logs) >= 100) {
$html .= '
...
';
} else {
if (!empty($runPrev)) {
if (!empty($runPrev['run_ended'])) {
$html .= '
' . $runPrev['run_ended'] .
'
Workflow ' . $stats[$runPrev['run_status']] . '
' .
( empty($runPrev['run_error']) ? '' : ' -
' . $runPrev['run_error'] . '
' ) . '
';
}
$html .= '
';
}
}
if (empty($html)) {
$html = '' . __('No logs found', 'ai-copilot-content-generator') . '
';
} else {
$html .= '';
}
return $html;
}
}