- [misc] remove the useless file.
This commit is contained in:
@@ -1,55 +0,0 @@
|
||||
<?php include '../../common/view/header.html.php'; ?>
|
||||
<template id="custom-item">
|
||||
<div class="category-item">
|
||||
<div class="category-input"><input type="text" name="custom[]" value="" class="form-control"></div>
|
||||
<div class="category-actions">
|
||||
<button type="button" class="btn btn-link btn-icon btn-add" onclick="addItem(event)"><i class="icon icon-plus"></i></button>
|
||||
<button type="button" class="btn btn-link btn-icon btn-delete" onclick="deleteItem(event)"><i class="icon icon-close"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<div id="mainMenu">
|
||||
<div class="btn-toolbar" style="padding-bottom: 2px;">
|
||||
<a href="<?= $this->createLink('ai', 'miniPrograms'); ?>" class="btn btn-secondary">
|
||||
<i class="icon icon-back icon-sm"></i> <?php echo $lang->goback; ?>
|
||||
</a>
|
||||
<div class="divider"></div>
|
||||
<div class="page-title">
|
||||
<span class='text'><?= $lang->ai->miniPrograms->maintenanceGroup; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent" class="main-row">
|
||||
<div class="main-col">
|
||||
<form class="main-form form-ajax" method='post'>
|
||||
<div class='panel'>
|
||||
<div class='panel-body'>
|
||||
<div class="category-container" style="width: 600px;">
|
||||
<?php foreach ($lang->ai->miniPrograms->categoryList as $key => $value) : ?>
|
||||
<div class="category-item">
|
||||
<div class="category-input"><input disabled type="text" name="<?= $key; ?>" value="<?= $value; ?>" class="form-control"></div>
|
||||
<div class="category-actions">
|
||||
<button type="button" class="btn btn-link btn-icon btn-add" onclick="addItem(event)"><i class="icon icon-plus"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php foreach ($categoryList as $key => $value) : ?>
|
||||
<div class="category-item">
|
||||
<div class="category-input"><input type="text" name="<?= $key; ?>" value="<?= $value; ?>" class="form-control"></div>
|
||||
<div class="category-actions">
|
||||
<button type="button" class="btn btn-link btn-icon btn-add" onclick="addItem(event)"><i class="icon icon-plus"></i></button>
|
||||
<button type="button" class="btn btn-link btn-icon btn-delete" onclick="deleteItem(event)" <?= in_array($key, $usedCustomCategories) ? 'disabled' : ''; ?>><i class="icon icon-close"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<div class="form-actions">
|
||||
<button type="submit" class="btn btn-wide btn-primary"><?= $lang->save; ?></button>
|
||||
<a type="button" class="btn btn-wide" href="<?= $this->createLink('ai', 'miniPrograms'); ?>"><?= $lang->goback; ?></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php'; ?>
|
||||
@@ -1,248 +0,0 @@
|
||||
<?php
|
||||
include '../../common/view/header.html.php';
|
||||
$finalList = array_merge($categoryList, $lang->ai->miniPrograms->allCategories);
|
||||
$isNotOpen = $config->edition != 'open';
|
||||
?>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div id="sidebarHeader">
|
||||
<div class="title" title="<?= $finalList[$category]; ?>">
|
||||
<?= $finalList[$category]; ?>
|
||||
<?php if($category) echo html::a($this->createLink('ai', 'miniPrograms'), "<i class='icon icon-sm icon-close'></i>", '', "class='text-muted'"); ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php
|
||||
foreach($this->lang->ai->miniPrograms->statuses as $statusKey => $statusName)
|
||||
{
|
||||
echo html::a($this->createLink('ai', 'miniPrograms', "category=$category&status=$statusKey"), "<span class='text'>{$this->lang->ai->miniPrograms->statuses[$statusKey]}" . ($status == $statusKey ? '<span class="label label-light label-badge" style="margin-left: 4px;">' . $pager->recTotal . '</span>' : '') . "</span>", '', "id='status-$statusKey' class='btn btn-link" . ($status == $statusKey ? ' btn-active-text' : '') . "'");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<?php if(common::hasPriv('ai', 'importMiniProgram')): ?>
|
||||
<a style="display: flex; align-items: center; gap: 2px;" class="btn btn-link" data-toggle="tooltip" data-placement="left" title="<?= $lang->ai->toZentaoStoreAIPage; ?>" href="https://www.zentao.net/extension-browse-1625.html" target="_blank">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1.75962 11.375V9.49025C1.75787 9.47362 1.75087 9.45963 1.75087 9.44213L1.75 7.45412C1.75 7.20125 1.94687 7 2.1875 7C2.429 6.99825 2.6075 7.30275 2.6075 7.55212V9.541C2.6075 9.57163 2.61363 9.49988 2.6075 9.52875V10.5079H10.5V8.463C10.5009 8.46475 10.4991 8.46387 10.5 8.46475V7.45412C10.5 7.20125 10.7004 7 10.941 7C11.1825 6.99825 11.375 7.203 11.375 7.45325V9.44213C11.375 9.44825 11.3759 9.4535 11.375 9.45963V11.375H1.75962ZM3.6155 4.592C3.6155 5.43813 4.27175 6.125 5.08113 6.125C5.88875 6.125 6.545 5.43813 6.545 4.592C6.545 5.43813 7.20125 6.125 8.00975 6.125C8.81913 6.125 9.47538 5.43813 9.47538 4.592C9.47538 5.43813 9.97588 6.125 10.7844 6.125C11.5938 6.125 12.25 5.43813 12.25 4.592L10.7844 0.875H2.33975L0.875 4.592C0.875 5.43813 1.34225 6.125 2.15075 6.125C2.95925 6.125 3.6155 5.43813 3.6155 4.592ZM12.25 12.6875C12.25 12.446 12.054 12.25 11.8125 12.25H1.3125C1.071 12.25 0.875 12.446 0.875 12.6875C0.875 12.929 1.071 13.125 1.3125 13.125H11.8125C12.054 13.125 12.25 12.929 12.25 12.6875Z" fill="#838A9D"/>
|
||||
</svg>
|
||||
<?= $lang->ai->store; ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?php if(common::hasPriv('aiapp', 'square')): ?>
|
||||
<a class="btn btn-secondary" href="<?= $this->createLink('aiapp', 'square'); ?>">
|
||||
<?= $lang->ai->exitManage; ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?php if(common::hasPriv('ai', 'importMiniProgram')): ?>
|
||||
<a class="btn btn-primary" data-toggle="modal" data-target="#import-miniprogram">
|
||||
<i class="icon icon-import"></i>
|
||||
<?= $lang->ai->import; ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?php if($isNotOpen && common::hasPriv('ai', 'createMiniProgram')): ?>
|
||||
<?= html::a($this->createLink('ai', 'createMiniProgram'), "<i class='icon icon-plus'></i> " . $lang->ai->miniPrograms->create, '', "class='btn btn-primary'"); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="disable-miniprogram">
|
||||
<div class="modal-dialog" style="width: 480px;">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header" style="border-bottom: none; padding-left: 12px; display: flex; align-items: center;">
|
||||
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="12.0159" cy="12.0163" r="12" transform="rotate(0.0777774 12.0159 12.0163)" fill="#FFA34D" />
|
||||
<path d="M12.4516 14.621C12.8867 14.6215 13.3224 14.1498 13.3231 13.6775L13.6588 7.42006C13.6595 6.94777 13.661 6.00319 12.3559 6.0016C11.1595 6.00013 11.0495 6.8265 11.0486 7.41686L11.3655 13.6751C11.5823 14.1476 12.0166 14.6204 12.4516 14.621ZM12.4499 15.8017C11.7973 15.8009 11.1439 16.3905 11.1426 17.217C11.1416 17.9254 11.6843 18.6345 12.4456 18.6354C13.2069 18.6363 13.7516 18.0467 13.7528 17.2202C13.7541 16.3936 13.1024 15.8025 12.4499 15.8017Z" fill="white" />
|
||||
</svg>
|
||||
<span style="padding-left: 16px;"><?= $lang->ai->miniPrograms->disableTip; ?></span>
|
||||
</div>
|
||||
<div class="modal-footer" style="display: flex; justify-content: center; border-top: none; padding-top: 0;">
|
||||
<button type="button" class="btn btn-primary" onclick="unpublishMiniProgram()" data-dismiss="modal"><?= $lang->confirm; ?></button>
|
||||
<button type="button" class="btn" data-dismiss="modal"><?= $lang->cancel; ?></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="delete-miniprogram">
|
||||
<div class="modal-dialog" style="width: 480px;">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header" style="border-bottom: none; padding-left: 12px; display: flex; align-items: center;">
|
||||
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="12.0159" cy="12.0163" r="12" transform="rotate(0.0777774 12.0159 12.0163)" fill="#FFA34D" />
|
||||
<path d="M12.4516 14.621C12.8867 14.6215 13.3224 14.1498 13.3231 13.6775L13.6588 7.42006C13.6595 6.94777 13.661 6.00319 12.3559 6.0016C11.1595 6.00013 11.0495 6.8265 11.0486 7.41686L11.3655 13.6751C11.5823 14.1476 12.0166 14.6204 12.4516 14.621ZM12.4499 15.8017C11.7973 15.8009 11.1439 16.3905 11.1426 17.217C11.1416 17.9254 11.6843 18.6345 12.4456 18.6354C13.2069 18.6363 13.7516 18.0467 13.7528 17.2202C13.7541 16.3936 13.1024 15.8025 12.4499 15.8017Z" fill="white" />
|
||||
</svg>
|
||||
<span style="padding-left: 16px;"><?= $lang->ai->miniPrograms->deleteTip; ?></span>
|
||||
</div>
|
||||
<div class="modal-footer" style="display: flex; justify-content: center; border-top: none; padding-top: 0;">
|
||||
<button type="button" class="btn btn-primary" onclick="deleteMiniProgram('1')" data-dismiss="modal"><?= $lang->confirm; ?></button>
|
||||
<button type="button" class="btn" data-dismiss="modal"><?= $lang->cancel; ?></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="publish-miniprogram">
|
||||
<div class="modal-dialog" style="width: 480px;">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header" style="border-bottom: none; padding-left: 12px; display: flex; align-items: center;">
|
||||
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="12.0159" cy="12.0163" r="12" transform="rotate(0.0777774 12.0159 12.0163)" fill="#FFA34D" />
|
||||
<path d="M12.4516 14.621C12.8867 14.6215 13.3224 14.1498 13.3231 13.6775L13.6588 7.42006C13.6595 6.94777 13.661 6.00319 12.3559 6.0016C11.1595 6.00013 11.0495 6.8265 11.0486 7.41686L11.3655 13.6751C11.5823 14.1476 12.0166 14.6204 12.4516 14.621ZM12.4499 15.8017C11.7973 15.8009 11.1439 16.3905 11.1426 17.217C11.1416 17.9254 11.6843 18.6345 12.4456 18.6354C13.2069 18.6363 13.7516 18.0467 13.7528 17.2202C13.7541 16.3936 13.1024 15.8025 12.4499 15.8017Z" fill="white" />
|
||||
</svg>
|
||||
<span style="padding-left: 16px;"><?= $lang->ai->miniPrograms->publishTip; ?></span>
|
||||
</div>
|
||||
<div class="modal-footer" style="display: flex; justify-content: center; border-top: none; padding-top: 0;">
|
||||
<button type="button" class="btn btn-primary" onclick="publishMiniProgram()" data-dismiss="modal"><?= $lang->confirm; ?></button>
|
||||
<button type="button" class="btn" data-dismiss="modal"><?= $lang->cancel; ?></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="import-miniprogram">
|
||||
<div class="modal-dialog" style="width: 600px;">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<strong style="font-size: 20px; color: #0B0F18;"><?= $lang->ai->import; ?></strong>
|
||||
<a data-dismiss="modal" class="close-import-dialog">
|
||||
<i class="icon-close"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form class="form-ajax" method="post" action="<?= $this->createLink('ai', 'importMiniProgram'); ?>" id="import-miniprogram-form">
|
||||
<table class="table table-form">
|
||||
<tr>
|
||||
<th><?= $lang->ai->installPackage; ?></th>
|
||||
<td>
|
||||
<?= html::file('file', "accept='.zip' class='form-control'"); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?= $lang->ai->miniPrograms->category; ?></th>
|
||||
<td>
|
||||
<?= html::select('category', array_merge($lang->ai->miniPrograms->categoryList, $categoryList), $category, "class='form-control chosen'"); ?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?= $lang->ai->toPublish; ?></th>
|
||||
<td>
|
||||
<div class="radio" style="display: flex; align-items: center; gap: 4px;">
|
||||
<label>
|
||||
<input type="radio" name="published" value="1"><?= $lang->ai->miniPrograms->field->requiredOptions[1]; ?>
|
||||
</label>
|
||||
<label>
|
||||
<input type="radio" name="published" value="0" checked><?= $lang->ai->miniPrograms->field->requiredOptions[0]; ?>
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div style="display: flex; justify-content: center; border-top: none; padding-top: 10px;">
|
||||
<button type="submit" class="btn btn-primary btn-wide"><?= $lang->save; ?></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent" class="main-row fade">
|
||||
<div class="side-col" id="sidebar">
|
||||
<div class="cell">
|
||||
<ul id="modules" class="tree" data-ride="tree" data-name="tree-modules">
|
||||
<?php foreach($categoryList as $key => $value): ?>
|
||||
<li <?php if($category == $key) echo 'class="active"'; ?>>
|
||||
<a href="<?= $this->createLink('ai', 'miniPrograms', "category=$key"); ?>"><?= $value; ?></a>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
<?php if(common::hasPriv('ai', 'editMiniProgramCategory')): ?>
|
||||
<div class="text-center">
|
||||
<a class="btn btn-info btn-wide" href="<?= $this->createLink('ai', 'editMiniProgramCategory'); ?>"><?= $lang->ai->maintenanceGroup; ?></a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main-col">
|
||||
<?php if(empty($miniPrograms)): ?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->ai->miniPrograms->emptyList;?></span>
|
||||
<?php if($isNotOpen && common::hasPriv('ai', 'createMiniProgram')) echo html::a($this->createLink('ai', 'createMiniProgram'), "<i class='icon icon-plus'></i> " . $lang->ai->miniPrograms->create, '', "class='btn btn-info'");?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<div class="main-table">
|
||||
<table class="main-table table has-sort-head table-fixed">
|
||||
<thead>
|
||||
<tr>
|
||||
<?php $vars = "category=$category&status=$status&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}"; ?>
|
||||
<th class="c-id" style="width: 70px;"><?php common::printOrderLink('id', $orderBy, $vars, 'ID'); ?></th>
|
||||
<th class="c-name" style="width: 30%;"><?= $lang->prompt->name; ?></th>
|
||||
<th class="c-status"><?= $lang->prompt->status; ?></th>
|
||||
<th class="c-category"><?= $lang->prompt->module; ?></th>
|
||||
<th class="c-createdby"><?= $lang->prompt->createdBy; ?></th>
|
||||
<th class="c-createddate w-130px"><?php common::printOrderLink('createdDate', $orderBy, $vars, $lang->prompt->createdDate); ?></th>
|
||||
<th class="c-publisheddate w-130px"><?php common::printOrderLink('publishedDate', $orderBy, $vars, $lang->ai->miniPrograms->latestPublishedDate); ?></th>
|
||||
<th class="c-actions" style="width: 160px;"><?= $lang->actions; ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($miniPrograms as $miniProgram) : ?>
|
||||
<tr>
|
||||
<td class="c-id"><?= $miniProgram->id; ?></td>
|
||||
<?php $link = $isNotOpen && common::hasPriv('ai', 'miniProgramView') ? $this->createLink('ai', 'miniProgramView', "id={$miniProgram->id}") : null; ?>
|
||||
<td class="c-name" title="<?= $miniProgram->name; ?>"><?= is_null($link) ? $miniProgram->name : "<a href='$link'>{$miniProgram->name}</a>" ?></td>
|
||||
<td class="c-status"><?= $miniProgram->publishedLabel; ?></td>
|
||||
<td class="c-category"><?= $miniProgram->categoryLabel; ?></td>
|
||||
<td class="c-createdby"><?= $miniProgram->createdByLabel; ?></td>
|
||||
<td class="c-createddate"><?= $miniProgram->createdDate; ?></td>
|
||||
<td class="c-publisheddate"><?= $miniProgram->published === '1' ? $miniProgram->publishedDate : ''; ?></td>
|
||||
<td class="c-actions">
|
||||
<?php
|
||||
$isPublished = $miniProgram->published === '1';
|
||||
$isBuiltIn = $miniProgram->builtIn === '1';
|
||||
?>
|
||||
<?php
|
||||
if($isNotOpen && common::hasPriv('ai', 'editMiniProgram'))
|
||||
{
|
||||
echo $isPublished || $isBuiltIn
|
||||
? "<button class='btn' disabled title='{$lang->ai->prompts->action->edit}'><i class='icon icon-edit text-primary'></i></button>"
|
||||
: "<a class='btn' title='{$lang->ai->prompts->action->edit}' href='{$this->createLink('ai', 'editMiniProgram', "appID=$miniProgram->id")}'><i class='icon icon-edit text-primary'></i></a>";
|
||||
}
|
||||
?>
|
||||
<?php if($isNotOpen && common::hasPriv('ai', 'testMiniProgram')): ?>
|
||||
<button
|
||||
class="btn iframe"
|
||||
data-toggle="modal"
|
||||
data-width="800"
|
||||
data-height="450"<?= $isPublished || $isBuiltIn ? ' disabled' : ''; ?>
|
||||
title="<?= $lang->ai->prompts->action->test; ?>"
|
||||
data-iframe="<?= $this->createLink('ai', 'testMiniProgram', "appID={$miniProgram->id}&onlybody=yes"); ?>"
|
||||
>
|
||||
<i class="icon icon-menu-backend text-primary"></i>
|
||||
</button>
|
||||
<?php endif; ?>
|
||||
<?php if(common::hasPriv('ai', 'publishMiniProgram')): ?>
|
||||
<button class="btn" onclick="openPublishDialog(event)" title="<?= $lang->ai->prompts->action->publish; ?>"<?= $miniProgram->canPublish ? '' : ' disabled'; ?>>
|
||||
<i class="icon icon-publish text-primary"></i>
|
||||
</button>
|
||||
<?php endif; ?>
|
||||
<?php if(common::hasPriv('ai', 'unpublishMiniProgram')): ?>
|
||||
<button class="btn" onclick="openDisableDialog(event)" title="<?= $lang->ai->prompts->action->unpublish; ?>"<?= $isPublished ? '' : ' disabled'; ?>>
|
||||
<i class="icon icon-ban-circle text-primary"></i>
|
||||
</button>
|
||||
<?php endif; ?>
|
||||
<?php if($isNotOpen && common::hasPriv('ai', 'exportMiniProgram')): ?>
|
||||
<button class="btn" onclick="exportMiniProgram(event)" title="<?= $lang->ai->export; ?>"<?= $isPublished && !$isBuiltIn ? '' : ' disabled'; ?>>
|
||||
<i class="icon icon-export text-primary"></i>
|
||||
</button>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class='table-footer'>
|
||||
<div class="table-statistic"><?= sprintf($lang->ai->miniPrograms->summary, count($miniPrograms)); ?></div>
|
||||
<?php $pager->show('right', 'pagerjs'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php'; ?>
|
||||
@@ -1,217 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The ai prompts view file of ai module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
|
||||
* @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Wenrui LI <liwenrui@easycorp.ltd>
|
||||
* @package ai
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php
|
||||
/**
|
||||
* Prompt action menu printer, based on prompt status and completion state.
|
||||
*
|
||||
* @param object $prompt prompt object
|
||||
* @return void
|
||||
*/
|
||||
$printPromptActionMenu = function($prompt) use($lang)
|
||||
{
|
||||
$html = '';
|
||||
$executable = $this->ai->isExecutable($prompt);
|
||||
$published = $prompt->status == 'active';
|
||||
|
||||
if($this->config->edition != 'open')
|
||||
{
|
||||
/* Design button. */
|
||||
if(common::hasPriv('ai', 'promptassignrole')) $html .= html::a(helper::createLink('ai', 'promptassignrole', "prompt=$prompt->id"), '<i class="icon-design text-primary"></i>', '', "class='btn" . ($published ? ' disabled' : '') . "' title='{$lang->ai->prompts->action->design}'");
|
||||
|
||||
/* Test / audit button. */
|
||||
if(common::hasPriv('ai', 'promptaudit')) $html .= html::a($executable ? $this->ai->getTestingLocation($prompt) : '#', '<i class="icon-menu-backend text-primary"></i>', '', "id='prompt-audit-button-$prompt->id' class='prompt-audit-btn btn" . ($executable && !$published ? '' : ' disabled') . "' title='{$lang->ai->prompts->action->test}'" . ($executable ? '' : " data-toggle='modal' data-target='#designConfirmModal'"));
|
||||
|
||||
/* Edit button. */
|
||||
if(common::hasPriv('ai', 'promptedit')) $html .= html::a(helper::createLink('ai', 'promptedit', "prompt=$prompt->id"), '<i class="icon-edit text-primary"></i>', '', "class='btn' title='{$lang->ai->prompts->action->edit}'");
|
||||
|
||||
/* Divider. */
|
||||
if(common::hasPriv('ai', 'promptpublish') || common::hasPriv('ai', 'promptunpublish')) $html .= '<div class="dividing-line"></div>';
|
||||
}
|
||||
/* Publish button. */
|
||||
if(common::hasPriv('ai', 'promptpublish')) $html .= html::a(!$published && $executable ? "javascript:togglePromptStatus($prompt->id)" : '#', '<i class="icon-publish text-primary"></i>', '', "class='btn" . (!$published && $executable ? '' : ' disabled') . "' title='{$lang->ai->prompts->action->publish}'" . ($executable ? '' : " data-toggle='modal' data-target='#designConfirmModal'"));
|
||||
|
||||
/* Unpublish button. */
|
||||
if(common::hasPriv('ai', 'promptunpublish')) $html .= html::a('#', '<i class="icon-ban text-primary"></i>', '', "class='btn" . (!$published || !$executable ? ' disabled' : '') . "' title='{$lang->ai->prompts->action->unpublish}'" . (!$published ? '' : " data-toggle='modal' data-target='#draftConfirmModal'"));
|
||||
|
||||
echo $html;
|
||||
}
|
||||
?>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div id="sidebarHeader">
|
||||
<div class="title" title="<?php echo $this->lang->ai->prompts->modules[$module];?>">
|
||||
<?php echo $this->lang->ai->prompts->modules[$module];?>
|
||||
<?php if($module) echo html::a($this->createLink('ai', 'prompts'), "<i class='icon icon-sm icon-close'></i>", '', "class='text-muted'");?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php
|
||||
foreach($this->lang->ai->prompts->statuses as $statusKey => $statusName)
|
||||
{
|
||||
echo html::a($this->createLink('ai', 'prompts', "module=$module&status=$statusKey"), "<span class='text'>{$this->lang->ai->prompts->statuses[$statusKey]}" . ($status == $statusKey ? '<span class="label label-light label-badge" style="margin-left: 4px;">' . $pager->recTotal . '</span>' : '') . "</span>", '' ,"id='status-$statusKey' class='btn btn-link" . ($status == $statusKey ? ' btn-active-text' : '') . "'");
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<?php if($this->config->edition != 'open' && common::hasPriv('ai', 'createprompt')) echo html::a($this->createLink('ai', 'createprompt'), "<i class='icon icon-plus'></i> " . $lang->ai->prompts->create, '', "class='btn btn-primary iframe'");?>
|
||||
</div>
|
||||
</div>
|
||||
<div id="mainContent" class="main-row fade">
|
||||
<div class="side-col" id="sidebar">
|
||||
<div class="cell">
|
||||
<ul id="modules" class="tree" data-ride="tree" data-name="tree-modules">
|
||||
<?php
|
||||
$moduleList = $this->config->edition != 'open'
|
||||
? $this->lang->ai->prompts->modules
|
||||
: array_filter($this->lang->ai->prompts->modules, function($v, $k) use ($promptModules)
|
||||
{
|
||||
return in_array($k, $promptModules);
|
||||
}, ARRAY_FILTER_USE_BOTH);
|
||||
?>
|
||||
<?php foreach($moduleList as $moduleKey => $moduleName): ?>
|
||||
<li <?php if($module == $moduleKey) echo 'class="active"'; ?>><a
|
||||
href="<?php echo $this->createLink('ai', 'prompts', "module=$moduleKey"); ?>"><?php echo $moduleName; ?></a>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main-col">
|
||||
<?php if(empty($prompts)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->ai->prompts->emptyList;?></span>
|
||||
<?php if($this->config->edition != 'open' && common::hasPriv('ai', 'createprompt')) echo html::a($this->createLink('ai', 'createprompt'), "<i class='icon icon-plus'></i> " . $lang->ai->prompts->create, '', "class='btn btn-info iframe'");?>
|
||||
</p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='main-table'>
|
||||
<table class='main-table table has-sort-head table-fixed' id='promptList'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php $vars = "module=$module&status=$status&orderBy=%s&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}";?>
|
||||
<th class='c-id text-left w-60px'><?php common::printOrderLink('id', $orderBy, $vars, $lang->ai->prompts->id);?></th>
|
||||
<th class='c-name'><?php common::printOrderLink('name', $orderBy, $vars, $lang->ai->prompts->name);?></th>
|
||||
<?php if(empty($status)):?>
|
||||
<th class='c-status w-80px'><?php common::printOrderLink('status', $orderBy, $vars, $lang->ai->prompts->stage);?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-createdby w-120px'><?php common::printOrderLink('createdby', $orderBy, $vars, $lang->ai->prompts->createdBy);?></th>
|
||||
<th class='c-createddate w-180px'><?php common::printOrderLink('createddate', $orderBy, $vars, $lang->ai->prompts->createdDate);?></th>
|
||||
<th class='c-targetform w-200px'><?php common::printOrderLink('targetform', $orderBy, $vars, $lang->ai->prompts->targetForm);?></th>
|
||||
<th class='text-center c-actions-5'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($prompts as $prompt):?>
|
||||
<tr>
|
||||
<td class='c-id'><?php echo $prompt->id;?></td>
|
||||
<td class='c-name'><?php echo common::hasPriv('ai', 'promptview') ? html::a(helper::createLink('ai', 'promptview', "id=$prompt->id"), $prompt->name, '_self', "title='$prompt->name'") : $prompt->name;?></td>
|
||||
<?php if(empty($status)):?>
|
||||
<td class='c-status'><?php echo $lang->ai->prompts->statuses[$prompt->status];?></td>
|
||||
<?php endif;?>
|
||||
<td class='c-createdby'><?php echo zget($users, $prompt->createdBy);?></td>
|
||||
<td class='c-createddate'><?php echo $prompt->createdDate;?></td>
|
||||
<td class='c-targetform'>
|
||||
<?php
|
||||
if($prompt->targetForm)
|
||||
{
|
||||
$targetFormPath = explode('.', $prompt->targetForm);
|
||||
if(count($targetFormPath) == 2) echo $lang->ai->targetForm[$targetFormPath[0]]['common'] . ' / ' . $lang->ai->targetForm[$targetFormPath[0]][$targetFormPath[1]];
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td class='text-center c-actions' data-prompt-id='<?php echo $prompt->id?>'>
|
||||
<?php $printPromptActionMenu($prompt);?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class='table-footer'>
|
||||
<div class="table-statistic"><?php echo sprintf($lang->ai->prompts->summary, count($prompts));?></div>
|
||||
<?php $pager->show('right', 'pagerjs');?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="designConfirmModal">
|
||||
<div class="modal-dialog modal-sm">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<p><?php echo $lang->ai->prompts->action->goDesignConfirm?></p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button id="goDesignButton" type="button" class="btn btn-primary"><?php echo $lang->ai->prompts->action->goDesign?></button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal"><?php echo $lang->cancel?></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="draftConfirmModal">
|
||||
<div class="modal-dialog modal-sm">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<p><?php echo $lang->ai->prompts->action->draftConfirm?></p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button id="draftPromptButton" type="button" class="btn btn-primary"><?php echo $lang->confirm?></button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal"><?php echo $lang->cancel?></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
const container = window.frameElement?.closest('.load-indicator');
|
||||
if(container && container.dataset.loading)
|
||||
{
|
||||
delete container.dataset.loading;
|
||||
container.classList.remove('loading');
|
||||
container.classList.remove('no-delay');
|
||||
}
|
||||
/* Handle clicks from audit button without auditable objects. */
|
||||
$('.prompt-audit-btn[href=""]').click(function(e)
|
||||
{
|
||||
$.zui.messager.danger('<?php echo $lang->ai->prompts->goingTestingFail;?>');
|
||||
return false;
|
||||
});
|
||||
$('.prompt-audit-btn[href!=""][href!="#"]').click(function(e)
|
||||
{
|
||||
if(!container) return;
|
||||
container.dataset.loading = '<?php echo $lang->ai->execute->auditing;?>';
|
||||
container.classList.add('loading');
|
||||
container.classList.add('no-delay');
|
||||
|
||||
/* Checks for session storage to cancel loading status (see inputinject.html.php). */
|
||||
sessionStorage.removeItem('ai-prompt-data-injected');
|
||||
const loadCheckInterval = setInterval(function()
|
||||
{
|
||||
if(sessionStorage.getItem('ai-prompt-data-injected'))
|
||||
{
|
||||
if(container && container.dataset.loading)
|
||||
{
|
||||
delete container.dataset.loading;
|
||||
container.classList.remove('loading');
|
||||
container.classList.remove('no-delay');
|
||||
}
|
||||
sessionStorage.removeItem('ai-prompt-data-injected');
|
||||
clearInterval(loadCheckInterval);
|
||||
}
|
||||
}, 200);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,220 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The ai prompt details view file of ai module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
|
||||
* @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
* @author Wenrui LI <liwenrui@easycorp.ltd>
|
||||
* @package ai
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php echo html::a(helper::createLink('ai', 'prompts'), '<i class="icon icon-back icon-sm"></i> ' . $lang->goback, '', "class='btn btn-secondary'");?>
|
||||
<div class="divider"></div>
|
||||
<div class="page-title">
|
||||
<span class="label label-id"><?php echo $prompt->id;?></span>
|
||||
<span class="text" title='<?php echo $prompt->name;?>'><?php echo $prompt->name;?></span>
|
||||
<?php if($prompt->deleted) echo "<span class='label label-danger'>{$lang->ai->prompts->deleted}</span>";?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if($this->config->edition != 'open'): ?>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<?php if(common::hasPriv('ai', 'createprompt')) echo html::a(helper::createLink('ai', 'createprompt'), "<i class='icon icon-plus'></i> {$lang->ai->prompts->create}", '', "class='btn btn-primary iframe'"); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div id="mainContent" class="main-row">
|
||||
<div class="main-col col-8">
|
||||
<div class="cell prompt-details">
|
||||
<div class="detail">
|
||||
<div class="detail-title"><?php echo $lang->ai->prompts->role;?></div>
|
||||
<div class="detail-content article-content"><?php echo $prompt->role;?></div>
|
||||
<div class="detail-title"><?php echo $lang->ai->prompts->characterization;?></div>
|
||||
<div class="detail-content article-content"><?php echo $prompt->characterization;?></div>
|
||||
</div>
|
||||
<div class="detail">
|
||||
<div class="detail-title"><?php echo $lang->ai->prompts->object;?></div>
|
||||
<div class="detail-content article-content"><?php echo $prompt->module ? $this->lang->ai->dataSource[$prompt->module]['common'] : ''; ?></div>
|
||||
<div class="detail-title"><?php echo $lang->ai->prompts->field;?></div>
|
||||
<div class="detail-content article-content"><?php echo $dataPreview;?></div>
|
||||
</div>
|
||||
<div class="detail">
|
||||
<div class="detail-title"><?php echo $lang->ai->prompts->setPurpose;?></div>
|
||||
<div class="detail-content article-content"><?php echo $prompt->purpose;?></div>
|
||||
<div class="detail-title"><?php echo $lang->ai->prompts->elaboration;?></div>
|
||||
<div class="detail-content article-content"><?php echo $prompt->elaboration;?></div>
|
||||
</div>
|
||||
<div class="detail">
|
||||
<div class="detail-title"><?php echo $lang->ai->prompts->selectTargetForm;?></div>
|
||||
<div class="detail-content article-content">
|
||||
<?php
|
||||
if(empty($prompt->targetForm)) echo '';
|
||||
else
|
||||
{
|
||||
$targetForm = explode('.', $prompt->targetForm);
|
||||
echo $this->lang->ai->targetForm[$targetForm[0]][$targetForm[1]];
|
||||
}
|
||||
?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cell"><?php include '../../common/view/action.html.php';?></div>
|
||||
<?php if($this->config->edition != 'open'): ?>
|
||||
<div class='main-actions'>
|
||||
<div class="btn-toolbar">
|
||||
<?php echo html::a(helper::createLink('ai', 'prompts'), '<i class="icon icon-back icon-sm"></i> ' . $lang->goback, '', "class='btn'"); ?>
|
||||
<?php if(!$prompt->deleted): ?>
|
||||
<?php if(($prompt->status == 'draft' && (common::hasPriv('ai', 'promptassignrole') || common::hasPriv('ai', 'promptaudit') || common::hasPriv('ai', 'publish'))) || ($prompt->status != 'draft' && common::hasPriv('ai', 'unpublish'))): ?>
|
||||
<div class='divider'></div><?php endif; ?>
|
||||
<?php if(common::hasPriv('ai', 'promptassignrole') && $prompt->status == 'draft') echo html::a(helper::createLink('ai', 'promptassignrole', "prompt=$prompt->id"), '<i class="icon icon-design icon-sm"></i> ' . $lang->ai->prompts->action->design, '', "class='btn'"); ?>
|
||||
<?php if(common::hasPriv('ai', 'promptaudit') && $prompt->status == 'draft' && $this->ai->isExecutable($prompt)) echo html::a($this->ai->getTestingLocation($prompt), '<i class="icon icon-menu-backend icon-sm"></i> ' . $lang->ai->prompts->action->test, '', "class='btn prompt-audit-btn'"); ?>
|
||||
<?php if(common::hasPriv('ai', 'promptpublish') && $prompt->status == 'draft' && $this->ai->isExecutable($prompt)) echo html::a(helper::createLink('ai', 'promptpublish', "id={$prompt->id}"), '<i class="icon icon-publish icon-sm"></i> ' . $lang->ai->prompts->action->publish, '', "class='btn'"); ?>
|
||||
<?php if(common::hasPriv('ai', 'promptunpublish') && $prompt->status == 'active') echo html::a(helper::createLink('ai', 'promptunpublish', "id={$prompt->id}"), '<i class="icon icon-ban icon-sm"></i> ' . $lang->ai->prompts->action->unpublish, '', "class='btn' id='unpublish-btn'"); ?>
|
||||
<?php if(common::hasPriv('ai', 'promptedit') || common::hasPriv('ai', 'promptdelete')): ?>
|
||||
<div class='divider'></div><?php endif; ?>
|
||||
<?php if(common::hasPriv('ai', 'promptedit')) echo html::a(helper::createLink('ai', 'promptedit', "prompt=$prompt->id"), '<i class="icon icon-edit icon-sm"></i>', '', "class='btn' title='{$lang->ai->prompts->action->edit}'"); ?>
|
||||
<?php if(common::hasPriv('ai', 'promptdelete')) echo html::a(helper::createLink('ai', 'promptdelete', "prompt=$prompt->id"), '<i class="icon icon-trash icon-sm"></i>', '', "class='btn deleter' title='{$lang->ai->prompts->action->delete}'"); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="side-col col-4">
|
||||
<div class="cell">
|
||||
<div class='tabs'>
|
||||
<ul class='nav nav-tabs'>
|
||||
<li class='active'><a href='#promptBasicInfo' data-toggle='tab'><?php echo $lang->ai->prompts->basicInfo; ?></a></li>
|
||||
<li><a href='#promptEditInfo' data-toggle='tab'><?php echo $lang->ai->prompts->editInfo; ?></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class='tab-content'>
|
||||
<div class='tab-pane active' id='promptBasicInfo'>
|
||||
<table class="table table-data">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="w-90px"><?php echo $lang->prompt->module; ?></th>
|
||||
<td><?php echo $prompt->module ? $this->lang->ai->dataSource[$prompt->module]['common'] : ''; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="w-90px"><?php echo $lang->prompt->desc; ?></th>
|
||||
<td><?php echo $prompt->desc; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="w-90px"><?php echo $lang->prompt->status; ?></th>
|
||||
<td><?php echo $lang->ai->prompts->statuses[$prompt->status]; ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="w-90px"><?php echo $lang->prompt->model; ?></th>
|
||||
<td><?php echo $modelName; ?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class='tab-pane' id='promptEditInfo'>
|
||||
<table class="table table-data">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="w-90px"><?php echo $lang->prompt->createdBy; ?></th>
|
||||
<td><?php echo zget($users, $prompt->createdBy) . $lang->at . $prompt->createdDate;?></td>
|
||||
</tr>
|
||||
<?php
|
||||
/* Search for last publish / unpublish action. */
|
||||
$lastPublishAction = null;
|
||||
foreach(array_reverse($actions) as $action)
|
||||
{
|
||||
if(in_array($action->action, array('published', 'unpublished'))) $lastPublishAction = $action;
|
||||
break;
|
||||
}
|
||||
?>
|
||||
<?php if($prompt->status == 'active'):?>
|
||||
<tr>
|
||||
<th class="w-90px"><?php echo $lang->ai->prompts->publishedBy; ?></th>
|
||||
<td><?php echo zget($users, empty($lastPublishAction) ? $prompt->createdBy : $lastPublishAction->actor);?></td>
|
||||
</tr>
|
||||
<?php else:?>
|
||||
<tr>
|
||||
<th class="w-90px"><?php echo empty($lastPublishAction) ? $lang->ai->prompts->publishedBy : $lang->ai->prompts->draftedBy;?></th>
|
||||
<td><?php if(!empty($lastPublishAction)) echo zget($users, $lastPublishAction->actor);?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th class="w-90px"><?php echo $lang->prompt->editedBy; ?></th>
|
||||
<td><?php echo $prompt->editedBy ? zget($users, $prompt->editedBy) . $lang->at . $prompt->editedDate : '';?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
const container = window.frameElement?.closest('.load-indicator');
|
||||
if(container && container.dataset.loading)
|
||||
{
|
||||
delete container.dataset.loading;
|
||||
container.classList.remove('loading');
|
||||
container.classList.remove('no-delay');
|
||||
}
|
||||
|
||||
/* TODO: use new modal for these. */
|
||||
$('.deleter').click(function()
|
||||
{
|
||||
if(confirm('<?php echo $lang->ai->prompts->action->deleteConfirm;?>'))
|
||||
{
|
||||
$.getJSON($(this).data('href'), function(resp)
|
||||
{
|
||||
if(resp.result != 'success') $.zui.messager.danger(resp.message);
|
||||
return location.reload();
|
||||
});
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
$('#unpublish-btn').click(function()
|
||||
{
|
||||
if(confirm('<?php echo $lang->ai->prompts->action->draftConfirm;?>'))
|
||||
{
|
||||
$.getJSON($(this).attr('href'), function(resp)
|
||||
{
|
||||
if(resp.result != 'success') bootbox.alert(resp.message, function() {return location.reload();});
|
||||
});
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.prompt-audit-btn').click(function()
|
||||
{
|
||||
if(!container) return;
|
||||
container.dataset.loading = '<?php echo $lang->ai->execute->auditing;?>';
|
||||
container.classList.add('loading');
|
||||
container.classList.add('no-delay');
|
||||
|
||||
/* Checks for session storage to cancel loading status (see inputinject.html.php). */
|
||||
sessionStorage.removeItem('ai-prompt-data-injected');
|
||||
const loadCheckInterval = setInterval(function()
|
||||
{
|
||||
if(sessionStorage.getItem('ai-prompt-data-injected'))
|
||||
{
|
||||
if(container && container.dataset.loading)
|
||||
{
|
||||
delete container.dataset.loading;
|
||||
container.classList.remove('loading');
|
||||
container.classList.remove('no-delay');
|
||||
}
|
||||
|
||||
sessionStorage.removeItem('ai-prompt-data-injected');
|
||||
clearInterval(loadCheckInterval);
|
||||
}
|
||||
}, 200);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
Reference in New Issue
Block a user