Newer
Older
<?php
/*********************************************************************
ajax.content.php
AJAX interface for content fetching...allowed methods.
Peter Rotich <peter@osticket.com>
http://www.osticket.com
Released under the GNU General Public License WITHOUT ANY WARRANTY.
See LICENSE.TXT for details.
vim: expandtab sw=4 ts=4 sts=4:
**********************************************************************/
if(!defined('INCLUDE_DIR')) die('!');
function log($id) {
if($id && ($log=Log::lookup($id))) {
$content=sprintf('<div
style="width:500px;"> <strong>%s</strong><br><p
style="white-space:pre-line;">%s</p>
<hr><strong>%s:</strong> <em>%s</em> <strong>%s:</strong> <em>%s</em></div>',
$log->getTitle(),
Format::display(str_replace(',',', ',$log->getText())),
Format::daydatetime($log->getCreateDate()),
$content='<div style="width:295px;"> <strong>'.__('Error').':</strong>'.
sprintf(__('%s: Unknown or invalid ID.'), __('log entry')).'</div>';
}
return $content;
}
function ticket_variables() {
<h2>'.__('Ticket Variables').'</h2>
'.__('Please note that non-base variables depend on the context of use. Visit osTicket Wiki for up to date documentation.').'
<br/>
<table width="100%" border="0" cellspacing=1 cellpadding=2>
<tr><td width="55%" valign="top"><b>'.__('Base Variables').'</b></td><td><b>'.__('Other Variables').'</b></td></tr>
<table width="100%" border="0" cellspacing=1 cellpadding=1>
<tr><td width="130">%{ticket.id}</td><td>'.__('Ticket ID').' ('.__('internal ID').')</td></tr>
<tr><td>%{ticket.number}</td><td>'.__('Ticket number').' ('.__('external ID').')</td></tr>
<tr><td>%{ticket.email}</td><td>'.__('Email address').'</td></tr>
<tr><td>%{ticket.name}</td><td>'.__('Full name').' —
<em>'.__('see name expansion').'</em></td></tr>
<tr><td>%{ticket.subject}</td><td>'.__('Subject').'</td></tr>
<tr><td>%{ticket.phone}</td><td>'.__('Phone number | ext').'</td></tr>
<tr><td>%{ticket.status}</td><td>'.__('Status').'</td></tr>
<tr><td>%{ticket.priority}</td><td>'.__('Priority').'</td></tr>
<tr><td>%{ticket.assigned}</td><td>'.__('Assigned agent and/or team').'</td></tr>
<tr><td>%{ticket.create_date}</td><td>'.__('Date created').'</td></tr>
<tr><td>%{ticket.due_date}</td><td>'.__('Due date').'</td></tr>
<tr><td>%{ticket.close_date}</td><td>'.__('Date closed').'</td></tr>
<tr><td>%{ticket.recipients}</td><td>'.__('List of all recipient names').'</td></tr>
<tr><td nowrap>%{recipient.ticket_link}</td><td>'.__('Auth. token used for auto-login').'<br/>
'.__('Agent\'s ticket view link').'</td></tr>
<tr><td colspan="2" style="padding:5px 0 5px 0;"><em><b>'.__('Expandable Variables').'</b></em></td></tr>
<tr><td>%{ticket.topic}</td><td>'.__('Help topic').'</td></tr>
<tr><td>%{ticket.dept}</td><td>'.__('Department').'</td></tr>
<tr><td>%{ticket.staff}</td><td>'.__('Assigned/closing agent').'</td></tr>
<tr><td>%{ticket.team}</td><td>'.__('Assigned/closing team').'</td></tr>
<tr><td>%{ticket.thread}</td><td>'.__('Ticket Thread').'</td></tr>
</table>
</td>
<td valign="top">
<table width="100%" border="0" cellspacing=1 cellpadding=1>
<tr><td width="100">%{message}</td><td>'.__('Incoming message').'</td></tr>
<tr><td>%{response}</td><td>'.__('Outgoing response').'</td></tr>
<tr><td>%{comments}</td><td>'.__('Assign/transfer comments').'</td></tr>
<tr><td>%{note}</td><td>'.__('Internal note <em>(expandable)</em>').'</td></tr>
<tr><td>%{assignee}</td><td>'.__('Assigned agent/team').'</td></tr>
<tr><td>%{assigner}</td><td>'.__('Agent assigning the ticket').'</td></tr>
<tr><td>%{url}</td><td>'.__('osTicket\'s base url (FQDN)').'</td></tr>
<td>'.__('Reset link used by the password reset feature').'</td></tr>
<table width="100%" border="0" cellspacing=1 cellpadding=1>
<tr><td colspan="2"><b>'.__('Name Expansion').'</b></td></tr>
<tr><td>.first</td><td>'.__('First Name').'</td></tr>
<tr><td>.last</td><td>'.__('Last Name').'</td></tr>
<tr><td>.full</td><td>'.__('First Last').'</td></tr>
<tr><td>.short</td><td>'.__('First L.').'</td></tr>
<tr><td>.shortformal</td><td>'.__('F. Last').'</td></tr>
<tr><td>.lastfirst</td><td>'.__('Last, First').'</td></tr>
<tr><td colspan="2" style="padding:5px 0 5px 0;"><em><b>'.__('Ticket Thread expansions').'</b></em></td></tr>
<tr><td>.original</td><td>'.__('Original Message').'</td></tr>
<tr><td>.lastmessage</td><td>'.__('Last Message').'</td></tr>
<tr><td colspan="2" style="padding:5px 0 5px 0;"><em><b>'.__('Thread Entry expansions').'</b></em></td></tr>
<tr><td>.poster</td><td>'.__('Poster').'</td></tr>
<tr><td>.create_date</td><td>'.__('Date created').'</td></tr>
</td>
</tr>
</table>
</div>';
function getSignature($type, $id=null) {
global $thisstaff;
if (!$thisstaff)
Http::response(403, 'Login Required');
switch ($type) {
case 'none':
break;
case 'mine':
echo Format::viewableImages($thisstaff->getSignature());
break;
case 'dept':
if (!($dept = Dept::lookup($id)))
Http::response(404, 'No such department');
echo Format::viewableImages($dept->getSignature());
break;
default:
Http::response(400, 'Unknown signature type');
break;
}
}
function manageContent($id, $lang=false) {
global $thisstaff, $cfg;
if (!$thisstaff)
Http::response(403, 'Login Required');
$content = Page::lookup($id, $lang);
$langs = Internationalization::getConfiguredSystemLanguages();
$translations = $content->getAllTranslations();
$info = array(
'title' => $content->getTitle(),
'body' => $content->getBody(),
);
foreach ($translations as $t) {
if (!($data = $t->getComplex()))
continue;
$info['trans'][$t->lang] = array(
'title' => $data['name'],
'body' => $data['body'],
);
include STAFFINC_DIR . 'templates/content-manage.tmpl.php';
}
function manageNamedContent($type, $lang=false) {
global $thisstaff, $cfg;
if (!$thisstaff)
Http::response(403, 'Login Required');
$langs = $cfg->getSecondaryLanguages();
$content = Page::lookupByType($type, $lang);
$info = $content->getHashtable();
include STAFFINC_DIR . 'templates/content-manage.tmpl.php';
}
function updateContent($id) {
global $thisstaff;
if (!$thisstaff)
Http::response(403, 'Login Required');
elseif (!($content = Page::lookup($id)))
Http::response(404, 'No such content');
if (!isset($_POST['body']))
$_POST['body'] = '';
$vars = array_merge($content->getHashtable(), $_POST);
// Allow empty content for the staff banner
if ($content->update($vars, $errors,
$content->getType() == 'banner-staff')
) {
Http::response(201, 'Have a great day!');
if (!$errors['err'])
$errors['err'] = __('Correct the error(s) below and try again!');
$info = $_POST;
$errors = Format::htmlchars($errors);
include STAFFINC_DIR . 'templates/content-manage.tmpl.php';
function context() {
global $thisstaff;
if (!$thisstaff)
Http::response(403, 'Login Required');
if (!$_GET['root'])
Http::response(400, '`root` is required parameter');
switch ($_GET['root']) {
case 'cannedresponse':
$roots = array('ticket');
break;
default:
// Get the template for this template
$tpl_info = EmailTemplateGroup::getTemplateDescription($_GET['root']);
if (!$tpl_info)
Http::response(422, 'No such context');
$roots = $tpl_info['context'];
}
$contextTypes = array(
'assignee' => array('class' => 'Staff', 'desc' => 'Newly assigned agent'),
'assigner' => array('class' => 'Staff', 'desc' => 'Agent performing the assignment'),
'comments' => 'Agent supplied comments',
'message' => array('class' => 'MessageThreadEntry', 'desc' => 'Message from the EndUser'),
'note' => array('class' => 'NoteThreadEntry', 'desc' => 'Internal note'),
'poster' => array('class' => 'User', 'desc' => 'EndUser or Agent originating the message'),
'recipient' => array('class' => 'TicketUser', 'desc' => 'Message recipient'),
'response' => array('class' => 'ResponseThreadEntry', 'desc' => 'Agent reply'),
'signature' => 'Selected staff or department signature',
'staff' => array('class' => 'Staff', 'desc' => 'Agent originating the activity'),
'ticket' => array('class' => 'Ticket', 'desc' => 'The ticket'),
);
$context = array();
foreach ($roots as $C) {
$context[$C] = $contextTypes[$C];
}
$global = osTicket::getVarScope();
$items = VariableReplacer::compileScope($context + $global);
header('Content-Type: application/json');
return $this->encode($items);
}