Skip to content

Commit

Permalink
bot import/export
Browse files Browse the repository at this point in the history
  • Loading branch information
remdex committed Nov 28, 2018
1 parent 746ceba commit 1131693
Show file tree
Hide file tree
Showing 5 changed files with 193 additions and 1 deletion.
21 changes: 21 additions & 0 deletions lhc_web/design/defaulttheme/tpl/lhgenericbot/import.tpl.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<h1><?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('genericbot/import','Import bot');?></h1>

<?php if (isset($errors)) : ?>
<?php include(erLhcoreClassDesign::designtpl('lhkernel/validation_error.tpl.php'));?>
<?php endif; ?>

<?php if (isset($updated)) : $msg = erTranslationClassLhTranslation::getInstance()->getTranslation('genericbot/import','Bot imported'); ?>
<?php include(erLhcoreClassDesign::designtpl('lhkernel/alert_success.tpl.php'));?>
<?php endif; ?>

<form action="" method="post" autocomplete="off" enctype="multipart/form-data">
<?php include(erLhcoreClassDesign::designtpl('lhkernel/csfr_token.tpl.php'));?>

<div class="form-group">
<label><?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('genericbot/import','File')?> (json)</label>
<input type="file" name="botfile" value="" />
</div>

<input type="submit" name="ImportBot" class="btn btn-default" value="<?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('genericbot/import','Import')?>" />

</form>
6 changes: 5 additions & 1 deletion lhc_web/design/defaulttheme/tpl/lhgenericbot/list.tpl.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@
</thead>
<?php foreach ($items as $item) : ?>
<tr>
<td><a title="<?php echo $item->id?>" href="<?php echo erLhcoreClassDesign::baseurl('genericbot/bot')?>/<?php echo $item->id?>"><?php echo htmlspecialchars($item->name)?></a></td>
<td>
<a title="<?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('genericbot/list','Download')?>" href="<?php echo erLhcoreClassDesign::baseurl('genericbot/downloadbot')?>/<?php echo $item->id?>"><i class="material-icons">cloud_download</i></a>
<a title="<?php echo $item->id?>" href="<?php echo erLhcoreClassDesign::baseurl('genericbot/bot')?>/<?php echo $item->id?>"><?php echo htmlspecialchars($item->name)?></a>
</td>
<td><a class="btn btn-default btn-xs" href="<?php echo erLhcoreClassDesign::baseurl('genericbot/edit')?>/<?php echo $item->id?>"><?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('user/userlist','Edit');?></a></td>
<td><a class="btn btn-danger btn-xs csfr-required" onclick="return confirm('<?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('kernel/messages','Are you sure?');?>')" href="<?php echo erLhcoreClassDesign::baseurl('genericbot/delete')?>/<?php echo $item->id?>"><?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('user/userlist','Delete');?></a></td>
</tr>
Expand All @@ -28,3 +31,4 @@
<?php endif; ?>

<a class="btn btn-default" href="<?php echo erLhcoreClassDesign::baseurl('genericbot/new')?>"><?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('genericbot/list','New')?></a>
<a class="btn btn-default" href="<?php echo erLhcoreClassDesign::baseurl('genericbot/import')?>"><?php echo erTranslationClassLhTranslation::getInstance()->getTranslation('genericbot/list','Import')?></a>
54 changes: 54 additions & 0 deletions lhc_web/modules/lhgenericbot/downloadbot.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php

$bot = erLhcoreClassModelGenericBotBot::fetch((int)$Params['user_parameters']['id']);

$exportData = array('bot' => array('name' => $bot->name));

$groups = erLhcoreClassModelGenericBotGroup::getList(array('filter' => array('bot_id' => $bot->id)));

foreach ($groups as $group) {
$groupVars = get_object_vars($group);
unset($groupVars['id']);
unset($groupVars['bot_id']);

$item = array(
'group' => $groupVars,
'triggers' => array()
);

$triggers = erLhcoreClassModelGenericBotTrigger::getList(array('filter' => array('bot_id' => $group->bot_id,'group_id' => $group->id)));
foreach ($triggers as $trigger) {

$triggerVars = get_object_vars($trigger);

unset($triggerVars['group_id']);
unset($triggerVars['bot_id']);

$events = erLhcoreClassModelGenericBotTriggerEvent::getList(array('filter' => array('trigger_id' => $trigger->id, 'bot_id' => $trigger->bot_id)));

$eventsVars = array();
foreach ($events as $event) {
$eventVar = get_object_vars($event);
unset($eventVar['id']);
unset($eventVar['trigger_id']);
unset($eventVar['bot_id']);
$eventsVars[] = $eventVar;
}

$itemTrigger = array(
'trigger' => $triggerVars,
'events' => $eventsVars
);

$item['triggers'][] = $itemTrigger;
}

$exportData['groups'][] = $item;
}

header('Content-Disposition: attachment; filename="lhc-bot-'.$bot->id.'.json"');
header('Content-Type: application/json');
echo json_encode($exportData);

exit;
?>
101 changes: 101 additions & 0 deletions lhc_web/modules/lhgenericbot/import.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
<?php

