isModuleOutputEnabled()
|| !Mage::helper('aw_hdu3/config')->isEnabled()
|| !Mage::helper('aw_hdu3/config')->isPQEnabled()
) {
return $this;
}
$question = $observer->getEvent()->getQuestion();
if(!$question->isObjectNew()) {
return $this;
}
$departmentCollection = Mage::getModel('aw_hdu3/department')->getCollection();
$departmentCollection
->sortByOrder()
->addActiveFilter()
->addFilterByStoreId(Mage::app()->getStore()->getId())
;
$department = $departmentCollection->getFirstItem();
if (null === $department->getId()) {
return $this;
}
try {
$ticket = Mage::getModel('aw_hdu3/ticket');
$ticket
->setDepartmentAgentId($department->getPrimaryAgentId())
->setDepartmentId($department->getId())
->setStatus(AW_Helpdesk3_Model_Source_Ticket_Status::NEW_VALUE)
->setPriority(AW_Helpdesk3_Model_Source_Ticket_Priority::TODO_VALUE)
->setCustomerName(Mage::helper('aw_hdu3')->stripTags($question->getAuthorName()))
->setCustomerEmail($question->getAuthorEmail())
->setSubject(Mage::helper('core/string')->truncate(
Mage::helper('aw_hdu3')->__(
"PQ on %s: %s",
Mage::helper('aw_hdu3')->stripTags($question->getProduct()->getName()),
$question->getContent()
),
80
)
)
->setStoreId(Mage::app()->getStore()->getId())
->save()
;
$content = Mage::helper('aw_hdu3')->__(
'Edit Product Question entry%s: frontend | backend',
Mage::getSingleton('adminhtml/url')->getUrl('aw_pq2_admin/adminhtml_question/edit',
array('id' => $question->getId())
),
Mage::helper('aw_hdu3')->stripTags($question->getProduct()->getName()),
$question->getProduct()->getProductUrl(),
Mage::getSingleton('adminhtml/url')->getUrl('adminhtml/catalog_product/edit',
array('id' => $question->getProductId())
)
);
$ticket->addHistory(AW_Helpdesk3_Model_Ticket_History_Event_Message::TYPE,
array(
'content' => $question->getContent(),
'attachments' => array()
)
);
$ticket->addHistory(AW_Helpdesk3_Model_Ticket_History_Event_Note::TYPE,
array(
'content' => $content,
'attachments' => array()
)
);
} catch (Exception $e) {
AW_Lib_Helper_Log::log($e->getMessage(), AW_Lib_Helper_Log::SEVERITY_ERROR);
}
return $this;
}
public function predispatchContactsIndexPost()
{
if (!Mage::helper('aw_hdu3')->isModuleOutputEnabled()
|| !Mage::helper('aw_hdu3/config')->isEnabled()
|| !Mage::helper('aw_hdu3/config')->isIntegrationWithContactFormEnabled()
) {
return $this;
}
$postData = Mage::app()->getRequest()->getPost();
try {
$this->_createTicketFromContactForm($postData);
} catch (Exception $e) {
Mage::getSingleton('customer/session')->addError(Mage::helper('aw_hdu3')->__($e->getMessage()));
$response = Mage::app()->getResponse();
$response->setRedirect(Mage::getUrl('*/*/'))->sendResponse();
exit;
}
return $this;
}
public function customerSaveBefore(Varien_Event_Observer $observer)
{
$data = $observer->getEvent()->getDataObject();
$newEmail = $data->getData('email');
$oldEmail = $data->getOrigData('email');
$websiteId = $data->getOrigData('website_id');
Mage::getResourceModel('aw_hdu3/ticket')->updateCustomerEmailByWebsiteId($newEmail, $oldEmail, $websiteId);
}
protected function _createTicketFromContactForm($postData)
{
$formKey = Mage::getSingleton('core/session')->getFormKey();
if (!array_key_exists('form_key', $postData) || !$formKey || $postData['form_key'] != $formKey) {
throw new Exception('Antispam protection triggered');
}
$department = Mage::getModel('aw_hdu3/department')->load(
isset($postData['department']) ? $postData['department'] : null
);
if (null === $department->getId()) {
$departmentCollection = Mage::getModel('aw_hdu3/department')->getCollection();
$departmentCollection
->sortByOrder()
->addActiveFilter()
->addFilterByStoreId(Mage::app()->getStore()->getId())
;
$department = $departmentCollection->getFirstItem();
}
$emailValidator = new Zend_Validate_EmailAddress;
if (!array_key_exists('email', $postData) || empty($postData['email'])
|| !$emailValidator->isValid($postData['email'])
) {
throw new Exception('Please specify correct email address');
}
if (array_key_exists('name', $postData)) {
$postData['name'] = trim(strip_tags($postData['name']));
}
if (!array_key_exists('name', $postData) || empty($postData['name'])) {
throw new Exception('Please specify name');
}
if (!array_key_exists('priority', $postData) || empty($postData['priority'])) {
$postData['priority'] = AW_Helpdesk3_Model_Source_Ticket_Priority::TODO_VALUE;
}
if (!array_key_exists('comment', $postData) || empty($postData['comment'])) {
throw new Exception('Please leave a comment');
}
$attachments = $this->_getAttachments();
$ticket = Mage::getModel('aw_hdu3/ticket');
$ticket
->setDepartmentAgentId($department->getPrimaryAgentId())
->setDepartmentId($department->getId())
->setStatus(AW_Helpdesk3_Model_Source_Ticket_Status::NEW_VALUE)
->setPriority($postData['priority'])
->setCustomerName($postData['name'])
->setCustomerEmail($postData['email'])
->setSubject(Mage::helper('aw_hdu3')->__(
'Contact form %s <%s>', trim($postData['name']), trim($postData['email']))
)
->setStoreId(Mage::app()->getStore()->getId())
->save()
;
AW_Lib_Helper_Log::start(Mage::helper('aw_hdu3')->__('Got new ticket from contact form.'));
AW_Lib_Helper_Log::stop(Mage::helper('aw_hdu3')->__('Ticket UID[%s]', $ticket->getUid()));
$ticket->addHistory(AW_Helpdesk3_Model_Ticket_History_Event_Message::TYPE,
array(
'content' => $postData['comment'],
'attachments' => $attachments
)
);
return $this;
}
public function createFromOrder()
{
if (Mage::app()->getRequest()->getParam('create_ticket')) {
$order = Mage::getModel('sales/order')->load(Mage::app()->getRequest()->getParam('order_id'));
$history = Mage::app()->getRequest()->getPost();
$history = @$history['history'];
$body = Mage::app()->getResponse()->getBody();
if (!array_key_exists('comment', $history) || empty($history['comment'])) {
$message = Mage::helper('aw_hdu3')->__('Ticket has not been saved. Comment is empty');
$message = Zend_Json::encode($message);
$body .= "";
Mage::app()->getResponse()->setBody($body);
return $this;
}
$department = null;
if (
Mage::helper('aw_hdu3/config')->isPrimaryDepartmentActive(Mage::app()->getStore()->getId())
&& $defaultDepartmentId = Mage::helper('aw_hdu3/config')->getDefaultDepartmentId(Mage::app()->getStore()->getId())
) {
$department = Mage::getModel('aw_hdu3/department')->load($defaultDepartmentId);
}
if (!$department || !$department->getId()) {
$departmentCollection = Mage::getModel('aw_hdu3/department')->getCollection();
$departmentCollection
->sortByOrder()
->addActiveFilter()
->addFilterByStoreId(Mage::app()->getStore()->getId())
;
$department = $departmentCollection->getFirstItem();
}
if (!$department || !$department->getId()) {
$message = Mage::helper('aw_hdu3')->__('Ticket has not been saved. There are no Primary Department or any Help Desk Departments configured');
$message = Zend_Json::encode($message);
$body .= "";
Mage::app()->getResponse()->setBody($body);
return $this;
}
$ticket = Mage::getModel('aw_hdu3/ticket');
$ticket
->setDepartmentAgentId($department->getPrimaryAgentId())
->setDepartmentId($department->getId())
->setStatus(AW_Helpdesk3_Model_Source_Ticket_Status::NEW_VALUE)
->setPriority(AW_Helpdesk3_Model_Source_Ticket_Priority::TODO_VALUE)
->setCustomerName($order->getCustomerName())
->setCustomerEmail($order->getCustomerEmail())
->setOrderIncrementId($order->getIncrementId())
->setSubject(Mage::helper('aw_hdu3')->__('Order #%s', $order->getIncrementId()))
->setStoreId($order->getStoreId())
->save()
;
AW_Lib_Helper_Log::start(Mage::helper('aw_hdu3')->__('Got new ticket from order page.'));
AW_Lib_Helper_Log::stop(Mage::helper('aw_hdu3')->__('Ticket UID[%s]', $ticket->getUid()));
$ticket->addHistory(AW_Helpdesk3_Model_Ticket_History_Event_Message::TYPE,
array(
'content' => trim(@$history['comment'])
)
);
$ticketUrl = Mage::helper('adminhtml')->getUrl('helpdesk_admin/adminhtml_ticket/edit', array('id' => $ticket->getId()));
$ticketUrlHtml = Mage::helper('aw_hdu3')->__(
'Ticket %s has been successfully saved', "" . $ticket->getUid() . ""
);
$ticketUrlHtml = Zend_Json::encode($ticketUrlHtml);
$body .= "";
Mage::app()->getResponse()->setBody($body);
}
}
/**
* @return array
* @throws Exception
*/
protected function _getAttachments()
{
$attachmentNeeded = Mage::app()->getRequest()->getParam('attachment_needed', null);
$attachments = array();
if (!array_key_exists('attachments', $_FILES) || empty($_FILES['attachments']['tmp_name'])) {
return $attachments;
}
if (!Mage::helper('aw_hdu3/config')->isAllowCustomerToAttachFilesOnFrontend()) {
throw new Exception('Attachments are not allowed');
}
foreach ($_FILES['attachments']['tmp_name'] as $key => $tmpName) {
if (!$attachmentNeeded || !array_key_exists($key, $attachmentNeeded)) {
continue;
}
if (Mage::helper('aw_hdu3')->validateAttach($_FILES['attachments']['name'][$key],
file_get_contents($_FILES['attachments']['tmp_name'][$key]))
) {
$attach = Mage::getModel('aw_hdu3/ticket_history_attachment');
$attach->setFile($_FILES['attachments']['name'][$key], file_get_contents($_FILES['attachments']['tmp_name'][$key]));
$attachments[] = $attach;
}
}
return $attachments;
}
}