170 lines
5.7 KiB
PHP
170 lines
5.7 KiB
PHP
<?php
|
|
/**
|
|
* Problem reporting page.
|
|
*
|
|
* Copyright 1999-2017 Horde LLC (http://www.horde.org/)
|
|
*
|
|
* See the enclosed file COPYING for license information (LGPL-2). If you
|
|
* did not receive this file, see http://www.horde.org/licenses/lgpl.
|
|
*
|
|
* @author Chuck Hagenbuch <chuck@horde.org>
|
|
* @category Horde
|
|
* @license http://www.horde.org/licenses/lgpl LGPL-2
|
|
* @package Horde
|
|
*/
|
|
|
|
require_once __DIR__ . '/../lib/Application.php';
|
|
Horde_Registry::appInit('horde', array('authentication' => 'none'));
|
|
|
|
$vars = $injector->getInstance('Horde_Variables');
|
|
|
|
if ($redirect_url = Horde::verifySignedUrl($vars->get('return_url'))) {
|
|
$redirect_url = new Horde_Url($redirect_url);
|
|
} else {
|
|
$redirect_url = Horde::url('login.php', true, array('app' => 'horde'));
|
|
}
|
|
|
|
if (!$registry->showService('problem')) {
|
|
$redirect_url->redirect();
|
|
}
|
|
|
|
$identity = $injector->getInstance('Horde_Core_Factory_Identity')->create();
|
|
$email = $identity->getValue('from_addr');
|
|
if (!$email) {
|
|
$email = $vars->get('email', $registry->getAuth());
|
|
}
|
|
$message = $vars->message;
|
|
$name = $vars->get('name', $identity->getValue('fullname'));
|
|
$subject = $vars->subject;
|
|
|
|
switch ($vars->actionID) {
|
|
case 'send_problem_report':
|
|
if ($subject && $message) {
|
|
/* This is not a gettext string on purpose. */
|
|
$remote = empty($_SERVER['REMOTE_HOST'])
|
|
? $_SERVER['REMOTE_ADDR']
|
|
: $_SERVER['REMOTE_HOST'];
|
|
$user_agent = $_SERVER['HTTP_USER_AGENT'];
|
|
$body = "This problem report was received from $remote. " .
|
|
"The user clicked the problem report link from the following location:\n" .
|
|
(Horde::verifySignedUrl($vars->get('return_url')) ?: $vars->get('return_url', 'No requesting page')) .
|
|
"\nand is using the following browser:\n$user_agent\n\n" .
|
|
str_replace("\r\n", "\n", $message);
|
|
|
|
/* Default to a relatively reasonable email address. */
|
|
if (!$email) {
|
|
$email = 'horde-problem@' . $conf['problems']['maildomain'];
|
|
}
|
|
|
|
/* Check for attachments. */
|
|
$attachment = null;
|
|
if (!empty($conf['problems']['attachments'])) {
|
|
try {
|
|
$browser->wasFileUploaded('attachment', _("attachment"));
|
|
$attachment = $_FILES['attachment'];
|
|
} catch (Horde_Browser_Exception $e) {
|
|
if ($e->getCode() != UPLOAD_ERR_NO_FILE) {
|
|
$notification->push($e, 'horde.error');
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!empty($conf['problems']['tickets']) &&
|
|
$registry->hasMethod('tickets/addTicket')) {
|
|
$info = array_merge($conf['problems']['ticket_params'], array(
|
|
'summary' => $subject,
|
|
'comment' => $body,
|
|
'user_email' => $email
|
|
));
|
|
|
|
try {
|
|
$ticketId = $registry->call('tickets/addTicket', array($info));
|
|
} catch (Horde_Exception $e) {
|
|
$notification->push($e);
|
|
break;
|
|
}
|
|
|
|
if ($attachment &&
|
|
$registry->hasMethod('tickets/addAttachment')) {
|
|
try {
|
|
$registry->call('tickets/addAttachment', array(
|
|
'ticket_id' => $ticketId,
|
|
'name' => $attachment['name'],
|
|
'data' => file_get_contents($attachment['tmp_name'])
|
|
));
|
|
} catch (Horde_Exception $e) {
|
|
$notification->push($e);
|
|
}
|
|
}
|
|
|
|
$redirect_url->redirect();
|
|
}
|
|
|
|
/* Add user's name to the email address if provided. */
|
|
if ($name) {
|
|
$addr_ob = new Horde_Mail_Rfc822_Address($email);
|
|
if (is_null($addr_ob->host)) {
|
|
$addr_ob->host = $conf['problems']['maildomain'];
|
|
}
|
|
$addr_ob->personal = $name;
|
|
$email = $addr_ob->writeAddress(true);
|
|
}
|
|
|
|
$mail = new Horde_Mime_Mail(array(
|
|
'body' => $body,
|
|
'Subject' => _("[Problem Report]") . ' ' . $subject,
|
|
'To' => $conf['problems']['email'],
|
|
'From' => $email
|
|
));
|
|
$mail->addHeader('Sender', 'horde-problem@' . $conf['problems']['maildomain']);
|
|
|
|
/* Add attachment. */
|
|
if ($attachment) {
|
|
$mail->addAttachment(
|
|
$attachment['tmp_name'],
|
|
$attachment['name'],
|
|
$attachment['type']
|
|
);
|
|
}
|
|
|
|
try {
|
|
$mail->send($injector->getInstance('Horde_Mail'));
|
|
|
|
/* Success. */
|
|
Horde::log(
|
|
sprintf("%s Message sent to %s from %s",
|
|
$_SERVER['REMOTE_ADDR'],
|
|
preg_replace('/^.*<([^>]+)>.*$/', '$1', $conf['problems']['email']),
|
|
preg_replace('/^.*<([^>]+)>.*$/', '$1', $email)
|
|
),
|
|
'INFO'
|
|
);
|
|
|
|
/* Return to previous page and exit this script. */
|
|
$redirect_url->redirect();
|
|
} catch (Horde_Exception $e) {
|
|
$notification->push($e);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'cancel_problem_report':
|
|
$redirect_url->redirect();
|
|
break;
|
|
}
|
|
|
|
$page_output->sidebar = false;
|
|
$page_output->addInlineJsVars(array(
|
|
'HordeProblem.message_text' => _("You must describe the problem before you can send the problem report."),
|
|
'HordeProblem.summary_text' => _("Please provide a summary of the problem.")
|
|
), true);
|
|
$page_output->addScriptFile('problem.js', 'horde');
|
|
|
|
$page_output->header(array(
|
|
'title' => _("Problem Description")
|
|
));
|
|
$notification->notify(array('listeners' => 'status'));
|
|
require HORDE_TEMPLATES . '/problem/problem.inc';
|
|
$page_output->footer();
|