$tpl = erLhcoreClassTemplate::getInstance( 'lhgenericbot/import.tpl.php' );

if (ezcInputForm::hasPostData()) {

if (!isset($_POST['csfr_token']) || !$currentUser->validateCSFRToken($_POST['csfr_token'])) {
erLhcoreClassModule::redirect('genericbot/import');
exit;
}

if (erLhcoreClassSearchHandler::isFile('botfile',array('json'))) {

$dir = 'var/tmpfiles/';
erLhcoreClassChatEventDispatcher::getInstance()->dispatch('theme.temppath',array('dir' => & $dir));

erLhcoreClassFileUpload::mkdirRecursive( $dir );

$filename = erLhcoreClassSearchHandler::moveUploadedFile('botfile',$dir);
$content = file_get_contents($dir . $filename);
unlink($dir . $filename);
$data = json_decode($content,true);

if ($data !== null) {
$bot = new erLhcoreClassModelGenericBotBot();
$bot->name = $data['bot']['name'] . ' - ' . date('Y-m-d H:i:s');
$bot->saveThis();

$replaceTriggerIds = array();
$triggersArray = array();

foreach ($data['groups'] as $group) {
$groupObj = new erLhcoreClassModelGenericBotGroup();
$groupObj->bot_id = $bot->id;
$groupObj->name = $group['group']['name'];
$groupObj->saveThis();

foreach ($group['triggers'] as $trigger) {

$triggerObj = new erLhcoreClassModelGenericBotTrigger();
$triggerObj->bot_id = $bot->id;
$triggerObj->group_id = $groupObj->id;
$triggerObj->name = $trigger['trigger']['name'];
$triggerObj->default = $trigger['trigger']['default'];
$triggerObj->default_unknown = $trigger['trigger']['default_unknown'];
$triggerObj->actions = $trigger['trigger']['actions'];
$triggerObj->saveThis();

$triggersArray[] = $triggerObj;
$replaceTriggerIds[$trigger['trigger']['id']] = $triggerObj->id;

foreach ($trigger['events'] as $event) {
$eventObj = new erLhcoreClassModelGenericBotTriggerEvent();
$eventObj->trigger_id = $triggerObj->id;
$eventObj->bot_id = $bot->id;
$eventObj->pattern = $event['pattern'];
$eventObj->type = $event['type'];
}
}
}

$replaceArraySearch = array();
$replaceArrayReplace = array();
foreach ($replaceTriggerIds as $oldTriggerId => $newTriggerId){

$replaceArraySearch[] = '"type":"predefined","content":{"text":"","payload":"' . $oldTriggerId . '"';
$replaceArrayReplace[] = '"type":"predefined","content":{"text":"","payload":"' . $newTriggerId . '"';

$replaceArraySearch[] = '"collection_callback_pattern":"' . $oldTriggerId . '"';
$replaceArrayReplace[] = '"collection_callback_pattern":"' . $newTriggerId . '"';

$replaceArraySearch[] = '"collection_callback_alternative":"' . $oldTriggerId . '"';
$replaceArrayReplace[] = '"collection_callback_alternative":"' . $newTriggerId . '"';

$replaceArraySearch[] = '"collection_callback_format":"' . $oldTriggerId . '"';
$replaceArrayReplace[] = '"collection_callback_format":"' . $newTriggerId . '"';

$replaceArraySearch[] = '"collection_callback_cancel":"' . $oldTriggerId . '"';
$replaceArrayReplace[] = '"collection_callback_cancel":"' . $newTriggerId . '"';

$replaceArraySearch[] = '"payload_online":"' . $oldTriggerId . '"';
$replaceArrayReplace[] = '"payload_online":"' . $newTriggerId . '"';

$replaceArraySearch[] = '"stopchat","payload":"' . $oldTriggerId . '"';
$replaceArrayReplace[] = '"stopchat","payload":"' . $newTriggerId . '"';
}

foreach ($triggersArray as $trigger) {
$trigger->actions = str_replace($replaceArraySearch,$replaceArrayReplace,$trigger->actions);
$trigger->saveThis();
}
}

$tpl->set('updated',true);
} else {
$tpl->set('errors',array(erTranslationClassLhTranslation::getInstance()->getTranslation('genericbot/import','Invalid file!')));
}
}

$Result['path'] = array(array('url' => erLhcoreClassDesign::baseurl('genericbot/list'),'title' => erTranslationClassLhTranslation::getInstance()->getTranslation('genericbot/list','Bots')),array('title' => erTranslationClassLhTranslation::getInstance()->getTranslation('theme/index','Import')));
$Result['content'] = $tpl->fetch();
12 changes: 12 additions & 0 deletions lhc_web/modules/lhgenericbot/module.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,18 @@
'functions' => array( 'use' )
);

$ViewList['downloadbot'] = array(
'params' => array('id'),
'uparams' => array(),
'functions' => array( 'use' )
);

$ViewList['import'] = array(
'params' => array(),
'uparams' => array(),
'functions' => array( 'use' )
);

$ViewList['triggersbybot'] = array(
'params' => array('id','trigger_id'),
'uparams' => array('preview','element'),
Expand Down

0 comments on commit 1131693

Please sign in to comment.