Helpdesk da PluGzOne, baseado no osTicket
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

476 lines
21 KiB

<?php
if(!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin()) die('Access Denied');
$info = $qs = $forms = array();
if($topic && $_REQUEST['a']!='add') {
$title=__('Update Help Topic');
$action='update';
$submit_text=__('Save Changes');
$info=$topic->getInfo();
$info['id']=$topic->getId();
$info['pid']=$topic->getPid();
$trans['name'] = $topic->getTranslateTag('name');
$qs += array('id' => $topic->getId());
$forms = $topic->getForms();
} else {
$title=__('Add New Help Topic');
$action='create';
$submit_text=__('Add Topic');
// $info['isactive']=isset($info['isactive'])?$info['isactive']:1;
$info['ispublic']=isset($info['ispublic'])?$info['ispublic']:1;
$qs += array('a' => $_REQUEST['a']);
$forms = TicketForm::objects();
}
$info=Format::htmlchars(($errors && $_POST)?$_POST:$info, true);
?>
<h2><?php echo $title; ?>
<?php if (isset($info['topic'])) { ?><small>
— <?php echo $info['topic']; ?></small>
<?php } ?>
<i class="help-tip icon-question-sign" href="#help_topic_information"></i></h2>
<ul class="clean tabs" id="topic-tabs">
<li class="active"><a href="#info"><i class="icon-info-sign"></i> <?php echo __('Help Topic Information'); ?></a></li>
<li><a href="#routing"><i class="icon-ticket"></i> <?php echo __('New ticket options'); ?></a></li>
<li><a href="#forms"><i class="icon-paste"></i> <?php echo __('Forms'); ?></a></li>
</ul>
<form action="helptopics.php?<?php echo Http::build_query($qs); ?>" method="post" class="save">
<?php csrf_token(); ?>
<input type="hidden" name="do" value="<?php echo $action; ?>">
<input type="hidden" name="a" value="<?php echo Format::htmlchars($_REQUEST['a']); ?>">
<input type="hidden" name="id" value="<?php echo $info['id']; ?>">
<div id="topic-tabs_container">
<div class="tab_content" id="info">
<table class="table" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td width="180" class="required">
<?php echo __('Topic');?>:
</td>
<td>
<input type="text" size="30" name="topic" value="<?php echo $info['topic']; ?>"
autofocus data-translate-tag="<?php echo $trans['name']; ?>"/>
&nbsp;<span class="error">*&nbsp;<?php echo $errors['topic']; ?></span> <i class="help-tip icon-question-sign" href="#topic"></i>
</td>
</tr>
<tr>
<td width="180" class="required">
<?php echo __('Status');?>:
</td>
<td>
<select name="status">
<option value="active"<?php echo ($info['status'] == __('Active'))?'selected="selected"':'';?>><?php echo __('Active'); ?></option>
<option value="disabled"<?php echo ($info['status'] == __('Disabled'))?'selected="selected"':'';?>><?php echo __('Disabled'); ?></option>
<option value="archived"<?php echo ($info['status'] == __('Archived'))?'selected="selected"':'';?>><?php echo __('Archived'); ?></option>
</select>
&nbsp;<span class="error">*&nbsp;<?php echo $errors['status']; ?></span> <i class="help-tip icon-question-sign" href="#htstatus"></i>
</td>
</tr>
<tr>
<td width="180" class="required">
<?php echo __('Type');?>:
</td>
<td>
<input type="radio" name="ispublic" value="1" <?php echo $info['ispublic']?'checked="checked"':''; ?>> <?php echo __('Public'); ?>
<input type="radio" name="ispublic" value="0" <?php echo !$info['ispublic']?'checked="checked"':''; ?>> <?php echo __('Private/Internal'); ?>
&nbsp;<span class="error">*&nbsp;<?php echo $errors['ispublic']; ?></span> <i class="help-tip icon-question-sign" href="#type"></i>
</td>
</tr>
<tr>
<td width="180">
<?php echo __('Parent Topic');?>:
</td>
<td>
<select name="topic_pid">
<option value="">&mdash; <?php echo __('Top-Level Topic'); ?> &mdash;</option><?php
$topics = Topic::getHelpTopics();
while (list($id,$topic) = each($topics)) {
if ($id == $info['topic_id'])
continue; ?>
<option value="<?php echo $id; ?>"<?php echo ($info['topic_pid']==$id)?'selected':''; ?>><?php echo $topic; ?></option>
<?php
} ?>
</select> <i class="help-tip icon-question-sign" href="#parent_topic"></i>
&nbsp;<span class="error">&nbsp;<?php echo $errors['pid']; ?></span>
</td>
</tr>
</tbody>
</table>
<div style="padding:8px 3px;border-bottom: 2px dotted #ddd;">
<strong><?php echo __('Internal Notes');?>:</strong>
<?php echo __("Be liberal, they're internal");?>
</div>
<textarea class="richtext no-bar" name="notes" cols="21"
rows="8" style="width: 80%;"><?php echo $info['notes']; ?></textarea>
</div>
<div class="hidden tab_content" id="routing">
<div style="padding:8px 0;border-bottom: 2px dotted #ddd;">
<div><b class="big"><?php echo __('New ticket options');?></b></div>
</div>
<table class="table" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td width="180" class="required">
<?php echo __('Department'); ?>:
</td>
<td>
<select name="dept_id" data-quick-add="department">
<option value="0">&mdash; <?php echo __('System Default'); ?> &mdash;</option>
<?php
if($info['dept_id'])
$current_name = Dept::getNameById($info['dept_id']);
if ($depts=Dept::getPublicDepartments()) {
if(!array_key_exists($info['dept_id'], $depts) && $info['dept_id'])
{
$depts[$info['dept_id']] = $current_name;
$warn = sprintf(__('%s selected must be active'), __('Department'));
}
foreach ($depts as $id=>$name) {
$selected=($info['dept_id'] && $id==$info['dept_id'])?'selected="selected"':'';
echo sprintf('<option value="%d" %s>%s</option>',$id,$selected,$name);
}
}
?>
<option value="0" data-quick-add>&mdash; <?php echo __('Add New');?> &mdash;</option>
</select>
<?php
if($warn) { ?>
&nbsp;<span class="error">*&nbsp;<?php echo $warn; ?></span>
<?php } ?>
<i class="help-tip icon-question-sign" href="#department"></i>
</td>
</tr>
<tr class="border">
<td>
<?php echo __('Ticket Number Format'); ?>:
</td>
<td>
<label>
<input type="radio" name="custom-numbers" value="0" <?php echo !$info['custom-numbers']?'checked="checked"':''; ?>
onchange="javascript:$('#custom-numbers').hide();"> <?php echo __('System Default'); ?>
</label>&nbsp;<label>
<input type="radio" name="custom-numbers" value="1" <?php echo $info['custom-numbers']?'checked="checked"':''; ?>
onchange="javascript:$('#custom-numbers').show(200);"> <?php echo __('Custom'); ?>
</label>&nbsp; <i class="help-tip icon-question-sign" href="#custom_numbers"></i>
</td>
</tr>
</tbody>
<tbody id="custom-numbers" style="<?php if (!$info['custom-numbers']) echo 'display:none'; ?>">
<tr>
<td style="padding-left:20px">
<?php echo __('Format'); ?>:
</td>
<td>
<input type="text" name="number_format" value="<?php echo $info['number_format']; ?>"/>
<span class="faded"><?php echo __('e.g.'); ?> <span id="format-example"><?php
if ($info['custom-numbers']) {
if ($info['sequence_id'])
$seq = Sequence::lookup($info['sequence_id']);
if (!isset($seq))
$seq = new RandomSequence();
echo $seq->current($info['number_format']);
} ?></span></span>
<div class="error"><?php echo $errors['number_format']; ?></div>
</td>
</tr>
<tr>
<?php $selected = 'selected="selected"'; ?>
<td style="padding-left:20px">
<?php echo __('Sequence'); ?>:
</td>
<td>
<select name="sequence_id">
<option value="0" <?php if ($info['sequence_id'] == 0) echo $selected;
?>>&mdash; <?php echo __('Random'); ?> &mdash;</option>
<?php foreach (Sequence::objects() as $s) { ?>
<option value="<?php echo $s->id; ?>" <?php
if ($info['sequence_id'] == $s->id) echo $selected;
?>><?php echo $s->name; ?></option>
<?php } ?>
</select>
<button class="action-button pull-right" onclick="javascript:
$.dialog('ajax.php/sequence/manage', 205);
return false;
"><i class="icon-gear"></i> <?php echo __('Manage'); ?></button>
</td>
</tr>
</tbody>
<tbody>
<tr>
<td width="180">
<?php echo __('Status'); ?>:
</td>
<td>
<span>
<select name="status_id">
<option value="">&mdash; <?php echo __('System Default'); ?> &mdash;</option>
<?php
foreach (TicketStatusList::getStatuses(array('states'=>array('open'))) as $status) {
$name = $status->getName();
if (!($isenabled = $status->isEnabled()))
$name.=' '.__('(disabled)');
echo sprintf('<option value="%d" %s %s>%s</option>',
$status->getId(),
($info['status_id'] == $status->getId())
? 'selected="selected"' : '',
$isenabled ? '' : 'disabled="disabled"',
$name
);
}
?>
</select>
&nbsp;
<span class="error"><?php echo $errors['status_id']; ?></span>
<i class="help-tip icon-question-sign" href="#status"></i>
</span>
</td>
</tr>
<tr>
<td width="180">
<?php echo __('Priority'); ?>:
</td>
<td>
<select name="priority_id">
<option value="">&mdash; <?php echo __('System Default'); ?> &mdash;</option>
<?php
if (($priorities=Priority::getPriorities())) {
foreach ($priorities as $id => $name) {
$selected=($info['priority_id'] && $id==$info['priority_id'])?'selected="selected"':'';
echo sprintf('<option value="%d" %s>%s</option>', $id, $selected, $name);
}
}
?>
</select>
&nbsp;<span class="error">&nbsp;<?php echo $errors['priority_id']; ?></span>
<i class="help-tip icon-question-sign" href="#priority"></i>
</td>
</tr>
<tr>
<td width="180">
<?php echo __('SLA Plan');?>:
</td>
<td>
<select name="sla_id">
<option value="0">&mdash; <?php echo __("Department's Default");?> &mdash;</option>
<?php
if($slas=SLA::getSLAs()) {
foreach($slas as $id =>$name) {
echo sprintf('<option value="%d" %s>%s</option>',
$id, ($info['sla_id']==$id)?'selected="selected"':'',$name);
}
}
?>
</select>
&nbsp;<span class="error">&nbsp;<?php echo $errors['sla_id']; ?></span>
<i class="help-tip icon-question-sign" href="#sla_plan"></i>
</td>
</tr>
<tr>
<td width="180"><?php echo __('Thank-You Page'); ?>:</td>
<td>
<select name="page_id">
<option value="">&mdash; <?php echo __('System Default'); ?> &mdash;</option>
<?php
if(($pages = Page::getActiveThankYouPages())) {
foreach($pages as $page) {
if(strcasecmp($page->getType(), 'thank-you')) continue;
echo sprintf('<option value="%d" %s>%s</option>',
$page->getId(),
($info['page_id']==$page->getId())?'selected="selected"':'',
$page->getName());
}
}
?>
</select>&nbsp;<font class="error"><?php echo $errors['page_id']; ?></font>
<i class="help-tip icon-question-sign" href="#thank_you_page"></i>
</td>
</tr>
<tr>
<td width="180">
<?php echo __('Auto-assign To');?>:
</td>
<td>
<select name="assign" data-quick-add>
<option value="0">&mdash; <?php echo __('Unassigned'); ?> &mdash;</option>
<?php
if (($users=Staff::getStaffMembers())) {
echo sprintf('<OPTGROUP label="%s">',
sprintf(__('Agents (%d)'), count($users)));
foreach ($users as $id => $name) {
$k="s$id";
$selected = ($info['assign']==$k || $info['staff_id']==$id)?'selected="selected"':'';
?>
<option value="<?php echo $k; ?>"<?php echo $selected; ?>><?php echo $name; ?></option>
<?php
}
echo '</OPTGROUP>';
}
if ($teams = Team::getTeams()) { ?>
<optgroup data-quick-add="team" label="<?php
echo sprintf(__('Teams (%d)'), count($teams)); ?>"><?php
foreach ($teams as $id => $name) {
$k="t$id";
$selected = ($info['assign']==$k || $info['team_id']==$id) ? 'selected="selected"' : '';
?>
<option value="<?php echo $k; ?>"<?php echo $selected; ?>><?php echo $name; ?></option>
<?php
} ?>
<option value="0" data-quick-add data-id-prefix="t">— <?php echo __('Add New Team'); ?> —</option>
</optgroup>
<?php
} ?>
</select>
&nbsp;<span class="error">&nbsp;<?php echo $errors['assign']; ?></span>
<i class="help-tip icon-question-sign" href="#auto_assign_to"></i>
</td>
</tr>
<tr>
<td width="180">
<?php echo __('Auto-Response'); ?>:
</td>
<td>
<input type="checkbox" name="noautoresp" value="1" <?php echo $info['noautoresp']?'checked="checked"':''; ?> >
<?php echo __('<strong>Disable</strong> new ticket auto-response'); ?>
<i class="help-tip icon-question-sign" href="#ticket_auto_response"></i>
</td>
</tr>
</tbody>
</table>
</div>
<div class="hidden tab_content" id="forms">
<table id="topic-forms" class="table" border="0" cellspacing="0" cellpadding="2">
<?php
$current_forms = array();
foreach ($forms as $F) {
$current_forms[] = $F->id; ?>
<tbody data-form-id="<?php echo $F->get('id'); ?>">
<tr>
<td class="handle" colspan="6">
<input type="hidden" name="forms[]" value="<?php echo $F->get('id'); ?>" />
<div class="pull-right">
<i class="icon-large icon-move icon-muted"></i>
<?php if ($F->get('type') != 'T') { ?>
<a href="#" title="<?php echo __('Delete'); ?>" onclick="javascript:
if (confirm(__('You sure?')))
var tbody = $(this).closest('tbody');
tbody.fadeOut(function(){this.remove()});
$(this).closest('form')
.find('[name=form_id] [value=' + tbody.data('formId') + ']')
.prop('disabled', false);
return false;"><i class="icon-large icon-trash"></i></a>
<?php } ?>
</div>
<div><strong><?php echo Format::htmlchars($F->getLocal('title')); ?></strong></div>
<div><?php echo Format::display($F->getLocal('instructions')); ?></div>
</td>
</tr>
<tr style="text-align:left">
<th><?php echo __('Enable'); ?></th>
<th><?php echo __('Label'); ?></th>
<th><?php echo __('Type'); ?></th>
<th><?php echo __('Visibility'); ?></th>
<th><?php echo __('Variable'); ?></th>
</tr>
<?php
foreach ($F->getDynamicFields() as $f) { ?>
<tr>
<td><input type="checkbox" name="fields[]" value="<?php
echo $f->get('id'); ?>" <?php
if (!$f->_disabled) echo 'checked="checked"'; ?>/></td>
<td><?php echo $f->get('label'); ?></td>
<td><?php $t=FormField::getFieldType($f->get('type')); echo __($t[0]); ?></td>
<td><?php echo $f->getVisibilityDescription(); ?></td>
<td><?php echo $f->get('name'); ?></td>
</tr>
<?php } ?>
</tbody>
<?php } ?>
</table>
<br/>
<strong><?php echo __('Add Custom Form'); ?></strong>:
<select name="form_id" id="newform">
<option value=""><?php echo '— '.__('Add a custom form') . ' —'; ?></option>
<?php foreach (DynamicForm::objects()
->filter(array('type'=>'G'))
->exclude(array('flags__hasbit' => DynamicForm::FLAG_DELETED))
as $F) { ?>
<option value="<?php echo $F->get('id'); ?>"
<?php if (in_array($F->id, $current_forms))
echo 'disabled="disabled"'; ?>
<?php if ($F->get('id') == $info['form_id'])
echo 'selected="selected"'; ?>>
<?php echo $F->getLocal('title'); ?>
</option>
<?php } ?>
</select>
&nbsp;<span class="error">&nbsp;<?php echo $errors['form_id']; ?></span>
<i class="help-tip icon-question-sign" href="#custom_form"></i>
</div>
</div>
<p style="text-align:center;">
<input type="submit" name="submit" value="<?php echo $submit_text; ?>">
<input type="reset" name="reset" value="<?php echo __('Reset');?>">
<input type="button" name="cancel" value="<?php echo __('Cancel');?>" onclick='window.location.href="helptopics.php"'>
</p>
</form>
<script type="text/javascript">
$(function() {
var request = null,
update_example = function() {
request && request.abort();
request = $.get('ajax.php/sequence/'
+ $('[name=sequence_id] :selected').val(),
{'format': $('[name=number_format]').val()},
function(data) { $('#format-example').text(data); }
);
};
$('[name=sequence_id]').on('change', update_example);
$('[name=number_format]').on('keyup', update_example);
$('form select#newform').change(function() {
var $this = $(this),
val = $this.val();
if (!val) return;
$.ajax({
url: 'ajax.php/form/' + val + '/fields/view',
dataType: 'json',
success: function(json) {
if (json.success) {
$(json.html).appendTo('#topic-forms').effect('highlight');
$this.find(':selected').prop('disabled', true);
}
}
});
});
$('table#topic-forms').sortable({
items: 'tbody',
handle: 'td.handle',
tolerance: 'pointer',
forcePlaceholderSize: true,
helper: function(e, ui) {
ui.children().each(function() {
$(this).children().each(function() {
$(this).width($(this).width());
});
});
ui=ui.clone().css({'background-color':'white', 'opacity':0.8});
return ui;
}
}).disableSelection();
});
</script>