MageTracking_TicketSystem - Version 1.2.1

Version Notes

First stable release 1.2.1

Download this release

Release Info

Developer Clarion Tech
Extension MageTracking_TicketSystem
Version 1.2.1
Comparing to
See all releases


Version 1.2.1

Files changed (73) hide show
  1. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Cat.php +33 -0
  2. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Cat/Cat.php +43 -0
  3. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Cat/Edit.php +47 -0
  4. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Cat/Edit/Form.php +38 -0
  5. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Cat/Edit/Tab/Form.php +99 -0
  6. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Cat/Edit/Tabs.php +44 -0
  7. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Cat/Grid.php +113 -0
  8. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem.php +33 -0
  9. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Cat.php +44 -0
  10. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Edit.php +111 -0
  11. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Edit/Form.php +40 -0
  12. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Edit/Newtabs.php +45 -0
  13. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Edit/Tab/Form.php +218 -0
  14. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Edit/Tab/Newform.php +131 -0
  15. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Edit/Tabs.php +45 -0
  16. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Grid.php +147 -0
  17. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Mail.php +43 -0
  18. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Mail/Form.php +39 -0
  19. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Mail/Tab/Form.php +163 -0
  20. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Mail/Tabs.php +46 -0
  21. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Setting.php +41 -0
  22. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Setting/Form.php +40 -0
  23. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Setting/Tab/Form.php +193 -0
  24. app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Setting/Tabs.php +46 -0
  25. app/code/community/MageTracking/TicketSystem/Block/Cat.php +39 -0
  26. app/code/community/MageTracking/TicketSystem/Block/Ticketsystem.php +40 -0
  27. app/code/community/MageTracking/TicketSystem/Block/Ticketsystem/Edit.php +132 -0
  28. app/code/community/MageTracking/TicketSystem/Block/Ticketsystem/Navigation.php +9 -0
  29. app/code/community/MageTracking/TicketSystem/Block/Ticketsystem/View.php +54 -0
  30. app/code/community/MageTracking/TicketSystem/Helper/Data.php +102 -0
  31. app/code/community/MageTracking/TicketSystem/Helper/Mail.php +159 -0
  32. app/code/community/MageTracking/TicketSystem/Helper/Mail_data.php +150 -0
  33. app/code/community/MageTracking/TicketSystem/Helper/Phpmailer.php +1897 -0
  34. app/code/community/MageTracking/TicketSystem/Helper/Smtp.php +1113 -0
  35. app/code/community/MageTracking/TicketSystem/Helper/Ticket.php +789 -0
  36. app/code/community/MageTracking/TicketSystem/Helper/TicketFunctions.php +550 -0
  37. app/code/community/MageTracking/TicketSystem/Helper/email-example.html +174 -0
  38. app/code/community/MageTracking/TicketSystem/Model/Answers.php +11 -0
  39. app/code/community/MageTracking/TicketSystem/Model/Cats.php +12 -0
  40. app/code/community/MageTracking/TicketSystem/Model/Groups.php +14 -0
  41. app/code/community/MageTracking/TicketSystem/Model/Mail.php +14 -0
  42. app/code/community/MageTracking/TicketSystem/Model/Messages.php +14 -0
  43. app/code/community/MageTracking/TicketSystem/Model/Mysql4/Answers.php +12 -0
  44. app/code/community/MageTracking/TicketSystem/Model/Mysql4/Answers/Collection.php +10 -0
  45. app/code/community/MageTracking/TicketSystem/Model/Mysql4/Cats.php +12 -0
  46. app/code/community/MageTracking/TicketSystem/Model/Mysql4/Cats/Collection.php +10 -0
  47. app/code/community/MageTracking/TicketSystem/Model/Mysql4/Groups.php +12 -0
  48. app/code/community/MageTracking/TicketSystem/Model/Mysql4/Groups/Collection.php +10 -0
  49. app/code/community/MageTracking/TicketSystem/Model/Mysql4/Mail.php +12 -0
  50. app/code/community/MageTracking/TicketSystem/Model/Mysql4/Mail/Collection.php +10 -0
  51. app/code/community/MageTracking/TicketSystem/Model/Mysql4/Messages.php +24 -0
  52. app/code/community/MageTracking/TicketSystem/Model/Mysql4/Settings.php +12 -0
  53. app/code/community/MageTracking/TicketSystem/Model/Mysql4/Settings/Collection.php +10 -0
  54. app/code/community/MageTracking/TicketSystem/Model/Mysql4/Ticketsystem.php +12 -0
  55. app/code/community/MageTracking/TicketSystem/Model/Mysql4/Ticketsystem/Collection.php +10 -0
  56. app/code/community/MageTracking/TicketSystem/Model/Settings.php +14 -0
  57. app/code/community/MageTracking/TicketSystem/Model/Status.php +26 -0
  58. app/code/community/MageTracking/TicketSystem/Model/Ticketsystem.php +147 -0
  59. app/code/community/MageTracking/TicketSystem/controllers/Adminhtml/CatController.php +180 -0
  60. app/code/community/MageTracking/TicketSystem/controllers/Adminhtml/MailController.php +117 -0
  61. app/code/community/MageTracking/TicketSystem/controllers/Adminhtml/SettingController.php +121 -0
  62. app/code/community/MageTracking/TicketSystem/controllers/Adminhtml/TicketsystemController.php +676 -0
  63. app/code/community/MageTracking/TicketSystem/controllers/IndexController.php +371 -0
  64. app/code/community/MageTracking/TicketSystem/etc/config.xml +191 -0
  65. app/code/community/MageTracking/TicketSystem/sql/ticketsystem_setup/mysql4-install-1.2.1.php +181 -0
  66. app/design/adminhtml/default/default/layout/ticketsystem.xml +21 -0
  67. app/design/frontend/base/default/layout/ticketsystem.xml +42 -0
  68. app/design/frontend/base/default/template/ticketsystem/add.phtml +155 -0
  69. app/design/frontend/base/default/template/ticketsystem/edit.phtml +109 -0
  70. app/design/frontend/base/default/template/ticketsystem/navigation.phtml +42 -0
  71. app/design/frontend/base/default/template/ticketsystem/view.phtml +75 -0
  72. app/etc/modules/MageTracking_TicketSystem.xml +9 -0
  73. package.xml +18 -0
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Cat.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+ class MageTracking_TicketSystem_Block_Adminhtml_Cat extends Mage_Adminhtml_Block_Widget_Grid_Container
24
+ {
25
+ public function __construct()
26
+ {
27
+ $this->_controller = 'adminhtml_cat';
28
+ $this->_blockGroup = 'ticketsystem';
29
+ $this->_headerText = Mage::helper('ticketsystem')->__('View Departments');
30
+ $this->_addButtonLabel = Mage::helper('ticketsystem')->__('New Department');
31
+ parent::__construct();
32
+ }
33
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Cat/Cat.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+ class MageTracking_TicketSystem_Block_Adminhtml_Cat extends Mage_Adminhtml_Block_Widget_Form_Container
23
+ {
24
+ public function __construct()
25
+ {
26
+ parent::__construct();
27
+
28
+ $this->_objectId = 'id';
29
+ $this->_blockGroup = 'ticketsystem';
30
+ $this->_controller = 'adminhtml_cat';
31
+
32
+ $this->_updateButton('save', 'label', Mage::helper('ticketsystem')->__('Save Department'));
33
+ $this->_updateButton('delete', 'label', Mage::helper('ticketsystem')->__('Delete Department'));
34
+
35
+ }
36
+
37
+ public function getHeaderText()
38
+ {
39
+ if( Mage::registry('cat_data') ) {
40
+ return Mage::helper('ticketsystem')->__("Edit Department");
41
+ }
42
+ }
43
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Cat/Edit.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+ class MageTracking_TicketSystem_Block_Adminhtml_Cat_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
23
+ {
24
+ public function __construct()
25
+ {
26
+ parent::__construct();
27
+
28
+ $this->_objectId = 'id';
29
+ $this->_blockGroup = 'ticketsystem';
30
+ $this->_controller = 'adminhtml_ticketsystem';
31
+
32
+ $this->_updateButton('delete', 'label', Mage::helper('ticketsystem')->__('Delete Department'));
33
+
34
+ $this->_updateButton('save', 'label', Mage::helper('ticketsystem')->__('Save Department'));
35
+
36
+ }
37
+
38
+
39
+ public function getHeaderText()
40
+ {
41
+ if( Mage::registry('cat_data') && Mage::registry('cat_data')->getId() ) {
42
+ return Mage::helper('ticketsystem')->__("Edit Department '%s'", Mage::registry('cat_data')->getData('name'));
43
+ } else {
44
+ return Mage::helper('ticketsystem')->__('New Department');
45
+ }
46
+ }
47
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Cat/Edit/Form.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+ class MageTracking_TicketSystem_Block_Adminhtml_Cat_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
23
+ {
24
+ protected function _prepareForm()
25
+ {
26
+ $form = new Varien_Data_Form(array(
27
+ 'id' => 'cat_form',
28
+ 'action' => $this->getUrl('*/*/save'), array('id' => $this->getRequest()->getParam('id')),
29
+ 'method' => 'post',
30
+ 'enctype' => 'multipart/form-data'
31
+ )
32
+ );
33
+
34
+ $form->setUseContainer(true);
35
+ $this->setForm($form);
36
+ return parent::_prepareForm();
37
+ }
38
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Cat/Edit/Tab/Form.php ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+ class MageTracking_TicketSystem_Block_Adminhtml_Cat_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form
23
+ {
24
+
25
+ protected function _prepareForm()
26
+ {
27
+ $form = new Varien_Data_Form();
28
+ $this->setForm($form);
29
+ $fieldset = $form->addFieldset('cat_form', array('legend'=>Mage::helper('ticketsystem')->__('Edit Department')));
30
+
31
+ $fieldset->addField('name', 'text', array(
32
+ 'label' => Mage::helper('ticketsystem')->__('Name'),
33
+ 'class' => 'required-entry',
34
+ 'required' => true,
35
+ 'name' => 'name',
36
+ ));
37
+
38
+ /*$fieldset->addField('pophost', 'text', array(
39
+ 'label' => Mage::helper('ticketsystem')->__('Pop 3 Host'),
40
+ 'class' => 'required-entry',
41
+ 'required' => true,
42
+ 'name' => 'pophost',
43
+ ));
44
+
45
+ $fieldset->addField('popuser', 'text', array(
46
+ 'label' => Mage::helper('ticketsystem')->__('Pop 3 User'),
47
+ 'class' => 'required-entry',
48
+ 'required' => true,
49
+ 'name' => 'popuser',
50
+ ));
51
+
52
+ $fieldset->addField('poppass', 'password', array(
53
+ 'label' => Mage::helper('ticketsystem')->__('Pop 3 Password'),
54
+ 'class' => 'required-entry',
55
+ 'required' => true,
56
+ 'name' => 'poppass',
57
+ ));*/
58
+
59
+
60
+ $fieldset->addField('email', 'text', array(
61
+ 'label' => Mage::helper('ticketsystem')->__('Email'),
62
+ 'class' => 'required-entry',
63
+ 'required' => true,
64
+ 'name' => 'email',
65
+ ));
66
+
67
+ $fieldset->addField('signature', 'textarea', array(
68
+ 'label' => Mage::helper('ticketsystem')->__('Signature'),
69
+ 'class' => 'required-entry',
70
+ 'required' => true,
71
+ 'name' => 'signature',
72
+ 'style' => 'width: 600px',
73
+ ));
74
+
75
+ $fieldset->addField('hidden', 'hidden', array(
76
+ 'label' => Mage::helper('ticketsystem')->__('Hidden'),
77
+ 'name' => 'hidden',
78
+ ));
79
+
80
+ $fieldset->addField('reply_method', 'select', array(
81
+ 'name' => 'reply_method',
82
+ 'label' => Mage::helper('ticketsystem')->__('Reply Method'),
83
+ 'title' => Mage::helper('ticketsystem')->__('Reply Method'),
84
+ 'class' => 'input-select',
85
+ 'style' => 'width: 250px',
86
+ 'options' => array('url' => Mage::helper('ticketsystem')->__('Send URL to load ticket'), 'message' => Mage::helper('ticketsystem')->__('Show message in email')),
87
+ ));
88
+
89
+
90
+ if ( Mage::getSingleton('adminhtml/session')->getCatData() )
91
+ {
92
+ $form->setValues(Mage::getSingleton('adminhtml/session')->getCatData());
93
+ Mage::getSingleton('adminhtml/session')->setCatData(null);
94
+ } elseif ( Mage::registry('cat_data') ) {
95
+ $form->setValues(Mage::registry('cat_data')->getData());
96
+ }
97
+ return parent::_prepareForm();
98
+ }
99
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Cat/Edit/Tabs.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+ class MageTracking_TicketSystem_Block_Adminhtml_Cat_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
23
+ {
24
+
25
+ public function __construct()
26
+ {
27
+ $this->setId('cat_tabs');
28
+ $this->setDestElementId('edit_form');
29
+ $this->setTitle(Mage::helper('ticketsystem')->__('Departments'));
30
+ parent::__construct();
31
+
32
+ }
33
+
34
+ protected function _beforeToHtml()
35
+ {
36
+ $this->addTab('form_section', array(
37
+ 'label' => Mage::helper('ticketsystem')->__('Departments'),
38
+ 'title' => Mage::helper('ticketsystem')->__('Departments'),
39
+ 'content' => $this->getLayout()->createBlock('ticketsystem/adminhtml_cat_edit_tab_form')->toHtml(),
40
+ ));
41
+
42
+ return parent::_beforeToHtml();
43
+ }
44
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Cat/Grid.php ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+ class MageTracking_TicketSystem_Block_Adminhtml_Cat_Grid extends Mage_Adminhtml_Block_Widget_Grid
23
+ {
24
+ public function __construct()
25
+ {
26
+ parent::__construct();
27
+ $this->setId('catGrid');
28
+ $this->setDefaultSort('name');
29
+ $this->setDefaultDir('ASC');
30
+ $this->setSaveParametersInSession(true);
31
+ }
32
+
33
+ protected function _prepareCollection()
34
+ {
35
+ $collection = Mage::getModel('ticketsystem/cats')->getCollection();
36
+ $this->setCollection($collection);
37
+ return parent::_prepareCollection();
38
+ }
39
+
40
+
41
+ protected function _prepareColumns()
42
+ {
43
+ $this->addColumn('ID', array(
44
+ 'header' => Mage::helper('ticketsystem')->__('ID'),
45
+ 'align' =>'right',
46
+ 'width' => '50px',
47
+ 'index' => 'ID',
48
+ ));
49
+
50
+ $this->addColumn('name', array(
51
+ 'header' => Mage::helper('ticketsystem')->__('Name'),
52
+ 'align' =>'left',
53
+ 'index' => 'name',
54
+ ));
55
+
56
+ $this->addColumn('email', array(
57
+ 'header' => Mage::helper('ticketsystem')->__('Email'),
58
+ 'align' =>'left',
59
+ 'index' => 'email',
60
+ ));
61
+
62
+ $this->addColumn('signature', array(
63
+ 'header' => Mage::helper('ticketsystem')->__('Signature'),
64
+ 'align' =>'left',
65
+ 'index' => 'signature',
66
+ ));
67
+
68
+ $this->addColumn('Action',
69
+ array(
70
+ 'header' => Mage::helper('ticketsystem')->__('Action'),
71
+ 'width' => '100',
72
+ 'type' => 'action',
73
+ 'getter' => 'getId',
74
+ 'actions' => array(
75
+ array(
76
+ 'caption' => Mage::helper('ticketsystem')->__('Edit'),
77
+ 'url' => array('base'=> '*/*/edit'),
78
+ 'field' => 'id'
79
+ ),
80
+ ),
81
+ 'filter' => false,
82
+ 'sortable' => false,
83
+ 'index' => 'stores',
84
+ 'is_system' => true,
85
+ ));
86
+
87
+ $this->addExportType('*/*/exportCsv', Mage::helper('ticketsystem')->__('CSV'));
88
+ $this->addExportType('*/*/exportXml', Mage::helper('ticketsystem')->__('XML'));
89
+
90
+ return parent::_prepareColumns();
91
+ }
92
+
93
+ protected function _prepareMassaction()
94
+ {
95
+ $this->setMassactionIdField('ticketsystem_id');
96
+ $this->getMassactionBlock()->setFormFieldName('ticketsystem');
97
+
98
+
99
+ $this->getMassactionBlock()->addItem('delete', array(
100
+ 'label' => Mage::helper('ticketsystem')->__('Delete'),
101
+ 'url' => $this->getUrl('*/*/massDelete'),
102
+ 'confirm' => Mage::helper('ticketsystem')->__('Are you sure?')
103
+ ));
104
+
105
+ return $this;
106
+ }
107
+
108
+ public function getRowUrl($row)
109
+ {
110
+ return $this->getUrl('*/*/edit', array('id' => $row->getId()));
111
+ }
112
+
113
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem extends Mage_Adminhtml_Block_Widget_Grid_Container
24
+ {
25
+ public function __construct()
26
+ {
27
+ $this->_controller = 'adminhtml_ticketsystem';
28
+ $this->_blockGroup = 'ticketsystem';
29
+ $this->_headerText = Mage::helper('ticketsystem')->__('View Tickets');
30
+ $this->_addButtonLabel = Mage::helper('ticketsystem')->__('New Ticket');
31
+ parent::__construct();
32
+ }
33
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Cat.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Cat extends Mage_Adminhtml_Block_Widget_Form_Container
24
+ {
25
+ public function __construct()
26
+ {
27
+ parent::__construct();
28
+
29
+ $this->_objectId = 'id';
30
+ $this->_blockGroup = 'cat';
31
+ $this->_controller = 'adminhtml_cat';
32
+
33
+ $this->_updateButton('save', 'label', Mage::helper('ticketsystem')->__('Save Department'));
34
+ $this->_updateButton('delete', 'label', Mage::helper('ticketsystem')->__('Delete Department'));
35
+
36
+ }
37
+
38
+ public function getHeaderText()
39
+ {
40
+ if( Mage::registry('cat_data') ) {
41
+ return Mage::helper('ticketsystem')->__("Edit Department");
42
+ }
43
+ }
44
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Edit.php ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 1.0
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+
24
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
25
+ {
26
+ public function __construct()
27
+ {
28
+ parent::__construct();
29
+
30
+ $this->_objectId = 'id';
31
+ $this->_blockGroup = 'ticketsystem';
32
+ $this->_controller = 'adminhtml_ticketsystem';
33
+
34
+ $this->_updateButton('delete', 'label', Mage::helper('ticketsystem')->__('Delete Ticket'));
35
+
36
+ if( $this->getId() )
37
+ $this->_updateButton('save', 'label', Mage::helper('ticketsystem')->__('Reply to Message'));
38
+ else
39
+ $this->_updateButton('save', 'label', Mage::helper('ticketsystem')->__('Save Ticket'));
40
+
41
+
42
+ if($this->getId() )
43
+ $this->_addButton('transfer_cats', array(
44
+ 'label' => Mage::helper('ticketsystem')->__('Transfer Department'),
45
+ 'class' => 'transfer_cats',
46
+ 'onclick' => 'transferCats(\''. $this->getUrl('*/*/transcat', array("id" => $this->getRequest()->getParam("id"))) .'\')',
47
+ 'level' => -1
48
+ ), 100);
49
+
50
+ if($this->getId() )
51
+ $this->_addButton('newstat', array(
52
+ 'label' => Mage::helper('ticketsystem')->__('Set New Status'),
53
+ 'class' => 'newstat',
54
+ 'onclick' => 'newStatus(\''. $this->getUrl('*/*/setstat', array("id" => $this->getRequest()->getParam("id"))) .'\')',
55
+ 'level' => -1
56
+ ), 100);
57
+
58
+
59
+
60
+ $this->_formScripts[] = "
61
+
62
+
63
+ function newStatus(url){
64
+ var newStatus= document.forms['edit_form'].new_status.value;
65
+ if (newStatus =='0'){
66
+ alert('". Mage::helper('ticketsystem')->__('Please select a status'). "');
67
+ }else{
68
+ document.forms['edit_form'].action=url+'new_status/'+newStatus+'/';
69
+ document.forms['edit_form'].submit();
70
+ }
71
+ }
72
+
73
+ function transferReps(url){
74
+ var representative= document.forms['edit_form'].rep.value;
75
+ if (representative =='0'){
76
+ alert('". Mage::helper('ticketsystem')->__('Please select a representative'). "');
77
+ }else{
78
+ document.forms['edit_form'].action=url+'reps/'+representative+'/';
79
+ document.forms['edit_form'].submit();
80
+ }
81
+ }
82
+
83
+ function transferCats(url){
84
+ var category= document.forms['edit_form'].cat.value;
85
+ var cats_message= document.forms['edit_form'].trans_msg.value;
86
+ var cat_alert= document.forms['edit_form'].cat_alert.value;
87
+ if (category =='0'){
88
+ alert('". Mage::helper('ticketsystem')->__('Please select a department'). "');
89
+ }else{
90
+ document.forms['edit_form'].action=url+'cats/'+category+'/'+'message/'+ cats_message +'/cat_alert/'+cat_alert+'/';
91
+ document.forms['edit_form'].submit();
92
+ }
93
+ }
94
+ ";
95
+ }
96
+
97
+
98
+ public function getId()
99
+ {
100
+ return (Mage::registry('ticketsystem_data') && Mage::registry('ticketsystem_data')->getId());
101
+ }
102
+
103
+ public function getHeaderText()
104
+ {
105
+ if( $this->getId() ) {
106
+ return Mage::helper('ticketsystem')->__("Edit Ticket '%s'", $this->htmlEscape(Mage::registry('ticketsystem_data')->getId()));
107
+ } else {
108
+ return Mage::helper('ticketsystem')->__('New Ticket');
109
+ }
110
+ }
111
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Edit/Form.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
23
+ {
24
+ protected function _prepareForm()
25
+ {
26
+ $form = new Varien_Data_Form(array(
27
+ 'id' => 'edit_form',
28
+ 'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
29
+ 'method' => 'post',
30
+ 'enctype' => 'multipart/form-data'
31
+ )
32
+ );
33
+
34
+ $form->setUseContainer(true);
35
+ $this->setForm($form);
36
+ return parent::_prepareForm();
37
+ }
38
+
39
+
40
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Edit/Newtabs.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Edit_NewTabs extends Mage_Adminhtml_Block_Widget_Tabs
23
+ {
24
+
25
+ public function __construct()
26
+ {
27
+ parent::__construct();
28
+ $this->setId('ticketsystem_tabs');
29
+ $this->setDestElementId('edit_form');
30
+ $this->setTitle(Mage::helper('ticketsystem')->__('Ticket Information'));
31
+ }
32
+
33
+ protected function _beforeToHtml()
34
+ {
35
+ $this->addTab('form_section', array(
36
+ 'label' => Mage::helper('ticketsystem')->__('Ticket Information'),
37
+ 'title' => Mage::helper('ticketsystem')->__('Ticket Information'),
38
+ 'content' => $this->getLayout()->createBlock('ticketsystem/adminhtml_ticketsystem_edit_tab_newform')->toHtml(),
39
+ ));
40
+
41
+ return parent::_beforeToHtml();
42
+ }
43
+
44
+
45
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Edit/Tab/Form.php ADDED
@@ -0,0 +1,218 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form
23
+ {
24
+ protected function _prepareForm()
25
+ {
26
+ $form = new Varien_Data_Form();
27
+ $this->setForm($form);
28
+ $fieldset = $form->addFieldset('ticketsystem_form', array('legend'=>Mage::helper('ticketsystem')->__('Ticket Information')));
29
+
30
+ $fieldset->addField('ID', 'label', array(
31
+ 'label' => Mage::helper('ticketsystem')->__('Ticket ID'),
32
+ 'id' => 'ID',
33
+ 'name' => 'ID',
34
+ ));
35
+ $fieldset->addField('hidden_ID', 'hidden', array(
36
+ 'label' => Mage::helper('ticketsystem')->__('Ticket ID'),
37
+ 'id' => 'hidden_ID',
38
+ 'name' => 'hidden_ID',
39
+ ));
40
+
41
+ $fieldset->addField('status', 'label', array(
42
+ 'name' => 'status',
43
+ 'label' => Mage::helper('ticketsystem')->__('Status'),
44
+ 'id' => 'status',
45
+ 'title' => Mage::helper('ticketsystem')->__('Status'),
46
+ ));
47
+ $fieldset->addField('hidden_status', 'hidden', array(
48
+ 'name' => 'hidden_status',
49
+ 'label' => Mage::helper('ticketsystem')->__('Status'),
50
+ 'id' => 'hidden_status',
51
+ 'title' => Mage::helper('ticketsystem')->__('Status'),
52
+ ));
53
+
54
+ $fieldset->addField('subject', 'label', array(
55
+ 'label' => Mage::helper('ticketsystem')->__('Subject'),
56
+ 'id' => 'subject',
57
+ 'name' => 'subject',
58
+ ));
59
+ $fieldset->addField('hidden_subject', 'hidden', array(
60
+ 'label' => Mage::helper('ticketsystem')->__('Subject'),
61
+ 'id' => 'hidden_subject',
62
+ 'name' => 'hidden_subject',
63
+ ));
64
+
65
+ $fieldset->addField('name', 'label', array(
66
+ 'label' => Mage::helper('ticketsystem')->__('Name'),
67
+ 'id' => 'name',
68
+ 'name' => 'name',
69
+ ));
70
+ $fieldset->addField('hidden_name', 'hidden', array(
71
+ 'label' => Mage::helper('ticketsystem')->__('Name'),
72
+ 'id' => 'hidden_name',
73
+ 'name' => 'hidden_name',
74
+ ));
75
+
76
+ $fieldset->addField('email', 'label', array(
77
+ 'label' => Mage::helper('ticketsystem')->__('Email'),
78
+ 'id' => 'email',
79
+ 'name' => 'email',
80
+ ));
81
+ $fieldset->addField('hidden_email', 'hidden', array(
82
+ 'label' => Mage::helper('ticketsystem')->__('Email'),
83
+ 'id' => 'hidden_email',
84
+ 'name' => 'hidden_email',
85
+ ));
86
+
87
+ $fieldset->addField('phone', 'label', array(
88
+ 'label' => Mage::helper('ticketsystem')->__('Phone'),
89
+ 'id' => 'phone',
90
+ 'name' => 'phone',
91
+ ));
92
+ $fieldset->addField('hidden_phone', 'hidden', array(
93
+ 'label' => Mage::helper('ticketsystem')->__('Phone'),
94
+ 'id' => 'hidden_phone',
95
+ 'phone' => 'hidden_phone',
96
+ ));
97
+
98
+ $fieldset->addField('orders', 'label', array(
99
+ 'label' => Mage::helper('ticketsystem')->__('Order'),
100
+ 'id' => 'orders',
101
+ 'name' => 'orders',
102
+ ));
103
+ $fieldset->addField('hidden_order', 'hidden', array(
104
+ 'label' => Mage::helper('ticketsystem')->__('Order'),
105
+ 'id' => 'hidden_order',
106
+ 'phone' => 'hidden_order',
107
+ ));
108
+
109
+ $fieldset->addField('priority', 'select', array(
110
+ 'name' => 'priority',
111
+ 'label' => Mage::helper('ticketsystem')->__('Priority'),
112
+ 'id' => 'priority',
113
+ 'title' => Mage::helper('ticketsystem')->__('Priority'),
114
+ 'class' => 'input-select',
115
+ 'style' => 'width: 250px',
116
+ 'options' => array('1' => Mage::helper('ticketsystem')->__('Low'), '2' => Mage::helper('ticketsystem')->__('Medium'), '3' => Mage::helper('ticketsystem')->__('High')),
117
+ ));
118
+
119
+ $fieldset->addField('cat', 'select', array(
120
+ 'name' => 'cat',
121
+ 'label' => Mage::helper('ticketsystem')->__('Department'),
122
+ 'id' => 'cat',
123
+ 'title' => Mage::helper('ticketsystem')->__('Department'),
124
+ 'class' => 'input-select',
125
+ 'style' => 'width: 250px',
126
+ 'options' => $this->getCategories(),
127
+ ));
128
+
129
+ if ((Mage::registry('ticketsystem_data')->getData('trans_note'))){
130
+ $fieldset->addField('trans_note', 'textarea', array(
131
+ 'label' => Mage::helper('ticketsystem')->__('Transfer Note'),
132
+ 'required' => false,
133
+ 'name' => 'trans_note',
134
+ 'style' => 'width: 600px; rows:5; background:#f2f2f2; height: 50px;',
135
+ 'readonly' => 'readonly',
136
+ ));
137
+ }
138
+ $fieldset->addField('trans_msg', 'textarea', array(
139
+ 'label' => Mage::helper('ticketsystem')->__('Optional Department Message'),
140
+ 'required' => false,
141
+ 'name' => 'trans_msg',
142
+ 'style' => 'width: 600px; height: 60px;',
143
+ ));
144
+ $fieldset->addField('cat_alert', 'checkbox', array(
145
+ 'name' => 'cat_alert',
146
+ 'label' => Mage::helper('ticketsystem')->__('Department Send Alert'),
147
+ 'class' => 'attribute-checkbox',
148
+ ));
149
+
150
+ $fieldset->addField('message', 'textarea', array(
151
+ 'label' => Mage::helper('ticketsystem')->__('Message'),
152
+ 'required' => false,
153
+ 'name' => 'message',
154
+ 'class' => 'input-select',
155
+ 'style' => 'width: 600px; background:#f2f2f2; height: 120px;',
156
+ 'readonly' => 'readonly',
157
+ ));
158
+
159
+ $statuses= Mage::getSingleton('ticketsystem/status');
160
+
161
+ $fieldset->addField('new_status', 'select', array(
162
+ 'name' => 'new_status',
163
+ 'label' => Mage::helper('ticketsystem')->__('New Status'),
164
+ 'id' => 'new_status',
165
+ 'title' => Mage::helper('ticketsystem')->__('New Status'),
166
+ 'class' => 'input-select',
167
+ 'style' => 'width: 150px',
168
+ 'options' => $statuses->getOptionArray(),
169
+ ));
170
+
171
+ $fieldset->addField('answer', 'textarea', array(
172
+ 'label' => Mage::helper('ticketsystem')->__('Answer'),
173
+ 'required' => false,
174
+ 'name' => 'answer',
175
+ 'style' => 'width: 600px; height: 120px;',
176
+ ));
177
+
178
+
179
+ if ( Mage::getSingleton('adminhtml/session')->getTicketSystemData() )
180
+ {
181
+ $form->setValues(Mage::getSingleton('adminhtml/session')->getTicketSystemData());
182
+ Mage::getSingleton('adminhtml/session')->setTicketSystemData(null);
183
+ } elseif ( Mage::registry('ticketsystem_data') ) {
184
+ $form->setValues(Mage::registry('ticketsystem_data')->getData());
185
+ }
186
+ return parent::_prepareForm();
187
+ }
188
+
189
+ public function getRepresantatives()
190
+ {
191
+ //$reps=Mage::registry('ticketsystem_represantatives');
192
+ $model_reps= Mage::getModel('admin/user');
193
+ $return_array=array();
194
+
195
+
196
+ foreach ($model_reps->getCollection()->load() as $key=>$val) {
197
+ $name=$val->getData('firstname').' '.$val->getData('lastname');
198
+ $return_array[$val->getData('user_id')]= $name;
199
+ }
200
+
201
+ return $return_array;
202
+ }
203
+
204
+ public function getCategories() {
205
+ $cats=Mage::registry('ticketsystem_categories');
206
+ $return_array=array();
207
+ array_unshift($return_array,'');
208
+ if ($cats)
209
+ foreach ($cats as $key=>$val){
210
+ if ($val){
211
+ $name=$val->getData('name');
212
+ $return_array[$val->getData('ID')]= $name;
213
+ }
214
+ }
215
+ return $return_array;
216
+ }
217
+
218
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Edit/Tab/Newform.php ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Edit_Tab_NewForm extends Mage_Adminhtml_Block_Widget_Form
23
+ {
24
+ protected function _prepareForm()
25
+ {
26
+ $form = new Varien_Data_Form();
27
+ $this->setForm($form);
28
+ $fieldset = $form->addFieldset('ticketsystem_form', array('legend'=>Mage::helper('ticketsystem')->__('Ticket information')));
29
+
30
+ $fieldset->addField('name', 'text', array(
31
+ 'label' => Mage::helper('ticketsystem')->__('Name'),
32
+ 'id' => 'name',
33
+ 'name' => 'name',
34
+ 'class' => 'required-entry',
35
+ 'required' => true,
36
+ ));
37
+
38
+ $fieldset->addField('subject', 'text', array(
39
+ 'label' => Mage::helper('ticketsystem')->__('Subject'),
40
+ 'id' => 'subject',
41
+ 'name' => 'subject',
42
+ 'class' => 'required-entry',
43
+ 'required' => true,
44
+ ));
45
+
46
+ $fieldset->addField('email', 'text', array(
47
+ 'label' => Mage::helper('ticketsystem')->__('Email'),
48
+ 'id' => 'email',
49
+ 'name' => 'email',
50
+ 'class' => 'required-entry',
51
+ 'required' => true,
52
+ ));
53
+
54
+ $fieldset->addField('phone', 'text', array(
55
+ 'label' => Mage::helper('ticketsystem')->__('Phone'),
56
+ 'id' => 'phone',
57
+ 'name' => 'phone',
58
+ 'required' => false,
59
+ ));
60
+
61
+ $fieldset->addField('orders', 'text', array(
62
+ 'label' => Mage::helper('ticketsystem')->__('Order'),
63
+ 'id' => 'order',
64
+ 'name' => 'orders',
65
+ 'required' => false,
66
+ ));
67
+
68
+ $fieldset->addField('priority', 'select', array(
69
+ 'name' => 'priority',
70
+ 'label' => Mage::helper('ticketsystem')->__('Priority'),
71
+ 'id' => 'priority',
72
+ 'title' => Mage::helper('ticketsystem')->__('Priority'),
73
+ 'class' => 'required-entry',
74
+ 'style' => 'width: 250px',
75
+ 'required' => true,
76
+ 'options' => array('1' => Mage::helper('ticketsystem')->__('Low'), '2' => Mage::helper('ticketsystem')->__('Medium'), '3' => Mage::helper('ticketsystem')->__('High')),
77
+ ));
78
+
79
+ $fieldset->addField('cat', 'select', array(
80
+ 'name' => 'cat',
81
+ 'label' => Mage::helper('ticketsystem')->__('Department'),
82
+ 'id' => 'cat',
83
+ 'title' => Mage::helper('ticketsystem')->__('Department'),
84
+ 'class' => 'input-select',
85
+ 'style' => 'width: 250px',
86
+ 'required' => true,
87
+ 'options' => $this->getCategories(),
88
+ ));
89
+
90
+
91
+ $fieldset->addField('message', 'textarea', array(
92
+ 'label' => Mage::helper('ticketsystem')->__('Message'),
93
+ 'required' => false,
94
+ 'name' => 'message',
95
+ 'style' => 'width: 600px',
96
+ 'class' => 'required-entry',
97
+ 'required' => true,
98
+ ));
99
+
100
+
101
+ if ( Mage::getSingleton('adminhtml/session')->getTicketSystemData() )
102
+ {
103
+ $form->setValues(Mage::getSingleton('adminhtml/session')->getTicketSystemData());
104
+ Mage::getSingleton('adminhtml/session')->setTicketSystemData(null);
105
+ } elseif ( Mage::registry('ticketsystem_data') ) {
106
+ $form->setValues(Mage::registry('ticketsystem_data')->getData());
107
+ }
108
+ return parent::_prepareForm();
109
+ }
110
+
111
+ public function getRepresantatives() {
112
+ $reps=Mage::registry('ticketsystem_represantatives');
113
+ $return_array=array();
114
+ foreach ($reps as $key=>$val){
115
+ $name=$val->getData('name');
116
+ $return_array[$key]= $name;
117
+ }
118
+ array_unshift($return_array,'');
119
+ return $return_array;
120
+ }
121
+
122
+ public function getCategories() {
123
+ $cats=Mage::registry('ticketsystem_categories');
124
+ $return_array=array();
125
+ foreach ($cats as $key=>$val){
126
+ $name=$val->getData('name');
127
+ $return_array[$key]= $name;
128
+ }
129
+ return $return_array;
130
+ }
131
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Edit/Tabs.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
23
+ {
24
+
25
+ public function __construct()
26
+ {
27
+ parent::__construct();
28
+ $this->setId('ticketsystem_tabs');
29
+ $this->setDestElementId('edit_form');
30
+ $this->setTitle(Mage::helper('ticketsystem')->__('Ticket Information'));
31
+ }
32
+
33
+ protected function _beforeToHtml()
34
+ {
35
+ $this->addTab('form_section', array(
36
+ 'label' => Mage::helper('ticketsystem')->__('Ticket Information'),
37
+ 'title' => Mage::helper('ticketsystem')->__('Ticket Information'),
38
+ 'content' => $this->getLayout()->createBlock('ticketsystem/adminhtml_ticketsystem_edit_tab_form')->toHtml(),
39
+ ));
40
+
41
+ return parent::_beforeToHtml();
42
+ }
43
+
44
+
45
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Grid.php ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Grid extends Mage_Adminhtml_Block_Widget_Grid
24
+ {
25
+ public function __construct()
26
+ {
27
+ parent::__construct();
28
+ $this->setId('ticketsystemGrid');
29
+ $this->setDefaultSort('timestamp');
30
+ $this->setDefaultDir('ASC');
31
+ $this->setSaveParametersInSession(true);
32
+ }
33
+
34
+
35
+ protected function _prepareCollection()
36
+ {
37
+ $collection = Mage::getModel('ticketsystem/ticketsystem')->getCollection();
38
+ $this->setCollection($collection);
39
+ return parent::_prepareCollection();
40
+ }
41
+
42
+ protected function _prepareColumns()
43
+ {
44
+ $this->addColumn('timestamp', array(
45
+ 'header' => Mage::helper('ticketsystem')->__('Timestamp'),
46
+ 'align' =>'left',
47
+ 'index' => 'timestamp',
48
+ 'width' => '125px',
49
+ ));
50
+
51
+ $this->addColumn('subject', array(
52
+ 'header' => Mage::helper('ticketsystem')->__('Subject'),
53
+ 'align' =>'left',
54
+ 'index' => 'subject',
55
+ 'width' => '200px',
56
+ ));
57
+
58
+ $this->addColumn('ID', array(
59
+ 'header' => Mage::helper('ticketsystem')->__('ID'),
60
+ 'align' =>'right',
61
+ 'width' => '70px',
62
+ 'index' => 'ID',
63
+ ));
64
+
65
+ $this->addColumn('name', array(
66
+ 'header' => Mage::helper('ticketsystem')->__('Name'),
67
+ 'align' =>'left',
68
+ 'index' => 'name',
69
+ 'width' => '200px',
70
+ ));
71
+
72
+ $this->addColumn('email', array(
73
+ 'header' => Mage::helper('ticketsystem')->__('Email'),
74
+ 'width' => '250px',
75
+ 'index' => 'email',
76
+ ));
77
+
78
+ $statuses= Mage::getSingleton('ticketsystem/status')->getOptionArray();
79
+ $this->addColumn('status', array(
80
+ 'header' => Mage::helper('ticketsystem')->__('Status'),
81
+ 'align' => 'left',
82
+ 'width' => '150px',
83
+ 'index' => 'status',
84
+ 'type' => 'options',
85
+ 'options' => $statuses,
86
+ ));
87
+
88
+ $this->addColumn('Action',
89
+ array(
90
+ 'header' => Mage::helper('ticketsystem')->__('Action'),
91
+ 'width' => '100',
92
+ 'type' => 'action',
93
+ 'getter' => 'getId',
94
+ 'actions' => array(
95
+ array(
96
+ 'caption' => Mage::helper('ticketsystem')->__('Edit'),
97
+ 'url' => array('base'=> '*/*/edit'),
98
+ 'field' => 'id'
99
+ )
100
+ ),
101
+ 'filter' => false,
102
+ 'sortable' => false,
103
+ 'index' => 'stores',
104
+ 'is_system' => true,
105
+ ));
106
+
107
+ $this->addExportType('*/*/exportCsv', Mage::helper('ticketsystem')->__('CSV'));
108
+ $this->addExportType('*/*/exportXml', Mage::helper('ticketsystem')->__('XML'));
109
+
110
+ return parent::_prepareColumns();
111
+ }
112
+
113
+ protected function _prepareMassaction()
114
+ {
115
+ $this->setMassactionIdField('ticketsystem_id');
116
+ $this->getMassactionBlock()->setFormFieldName('ticketsystem');
117
+
118
+
119
+ $this->getMassactionBlock()->addItem('delete', array(
120
+ 'label' => Mage::helper('ticketsystem')->__('Delete'),
121
+ 'url' => $this->getUrl('*/*/massDelete'),
122
+ 'confirm' => Mage::helper('ticketsystem')->__('Are you sure?')
123
+ ));
124
+
125
+ $status = Mage::getSingleton('ticketsystem/status');
126
+ $this->getMassactionBlock()->addItem('status', array(
127
+ 'label'=> Mage::helper('ticketsystem')->__('Change status'),
128
+ 'url' => $this->getUrl('*/*/massStatus', array('_current'=>true)),
129
+ 'additional' => array(
130
+ 'visibility' => array(
131
+ 'name' => 'status',
132
+ 'type' => 'select',
133
+ 'class' => 'required-entry',
134
+ 'label' => Mage::helper('ticketsystem')->__('Status'),
135
+ 'values' => $status->getOptionArray(),
136
+ )
137
+ )
138
+ ));
139
+ return $this;
140
+ }
141
+
142
+ public function getRowUrl($row)
143
+ {
144
+ return $this->getUrl('*/*/edit', array('id' => $row->getId()));
145
+ }
146
+
147
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Mail.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+
24
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Mail extends Mage_Adminhtml_Block_Widget_Form_Container
25
+ {
26
+ public function __construct()
27
+ {
28
+ parent::__construct();
29
+
30
+ $this->_objectId = 'id';
31
+ $this->_blockGroup = 'ticketsystem';
32
+ $this->_controller = 'adminhtml_ticketsystem';
33
+
34
+ $this->_updateButton('save', 'label', Mage::helper('ticketsystem')->__('Save Mail Responses'));
35
+ }
36
+
37
+ public function getHeaderText()
38
+ {
39
+ if( Mage::registry('ticketsystem_maildata') ) {
40
+ return Mage::helper('ticketsystem')->__("Edit Mail Responses");
41
+ }
42
+ }
43
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Mail/Form.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Mail_Form extends Mage_Adminhtml_Block_Widget_Form
24
+ {
25
+ protected function _prepareForm()
26
+ {
27
+ $form = new Varien_Data_Form(array(
28
+ 'id' => 'mail_form',
29
+ 'action' => $this->getUrl('*/*/save'),
30
+ 'method' => 'post',
31
+ 'enctype' => 'multipart/form-data'
32
+ )
33
+ );
34
+
35
+ $form->setUseContainer(true);
36
+ $this->setForm($form);
37
+ return parent::_prepareForm();
38
+ }
39
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Mail/Tab/Form.php ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Mail_Tab_Form extends Mage_Adminhtml_Block_Widget_Form
24
+ {
25
+
26
+ protected function _prepareForm()
27
+ {
28
+ $form = new Varien_Data_Form();
29
+ $this->setForm($form);
30
+ $fieldset = $form->addFieldset('ticketsystem_mail', array('legend'=>Mage::helper('ticketsystem')->__('New Ticket Reply').'&nbsp;&nbsp;&nbsp;: '.Mage::helper('ticketsystem')->__('Message sent when a new ticket is opened')));
31
+ $data =Mage::registry('ticketsystem_maildata');
32
+
33
+ $fieldset->addField('ticket_response', 'checkbox', array(
34
+ 'label' => Mage::helper('ticketsystem')->__('Enable'),
35
+ 'title' => Mage::helper('ticketsystem')->__('Enable'),
36
+ 'name' => 'ticket_response',
37
+ 'id' => 'ticket_response',
38
+ 'value' => 1,
39
+ 'checked' => $data->getData('ticket_response')
40
+ ));
41
+
42
+ $fieldset->addField('ticket_subj', 'text', array(
43
+ 'label' => Mage::helper('ticketsystem')->__('Subject'),
44
+ 'class' => 'required-entry',
45
+ 'required' => true,
46
+ 'name' => 'ticket_subj',
47
+ ));
48
+
49
+ $fieldset->addField('ticket_msg', 'textarea', array(
50
+ 'label' => Mage::helper('ticketsystem')->__('Message'),
51
+ 'class' => 'required-entry',
52
+ 'required' => true,
53
+ 'name' => 'ticket_msg',
54
+ ));
55
+
56
+
57
+
58
+ $fieldset = $form->addFieldset('ticketsystem_newmessagereply', array('legend'=>Mage::helper('ticketsystem')->__('New Message Reply').'&nbsp;&nbsp;&nbsp;: '.Mage::helper('ticketsystem')->__('Message sent everytime a reply is made to a ticket.')));
59
+
60
+ $fieldset->addField('message_response', 'checkbox', array(
61
+ 'label' => Mage::helper('ticketsystem')->__('Enable'),
62
+ 'required' => false,
63
+ 'name' => 'message_response',
64
+ 'value' => 1,
65
+ 'checked' => $data->getData('message_response')
66
+ ));
67
+
68
+ $fieldset->addField('message_subj', 'text', array(
69
+ 'label' => Mage::helper('ticketsystem')->__('Subject'),
70
+ 'class' => 'required-entry',
71
+ 'required' => true,
72
+ 'name' => 'message_subj',
73
+ ));
74
+
75
+ $fieldset->addField('message_msg', 'textarea', array(
76
+ 'label' => Mage::helper('ticketsystem')->__('Message'),
77
+ 'class' => 'required-entry',
78
+ 'required' => true,
79
+ 'name' => 'message_msg',
80
+ ));
81
+
82
+
83
+
84
+ $fieldset = $form->addFieldset('ticketsystem_categorytransfernotification', array('legend'=>Mage::helper('ticketsystem')->__('Department Transfer Notification').'&nbsp;&nbsp;&nbsp;: '.Mage::helper('ticketsystem')->__('Message sent when a message has been transfered to a different department.')));
85
+
86
+ $fieldset->addField('trans_response', 'checkbox', array(
87
+ 'label' => Mage::helper('ticketsystem')->__('Enable'),
88
+ 'required' => false,
89
+ 'name' => 'trans_response',
90
+ 'value' => 1,
91
+ 'checked' => $data->getData('trans_response')
92
+ ));
93
+
94
+ $fieldset->addField('trans_subj', 'text', array(
95
+ 'label' => Mage::helper('ticketsystem')->__('Subject'),
96
+ 'class' => 'required-entry',
97
+ 'required' => true,
98
+ 'name' => 'trans_subj',
99
+ ));
100
+
101
+ $fieldset->addField('trans_msg', 'textarea', array(
102
+ 'label' => Mage::helper('ticketsystem')->__('Message'),
103
+ 'class' => 'required-entry',
104
+ 'required' => true,
105
+ 'name' => 'trans_msg',
106
+ ));
107
+
108
+
109
+
110
+
111
+
112
+ $fieldset = $form->addFieldset('softicket_answermessage', array('legend'=>Mage::helper('ticketsystem')->__('Answer Message').'&nbsp;&nbsp;&nbsp;: '.Mage::helper('ticketsystem')->__('Message sent when answering a ticket, changing it is not recommended.')));
113
+
114
+ $fieldset->addField('answer_subj', 'text', array(
115
+ 'label' => Mage::helper('ticketsystem')->__('Subject'),
116
+ 'class' => 'required-entry',
117
+ 'required' => true,
118
+ 'name' => 'answer_subj',
119
+ ));
120
+
121
+ $fieldset->addField('answer_msg', 'textarea', array(
122
+ 'label' => Mage::helper('ticketsystem')->__('Message'),
123
+ 'class' => 'required-entry',
124
+ 'required' => true,
125
+ 'name' => 'answer_msg',
126
+ ));
127
+ /*
128
+ $fieldset = $form->addFieldset('ticketsystem_transresponse', array('legend'=>Mage::helper('ticketsystem')->__('Representative Transfer Notification').'&nbsp;&nbsp;&nbsp;: '.Mage::helper('ticketsystem')->__('Message sent when a ticket has been transfered to a different representative.')));
129
+ $fieldset->addField('rep_trans_response', 'checkbox', array(
130
+ 'label' => Mage::helper('ticketsystem')->__('Enable'),
131
+ 'required' => false,
132
+ 'name' => 'rep_trans_response',
133
+ 'value' => 1,
134
+ 'checked' => $data->getData('rep_trans_response')
135
+ ));
136
+
137
+ $fieldset->addField('rep_trans_subj', 'text', array(
138
+ 'label' => Mage::helper('ticketsystem')->__('Subject'),
139
+ 'class' => 'required-entry',
140
+ 'required' => true,
141
+ 'name' => 'rep_trans_subj',
142
+ ));
143
+
144
+ $fieldset->addField('rep_trans_msg', 'textarea', array(
145
+ 'label' => Mage::helper('ticketsystem')->__('Message'),
146
+ 'class' => 'required-entry',
147
+ 'required' => true,
148
+ 'name' => 'rep_trans_msg',
149
+ ));*/
150
+
151
+
152
+
153
+
154
+ if ( Mage::getSingleton('adminhtml/session')->getTicketsystemMailData() )
155
+ {
156
+ $form->setValues(Mage::getSingleton('adminhtml/session')->getTicketsystemMailData());
157
+ Mage::getSingleton('adminhtml/session')->setSofTicketMailData(null);
158
+ } elseif ( Mage::registry('ticketsystem_maildata') ) {
159
+ $form->setValues(Mage::registry('ticketsystem_maildata')->getData());
160
+ }
161
+ return parent::_prepareForm();
162
+ }
163
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Mail/Tabs.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+
24
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Mail_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
25
+ {
26
+
27
+ public function __construct()
28
+ {
29
+ $this->setId('ticketsystem_tabs');
30
+ $this->setDestElementId('edit_form');
31
+ $this->setTitle(Mage::helper('ticketsystem')->__('Mail Responses'));
32
+ parent::__construct();
33
+
34
+ }
35
+
36
+ protected function _beforeToHtml()
37
+ {
38
+ $this->addTab('form_section', array(
39
+ 'label' => Mage::helper('ticketsystem')->__('Mail Responses'),
40
+ 'title' => Mage::helper('ticketsystem')->__('Mail Responses'),
41
+ 'content' => $this->getLayout()->createBlock('ticketsystem/adminhtml_ticketsystem_mail_tab_form')->toHtml(),
42
+ ));
43
+
44
+ return parent::_beforeToHtml();
45
+ }
46
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Setting.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Setting extends Mage_Adminhtml_Block_Widget_Form_Container
24
+ {
25
+ public function __construct()
26
+ {
27
+ parent::__construct();
28
+
29
+ $this->_objectId = 'id';
30
+ $this->_blockGroup = 'ticketsystem';
31
+ $this->_controller = 'adminhtml_ticketsystem';
32
+ $this->_updateButton('save', 'label', Mage::helper('ticketsystem')->__('Save Settings'));
33
+ }
34
+
35
+ public function getHeaderText()
36
+ {
37
+ if( Mage::registry('ticketsystem_settingdata') ) {
38
+ return Mage::helper('ticketsystem')->__("Edit Settings");
39
+ }
40
+ }
41
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Setting/Form.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+
24
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Setting_Form extends Mage_Adminhtml_Block_Widget_Form
25
+ {
26
+ protected function _prepareForm()
27
+ {
28
+ $form = new Varien_Data_Form(array(
29
+ 'id' => 'mail_form',
30
+ 'action' => $this->getUrl('*/*/save'),
31
+ 'method' => 'post',
32
+ 'enctype' => 'multipart/form-data'
33
+ )
34
+ );
35
+
36
+ $form->setUseContainer(true);
37
+ $this->setForm($form);
38
+ return parent::_prepareForm();
39
+ }
40
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Setting/Tab/Form.php ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Setting_Tab_Form extends Mage_Adminhtml_Block_Widget_Form
24
+ {
25
+
26
+ protected function _prepareForm()
27
+ {
28
+ $form = new Varien_Data_Form();
29
+ $this->setForm($form);
30
+ $fieldset = $form->addFieldset('ticketsystem_setting', array('legend'=>Mage::helper('ticketsystem')->__('Settings')));
31
+ $data =Mage::registry('ticketsystem_settingdata');
32
+
33
+ $fieldset->addField('answer_subj', 'text', array(
34
+ 'label' => Mage::helper('ticketsystem')->__('Answer Subject'),
35
+ 'required' => false,
36
+ 'name' => 'answer_subj',
37
+ 'style' => 'width: 600px',
38
+ ));
39
+
40
+ $fieldset->addField('answer_msg', 'text', array(
41
+ 'label' => Mage::helper('ticketsystem')->__('Answer Message'),
42
+ 'required' => false,
43
+ 'name' => 'answer_msg',
44
+ 'style' => 'width: 600px',
45
+ ));
46
+
47
+ $fieldset->addField('remove_tag', 'text', array(
48
+ 'label' => Mage::helper('ticketsystem')->__('Remove Tag'),
49
+ 'required' => false,
50
+ 'name' => 'remove_tag',
51
+ 'style' => 'width: 600px',
52
+ ));
53
+
54
+ $fieldset->addField('ticket_subj', 'text', array(
55
+ 'label' => Mage::helper('ticketsystem')->__('Ticket Subject'),
56
+ 'required' => false,
57
+ 'name' => 'ticket_subj',
58
+ 'style' => 'width: 600px',
59
+ ));
60
+
61
+ $fieldset->addField('ticket_msg', 'textarea', array(
62
+ 'label' => Mage::helper('ticketsystem')->__('Ticket Message'),
63
+ 'required' => false,
64
+ 'name' => 'ticket_msg',
65
+ 'style' => 'width: 600px',
66
+ ));
67
+
68
+ $fieldset->addField('alert_subj', 'text', array(
69
+ 'label' => Mage::helper('ticketsystem')->__('Alert Subject'),
70
+ 'required' => false,
71
+ 'name' => 'alert_subj',
72
+ 'style' => 'width: 600px',
73
+ ));
74
+
75
+ $fieldset->addField('alert_msg', 'text', array(
76
+ 'label' => Mage::helper('ticketsystem')->__('Alert Message'),
77
+ 'required' => false,
78
+ 'name' => 'alert_msg',
79
+ 'style' => 'width: 600px',
80
+ ));
81
+
82
+ $fieldset->addField('alert_email', 'text', array(
83
+ 'label' => Mage::helper('ticketsystem')->__('Alert Emails of Admins'),
84
+ 'required' => false,
85
+ 'name' => 'alert_email',
86
+ 'style' => 'width: 600px',
87
+ ));
88
+
89
+ $fieldset->addField('alert_user', 'text', array(
90
+ 'label' => Mage::helper('ticketsystem')->__('Alert Emails of Users'),
91
+ 'required' => false,
92
+ 'name' => 'alert_user',
93
+ 'style' => 'width: 600px',
94
+ ));
95
+
96
+ $fieldset->addField('alert_new', 'checkbox', array(
97
+ 'label' => Mage::helper('ticketsystem')->__('Alert New'),
98
+ 'required' => false,
99
+ 'name' => 'alert_new',
100
+ 'style' => 'text-align:left;width: 20px',
101
+ 'checked' => $data->getData('alert_new'),
102
+ 'value' => 1,
103
+ ));
104
+
105
+ $fieldset->addField('message_subj', 'text', array(
106
+ 'label' => Mage::helper('ticketsystem')->__('Message Subject'),
107
+ 'required' => false,
108
+ 'name' => 'message_subj',
109
+ 'style' => 'width: 600px',
110
+ ));
111
+
112
+ $fieldset->addField('message_msg', 'textarea', array(
113
+ 'label' => Mage::helper('ticketsystem')->__('Message Message'),
114
+ 'required' => false,
115
+ 'name' => 'message_msg',
116
+ 'style' => 'width: 600px',
117
+ ));
118
+
119
+ $fieldset->addField('trans_subj', 'text', array(
120
+ 'label' => Mage::helper('ticketsystem')->__('Transfer Subject'),
121
+ 'required' => false,
122
+ 'name' => 'trans_subj',
123
+ 'style' => 'width: 600px',
124
+ ));
125
+
126
+ $fieldset->addField('trans_msg', 'textarea', array(
127
+ 'label' => Mage::helper('ticketsystem')->__('Transfer Message'),
128
+ 'required' => false,
129
+ 'name' => 'trans_msg',
130
+ 'style' => 'width: 600px',
131
+ ));
132
+
133
+ $fieldset->addField('root_url', 'text', array(
134
+ 'label' => Mage::helper('ticketsystem')->__('Root Url'),
135
+ 'required' => false,
136
+ 'name' => 'root_url',
137
+ 'style' => 'width: 300px',
138
+ ));
139
+
140
+ $fieldset->addField('smtp_host', 'text', array(
141
+ 'label' => Mage::helper('ticketsystem')->__('Smtp Host'),
142
+ 'required' => false,
143
+ 'name' => 'smtp_host',
144
+ 'style' => 'width: 300px',
145
+ ));
146
+
147
+ $fieldset->addField('smtp_port', 'text', array(
148
+ 'label' => Mage::helper('ticketsystem')->__('Smtp Port'),
149
+ 'required' => false,
150
+ 'name' => 'smtp_port',
151
+ 'style' => 'width: 60px',
152
+ ));
153
+
154
+ $fieldset->addField('smtp_auth', 'checkbox', array(
155
+ 'label' => Mage::helper('ticketsystem')->__('Smtp Auth'),
156
+ 'required' => false,
157
+ 'name' => 'smtp_auth',
158
+ 'style' => 'text-align:left;width: 20px',
159
+ 'checked' => $data->getData('smtp_auth'),
160
+ 'value' => 1,
161
+ ));
162
+
163
+ $fieldset->addField('smtp_user', 'text', array(
164
+ 'label' => Mage::helper('ticketsystem')->__('Smtp User'),
165
+ 'required' => false,
166
+ 'name' => 'smtp_user',
167
+ 'style' => 'width: 150px',
168
+ ));
169
+
170
+ $fieldset->addField('smtp_pass', 'password', array(
171
+ 'label' => Mage::helper('ticketsystem')->__('Smtp Password'),
172
+ 'required' => false,
173
+ 'name' => 'smtp_pass',
174
+ 'style' => 'width: 150px',
175
+ ));
176
+
177
+ $fieldset->addField('sendmail_path', 'text', array(
178
+ 'label' => Mage::helper('ticketsystem')->__('Send Mail Path'),
179
+ 'required' => false,
180
+ 'name' => 'sendmail_path',
181
+ 'style' => 'width: 300px',
182
+ ));
183
+
184
+ if ( Mage::getSingleton('adminhtml/session')->getTicketsystemSettingData() )
185
+ {
186
+ $form->setValues(Mage::getSingleton('adminhtml/session')->getTicketsystemSettingData());
187
+ Mage::getSingleton('adminhtml/session')->getTicketsystemSettingData(null);
188
+ } elseif ( Mage::registry('ticketsystem_settingdata') ) {
189
+ $form->setValues(Mage::registry('ticketsystem_settingdata')->getData());
190
+ }
191
+ return parent::_prepareForm();
192
+ }
193
+ }
app/code/community/MageTracking/TicketSystem/Block/Adminhtml/Ticketsystem/Setting/Tabs.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+
24
+ class MageTracking_TicketSystem_Block_Adminhtml_Ticketsystem_Setting_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
25
+ {
26
+
27
+ public function __construct()
28
+ {
29
+ $this->setId('ticketsystem_tabs');
30
+ $this->setDestElementId('edit_form');
31
+ $this->setTitle(Mage::helper('ticketsystem')->__('Settings'));
32
+ parent::__construct();
33
+
34
+ }
35
+
36
+ protected function _beforeToHtml()
37
+ {
38
+ $this->addTab('form_section', array(
39
+ 'label' => Mage::helper('ticketsystem')->__('Settings'),
40
+ 'title' => Mage::helper('ticketsystem')->__('Settings'),
41
+ 'content' => $this->getLayout()->createBlock('ticketsystem/adminhtml_ticketsystem_setting_tab_form')->toHtml(),
42
+ ));
43
+
44
+ return parent::_beforeToHtml();
45
+ }
46
+ }
app/code/community/MageTracking/TicketSystem/Block/Cat.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+
24
+ class MageTracking_TicketSystem_Block_Cat extends Mage_Core_Block_Template
25
+ {
26
+ public function _prepareLayout()
27
+ {
28
+ return parent::_prepareLayout();
29
+ }
30
+
31
+ public function getCats()
32
+ {
33
+ if (!$this->hasData('ticketsystem')) {
34
+ $this->setData('ticketsystem', Mage::registry('ticketsystem'));
35
+ }
36
+ return $this->getData('ticketsystem');
37
+
38
+ }
39
+ }
app/code/community/MageTracking/TicketSystem/Block/Ticketsystem.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+
24
+ class MageTracking_TicketSystem_Block_Ticketsystem extends Mage_Core_Block_Template
25
+ {
26
+ public function _prepareLayout()
27
+ {
28
+ return parent::_prepareLayout();
29
+ }
30
+
31
+ public function getTicketsystem()
32
+ {
33
+ if (!$this->hasData('ticketsystem')) {
34
+ $this->setData('ticketsystem', Mage::registry('ticketsystem'));
35
+ }
36
+ return $this->getData('ticketsystem');
37
+
38
+
39
+ }
40
+ }
app/code/community/MageTracking/TicketSystem/Block/Ticketsystem/Edit.php ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+
24
+ class MageTracking_TicketSystem_Block_Ticketsystem_Edit extends Mage_Core_Block_Template
25
+ {
26
+
27
+ protected function _prepareLayout()
28
+ {
29
+ return parent::_prepareLayout();
30
+ }
31
+
32
+ public function getName(){
33
+ $session = Mage::getSingleton('customer/session');
34
+ if ($session){
35
+ $customerId= $session->getCustomerId();
36
+ if ($customerId>0){
37
+ $customer = Mage::getModel('customer/customer')->load($customerId);
38
+ return $customer->getName();
39
+ }
40
+ }
41
+ return '';
42
+ }
43
+
44
+ public function getEmail(){
45
+ $session = Mage::getSingleton('customer/session');
46
+ if ($session){
47
+ $customerId= $session->getCustomerId();
48
+ if ($customerId>0){
49
+ $customer = Mage::getModel('customer/customer')->load($customerId);
50
+ return $customer->getEmail();
51
+ }
52
+ }
53
+ return '';
54
+ }
55
+
56
+ public function getTicket($id){
57
+ if ($id>0)
58
+ return Mage::helper('ticketsystem')->getTicket($id);
59
+ }
60
+
61
+ public function getDepartments(){
62
+ return Mage::helper('ticketsystem')->getAllCategories(false);
63
+ }
64
+
65
+
66
+ public function getDepartment($id){
67
+ return Mage::helper('ticketsystem')->getCategory($id);
68
+ }
69
+
70
+ public function getMessage($ticketId){
71
+
72
+ //$reps=Mage::helper('ticketsystem')->getAllRepresantatives(true);
73
+ $answers='';
74
+ $model_ans = Mage::getModel('ticketsystem/answers');
75
+ foreach ($model_ans->getCollection()->addFieldToFilter('ticket',$ticketId)->load() as $item){
76
+ $message=$item->getData('message');
77
+ //$rep=$item->getData('rep');
78
+ $timestamp=$item->getData('timestamp');
79
+ $represantative='';
80
+ $answers .='('.$timestamp.') '.$message."<br>";
81
+ }
82
+ $model_msg = Mage::getModel('ticketsystem/messages')->load($ticketId, 'ticket');
83
+ $message = $model_msg->getMessage();
84
+ $timestamp= $model_msg->getTimestamp();
85
+
86
+ $message ='('.$timestamp.') '.$message."<br>";
87
+
88
+ if ($answers)
89
+ $message = $message."<br>".$answers;
90
+ // **********************************************
91
+
92
+
93
+ if ($message)
94
+ return $message;
95
+ return '';
96
+ }
97
+
98
+ public function getPriorities(){
99
+ return Mage::helper('ticketsystem')->getPriorities();
100
+ }
101
+
102
+ public function getPriority($priority){
103
+ $priorites= Mage::helper('ticketsystem')->getPriorities();
104
+ return $priorites[$priority];
105
+ }
106
+
107
+ public function getTitle($id)
108
+ {
109
+ if ($title = $this->getData('title')) {
110
+ return $title;
111
+ }
112
+ if ($id)
113
+ return Mage::helper('ticketsystem')->__('Edit Ticket');
114
+ return Mage::helper('ticketsystem')->__('Add Ticket');
115
+ }
116
+
117
+ public function getBackUrl()
118
+ {
119
+ if ($this->getData('back_url')) {
120
+ return $this->getData('back_url');
121
+ }
122
+ return $this->getUrl('ticketsystem/');
123
+ }
124
+
125
+ public function getSaveUrl($id)
126
+ {
127
+ if($id>0)
128
+ return Mage::getUrl('ticketsystem/index/editPost', array('_secure'=>true, 'id'=>$id));
129
+ return Mage::getUrl('ticketsystem/index/addPost', array('_secure'=>true));
130
+ }
131
+
132
+ }
app/code/community/MageTracking/TicketSystem/Block/Ticketsystem/Navigation.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+
5
+ class MageTracking_TicketSystem_Block_Ticketsystem_Navigation extends Mage_Customer_Block_Account_Navigation
6
+ {
7
+
8
+
9
+ }
app/code/community/MageTracking/TicketSystem/Block/Ticketsystem/View.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+
24
+ class MageTracking_TicketSystem_Block_Ticketsystem_View extends Mage_Core_Block_Template
25
+ {
26
+ protected function _prepareLayout(){
27
+ $this->getLayout()->getBlock('head')->setTitle(Mage::helper('ticketsystem')->__('Ticket'));
28
+ return parent::_prepareLayout();
29
+ }
30
+
31
+ public function getTickets(){
32
+ return Mage::registry('ticketsystem_all');
33
+ }
34
+
35
+ public function getDepartments(){
36
+ return Mage::helper('ticketsystem')->getAllCategories(false);
37
+ }
38
+
39
+ public function getDepartment($id){
40
+ return Mage::helper('ticketsystem')->getCategory($id);
41
+ }
42
+
43
+ public function getPriority($priority){
44
+ $priorites= Mage::helper('ticketsystem')->getPriorities();
45
+ return $priorites[$priority];
46
+ }
47
+
48
+ public function getStatus($status){
49
+ $statuses = Mage::getSingleton('ticketsystem/status')->getOptionArray();
50
+ return $statuses[$status];
51
+ }
52
+
53
+
54
+ }
app/code/community/MageTracking/TicketSystem/Helper/Data.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Sofhere SofTicket Magento Component
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the GNU (3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/gpl-3.0.html
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@sofhere.com so we can send you a copy immediately.
15
+ *
16
+ * @category design_default
17
+ * @author sofhere.com
18
+ * @package Sofhere_SofTicket
19
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
20
+ * @version beta
21
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
22
+ */
23
+
24
+
25
+ class MageTracking_TicketSystem_Helper_Data extends Mage_Core_Helper_Abstract
26
+ {
27
+
28
+ public function getPriorities(){
29
+ return array(1=>$this->__('Low'), 2=>$this->__('Medium'), 3=>$this->__('High'));
30
+ }
31
+
32
+ public function isAdmin(){
33
+ $user=Mage::getSingleton('admin/session')->getUser();
34
+ $userId=$user->getUserId();
35
+ $roleId = implode('', $user->getRoles());
36
+ $roleName = Mage::getModel('admin/roles')->load($roleId)->getRoleName();
37
+ if ($roleName == 'Administrators')
38
+ return true;
39
+ return false;
40
+ }
41
+
42
+ public function getMailDBSettings(){
43
+ $array = array();
44
+ $model = Mage::getModel('ticketsystem/mail');
45
+ if ($model){
46
+ foreach($model->getCollection()->load() as $_item) {
47
+ $key=$_item->getData('key');
48
+ $value=$_item->getData('value');
49
+ $array[$key]= $value;
50
+ }
51
+ }
52
+ return $array;
53
+ }
54
+
55
+
56
+ public function getAllCategories($admin=true){
57
+
58
+ $model_cats = Mage::getModel('ticketsystem/cats');
59
+ $cats = array();
60
+ foreach ($model_cats->getCollection()->load() as $item){
61
+ $hidden=$item->getData('hidden');
62
+ if (! ($admin ==false && $hidden =='1')){
63
+ $key=$item->getData('ID');
64
+ $cats[$key]= $item;
65
+ }
66
+ }
67
+ return $cats;
68
+ }
69
+
70
+ public function getCategory($catID){
71
+ $cats=$this->getAllCategories();
72
+ if ($catID >0 && $cats[$catID])
73
+ return $cats[$catID]->getName();
74
+ }
75
+
76
+ public function getMessage($id){
77
+ $model = Mage::getModel('ticketsystem/messages');
78
+ if ($id >0 && $model)
79
+ return $model->load($id);
80
+ }
81
+
82
+ public function getTicket($id){
83
+ if ($id>0){
84
+ $softicketModel = Mage::getModel('ticketsystem/ticketsystem')->load($id);
85
+ return $softicketModel;
86
+ }
87
+ }
88
+
89
+ public function getTicketID() {
90
+ do {
91
+ mt_srand((double)microtime() *1000000);
92
+ $min = 100000;
93
+ $max = 999999;
94
+ $id = mt_rand($min, $max);
95
+ }while ($this->validID($id));
96
+ return $id;
97
+ }
98
+ function validID($id) {
99
+ $model= Mage::getModel('ticketsystem/ticketsystem');
100
+ return $model->load($id)->getData('ID');
101
+ }
102
+ }
app/code/community/MageTracking/TicketSystem/Helper/Mail.php ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Sofhere SofTicket Magento Component
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the GNU (3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/gpl-3.0.html
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@sofhere.com so we can send you a copy immediately.
15
+ *
16
+ * @category design_default
17
+ * @author sofhere.com
18
+ * @package Sofhere_SofTicket
19
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
20
+ * @version 1.0
21
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
22
+ */
23
+
24
+
25
+ require 'TicketFunctions.php';
26
+
27
+ class Mail{
28
+
29
+
30
+ public function sendEmail($id, $subject, $name, $email, $cat, $pri, $message = '', $mailsubject, $mailmsg , $signature, $answer = false){
31
+
32
+ $db_settings=Mage::helper('ticketsystem')->getMailDBSettings();
33
+ $vars = array();
34
+ $vars['ticket'] = $id;
35
+ $vars['subject'] = $subject;
36
+ if ($answer)
37
+ $vars['answer'] = $message;
38
+ else
39
+ $vars['message'] = $message;
40
+ $vars['name'] = $name;
41
+ $vars['email'] = $email;
42
+ $vars['category'] ='';
43
+ if ($cat && $cat->getData('name'))
44
+ $vars['category'] = $cat->getData('name');
45
+
46
+ // remove tags from the message.
47
+ $mailmsg = addRemoveTag($mailmsg, $db_settings);
48
+
49
+ // add signature to the message.
50
+ if ($signature)
51
+ $mailmsg = addSig($signature, $mailmsg, $db_settings);
52
+ else
53
+ $mailmsg = addSig('', $mailmsg, $db_settings);
54
+
55
+ // replace keyword with real values from db.
56
+ $mailsubject = keywords($mailsubject, $vars, $db_settings);
57
+ $text = keywords($mailmsg, $vars, $db_settings);
58
+
59
+ if ($html = getHTML($mailmsg, $vars, 'email-example.html', $db_settings)) {
60
+ $body = array();
61
+ $body['text'] = $text;
62
+ $body['html'] = $html;
63
+ } else {
64
+ $body = $text;
65
+ }
66
+
67
+ if ($db_settings['ticket_response']) {
68
+ $from='';
69
+ if ($cat && $cat->getData('name') && $cat->getData('email'))
70
+ $from = '"' . $cat->getData('name') . '" <' . $cat->getData('email') . '>';
71
+ send_mail($email, $mailsubject, $body, $from, $pri, $db_settings);
72
+ }
73
+ }
74
+
75
+
76
+ function emailAlert($tid, $msgid = false, $subject = false, $message = false) { //alerts the alert_user (in mail) and cat reps
77
+
78
+ $db_settings=Mage::helper('ticketsystem')->getMailDBSettings();
79
+
80
+ $tid = preg_replace('/\D+/', '', $tid); //sanitise
81
+ $msgid = preg_replace('/\D+/', '', $msgid); //sanitise
82
+ if (empty($tid)) {
83
+ return;
84
+ }
85
+ $t = Mage::getModel('ticketsystem/ticketsystem')->load($tid);
86
+ $cat =Mage::getModel('ticketsystem/cats')->load($t->getData('cat'));
87
+
88
+ $m = Mage::getModel('ticketsystem/messages')->load($msgid);
89
+ $from = $db_settings['alert_email'];
90
+ $alert_subj = $db_settings['alert_subj'];
91
+ $repl_meth = $cat->getData('reply_method');
92
+ $alert_msg = $db_settings['alert_msg'];
93
+ /*if ($repl_meth['reply_method'] != 'url') {
94
+ $alert_msg.= '<br>Client Request:' . $m->getData('message');
95
+ }*/
96
+ $vars = array();
97
+ $vars['ticket'] = $t->getData('ID');
98
+ $vars['subject'] = $subject ? $subject : htmlspecialchars_decode($t->getData('subject'));
99
+ $vars['category'] = $cat->getData('name');
100
+ $vars['cat_name'] = $cat->getData('name');
101
+ $vars['name'] = $t->getData('name');
102
+ $vars['email'] = $t->getData('email');
103
+ $vars['status'] = $t->getData('status');
104
+ $vars['datetime'] = (empty($m)) ? '' : format_time('r', $m->getData('timestamp'));
105
+ $vars['message'] = $message ? $message : htmlspecialchars_decode($m->getData('message'));
106
+ $alert_subj = keywords($alert_subj, $vars, $db_settings);
107
+ $text = keywords($alert_msg, $vars, $db_settings);
108
+
109
+ if ($html = getHTML($alert_msg, $vars, 'email-example.html', $db_settings)) {
110
+ $body = array();
111
+ $body['text'] = $text;
112
+ $body['html'] = $html;
113
+ } else {
114
+ $body = $text;
115
+ }
116
+ foreach($this->getEmails($t->getData('cat')) as $to) {
117
+ if (!empty($to)) {
118
+ send_mail($to, $alert_subj, $body, $from, $t->getData('priority'), $db_settings);
119
+ }
120
+ }
121
+ }
122
+
123
+
124
+ function getEmails($catid) {
125
+ $db_settings=Mage::helper('ticketsystem')->getMailDBSettings();
126
+ $cat_reps = array();
127
+ $reps = Mage::getModel('ticketsystem/reps')->getCollection();
128
+ foreach($reps as $rep) {
129
+ $user_group =Mage::getModel('ticketsystem/groups')->load($rep->getData('user_group'));
130
+ if ($user_group){
131
+ $cat_access = explode(':', $user_group->getData('cat_access'));
132
+ if (in_array($catid, $cat_access) || in_array('all', $cat_access)) {
133
+ $cat_reps[] = $rep;
134
+ }
135
+ }
136
+ }
137
+ $emails = array();
138
+ if (!empty($db_settings['alert_user'])) {
139
+ $emails = explode(';', $db_settings['alert_user']);
140
+ }
141
+ foreach($cat_reps as $cat_rep) {
142
+ $add_email = 1;
143
+ if (substr($rep->getData('password'), 0, 8) === '*LOCKED*') {
144
+ $add_email = 0;
145
+ }
146
+ if (in_array($cat_rep->getData('email'), $emails)) {
147
+ $add_email = 0;
148
+ }
149
+ if ($add_email) {
150
+ $emails[] = $cat_rep->getData('email');
151
+ }
152
+ }
153
+ $emails = array_unique($emails);
154
+ return $emails;
155
+ }
156
+
157
+
158
+ }
159
+ ?>
app/code/community/MageTracking/TicketSystem/Helper/Mail_data.php ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Sofhere SofTicket Magento Component
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the GNU (3.0)
9
+ * that is bundled with this package in the file LICENSE.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/gpl-3.0.html
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@sofhere.com so we can send you a copy immediately.
15
+ *
16
+ * @category design_default
17
+ * @author sofhere.com
18
+ * @package Sofhere_SofTicket
19
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
20
+ * @version 1.0
21
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
22
+ */
23
+
24
+
25
+ require 'TicketFunctions.php';
26
+
27
+ class Mail_data{
28
+
29
+
30
+ public function sendEmail($id, $subject, $name, $email, $cat, $pri, $message = '', $mailsubject, $mailmsg , $signature, $answer = false){
31
+
32
+ $db_settings=Mage::helper('ticketsystem')->getMailDBSettings();//print_r($db_settings);die();
33
+ $vars = array();
34
+ $vars['ticket'] = $id;
35
+ $vars['subject'] = $subject;
36
+ if ($answer)
37
+ $vars['answer'] = $message;
38
+ else
39
+ $vars['message'] = $message;
40
+ $vars['name'] = $name;
41
+ $vars['email'] = $email;
42
+ $vars['category'] ='';
43
+ if ($cat && $cat->getData('name'))
44
+ $vars['category'] = $cat->getData('name');
45
+
46
+ // remove tags from the message.
47
+ $mailmsg = addRemoveTag($mailmsg, $db_settings);
48
+
49
+ // add signature to the message.
50
+ if ($signature)
51
+ $mailmsg = addSig($signature, $mailmsg, $db_settings);
52
+ else
53
+ $mailmsg = addSig('', $mailmsg, $db_settings);
54
+
55
+ // replace keyword with real values from db.
56
+ $mailsubject = keywords($mailsubject, $vars, $db_settings);
57
+ $text = keywords($mailmsg, $vars, $db_settings);
58
+
59
+ if ($html = getHTML($mailmsg, $vars, 'email-example.html', $db_settings)) {
60
+ $body = array();
61
+ $body['text'] = $text;
62
+ $body['html'] = $html;
63
+ } else {
64
+ $body = $text;
65
+ }
66
+
67
+ if ($db_settings['ticket_response']) {
68
+ $from='';
69
+ if ($cat && $cat->getData('name') && $cat->getData('email'))
70
+ $from = '"' . $cat->getData('name') . '" <' . $cat->getData('email') . '>';
71
+ send_mail($email, $mailsubject, $body, $from, $pri, $db_settings);
72
+ }
73
+ }
74
+
75
+
76
+ function emailAlert($tid, $msgid = false, $subject = false, $message = false) { //alerts the alert_user (in mail) and cat reps
77
+
78
+ $db_settings=Mage::helper('ticketsystem')->getMailDBSettings();
79
+
80
+ $tid = preg_replace('/\D+/', '', $tid); //sanitise
81
+ $msgid = preg_replace('/\D+/', '', $msgid); //sanitise
82
+ if (empty($tid)) {
83
+ return;
84
+ }
85
+ $t = Mage::getModel('ticketsystem/ticketsystem')->load($tid);
86
+ $cat =Mage::getModel('ticketsystem/cats')->load($t->getData('cat'));
87
+
88
+ $m = Mage::getModel('ticketsystem/messages')->load($msgid);
89
+ $from = $db_settings['alert_email'];
90
+ $alert_subj = $db_settings['alert_subj'];
91
+ $repl_meth = $cat->getData('reply_method');
92
+ $alert_msg = $db_settings['alert_msg'];
93
+ /*if ($repl_meth['reply_method'] != 'url') {
94
+ $alert_msg.= '<br>Client Request:' . $m->getData('message');
95
+ }*/
96
+ $vars = array();
97
+ $vars['ticket'] = $t->getData('ID');
98
+ $vars['subject'] = $subject ? $subject : htmlspecialchars_decode($t->getData('subject'));
99
+ $vars['category'] = $cat->getData('name');
100
+ $vars['cat_name'] = $cat->getData('name');
101
+ $vars['name'] = $t->getData('name');
102
+ $vars['email'] = $t->getData('email');
103
+ $vars['status'] = $t->getData('status');
104
+ $vars['datetime'] = (empty($m)) ? '' : format_time('r', $m->getData('timestamp'));
105
+ $vars['message'] = $message ? $message : htmlspecialchars_decode($m->getData('message'));
106
+ $alert_subj = keywords($alert_subj, $vars, $db_settings);
107
+ $text = keywords($alert_msg, $vars, $db_settings);
108
+
109
+ if ($html = getHTML($alert_msg, $vars, 'email-example.html', $db_settings)) {
110
+ $body = array();
111
+ $body['text'] = $text;
112
+ $body['html'] = $html;
113
+ } else {
114
+ $body = $text;
115
+ }
116
+ foreach($this->getEmails($t->getData('cat')) as $to) {
117
+ if (!empty($to)) {
118
+ send_mail($to, $alert_subj, $body, $from, $t->getData('priority'), $db_settings);
119
+ }
120
+ }
121
+ }
122
+
123
+
124
+ function getEmails($catid) {
125
+ $db_settings=Mage::helper('ticketsystem')->getMailDBSettings();
126
+ $cat_reps = array();
127
+
128
+ $emails = array();
129
+ if (!empty($db_settings['alert_user'])) {
130
+ $emails = explode(';', $db_settings['alert_user']);
131
+ }
132
+ foreach($cat_reps as $cat_rep) {
133
+ $add_email = 1;
134
+ if (substr($rep->getData('password'), 0, 8) === '*LOCKED*') {
135
+ $add_email = 0;
136
+ }
137
+ if (in_array($cat_rep->getData('email'), $emails)) {
138
+ $add_email = 0;
139
+ }
140
+ if ($add_email) {
141
+ $emails[] = $cat_rep->getData('email');
142
+ }
143
+ }
144
+ $emails = array_unique($emails);
145
+ return $emails;
146
+ }
147
+
148
+
149
+ }
150
+ ?>
app/code/community/MageTracking/TicketSystem/Helper/Phpmailer.php ADDED
@@ -0,0 +1,1897 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*~ class.phpmailer.php
3
+ .---------------------------------------------------------------------------.
4
+ | Software: PHPMailer - PHP email class |
5
+ | Version: 2.2.1 |
6
+ | Contact: via sourceforge.net support pages (also www.codeworxtech.com) |
7
+ | Info: http://phpmailer.sourceforge.net |
8
+ | Support: http://sourceforge.net/projects/phpmailer/ |
9
+ | ------------------------------------------------------------------------- |
10
+ | Author: Andy Prevost (project admininistrator) |
11
+ | Author: Brent R. Matzelle (original founder) |
12
+ | Copyright (c) 2004-2007, Andy Prevost. All Rights Reserved. |
13
+ | Copyright (c) 2001-2003, Brent R. Matzelle |
14
+ | ------------------------------------------------------------------------- |
15
+ | License: Distributed under the Lesser General Public License (LGPL) |
16
+ | http://www.gnu.org/copyleft/lesser.html |
17
+ | This program is distributed in the hope that it will be useful - WITHOUT |
18
+ | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
19
+ | FITNESS FOR A PARTICULAR PURPOSE. |
20
+ | ------------------------------------------------------------------------- |
21
+ | We offer a number of paid services (www.codeworxtech.com): |
22
+ | - Web Hosting on highly optimized fast and secure servers |
23
+ | - Technology Consulting |
24
+ | - Oursourcing (highly qualified programmers and graphic designers) |
25
+ '---------------------------------------------------------------------------'
26
+
27
+ /**
28
+ * PHPMailer - PHP email transport class
29
+ * NOTE: Designed for use with PHP version 5 and up
30
+ * @package PHPMailer
31
+ * @author Andy Prevost
32
+ * @copyright 2004 - 2008 Andy Prevost
33
+ */
34
+
35
+ class PHPMailer {
36
+
37
+ /////////////////////////////////////////////////
38
+ // PROPERTIES, PUBLIC
39
+ /////////////////////////////////////////////////
40
+
41
+ /**
42
+ * Email priority (1 = High, 3 = Normal, 5 = low).
43
+ * @var int
44
+ */
45
+ public $Priority = 3;
46
+
47
+ /**
48
+ * Sets the CharSet of the message.
49
+ * @var string
50
+ */
51
+ public $CharSet = 'iso-8859-1';
52
+
53
+ /**
54
+ * Sets the Content-type of the message.
55
+ * @var string
56
+ */
57
+ public $ContentType = 'text/plain';
58
+
59
+ /**
60
+ * Sets the Encoding of the message. Options for this are "8bit",
61
+ * "7bit", "binary", "base64", and "quoted-printable".
62
+ * @var string
63
+ */
64
+ public $Encoding = '8bit';
65
+
66
+ /**
67
+ * Holds the most recent mailer error message.
68
+ * @var string
69
+ */
70
+ public $ErrorInfo = '';
71
+
72
+ /**
73
+ * Sets the From email address for the message.
74
+ * @var string
75
+ */
76
+ public $From = 'root@localhost';
77
+
78
+ /**
79
+ * Sets the From name of the message.
80
+ * @var string
81
+ */
82
+ public $FromName = 'Root User';
83
+
84
+ /**
85
+ * Sets the Sender email (Return-Path) of the message. If not empty,
86
+ * will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode.
87
+ * @var string
88
+ */
89
+ public $Sender = '';
90
+
91
+ /**
92
+ * Sets the Subject of the message.
93
+ * @var string
94
+ */
95
+ public $Subject = '';
96
+
97
+ /**
98
+ * Sets the Body of the message. This can be either an HTML or text body.
99
+ * If HTML then run IsHTML(true).
100
+ * @var string
101
+ */
102
+ public $Body = '';
103
+
104
+ /**
105
+ * Sets the text-only body of the message. This automatically sets the
106
+ * email to multipart/alternative. This body can be read by mail
107
+ * clients that do not have HTML email capability such as mutt. Clients
108
+ * that can read HTML will view the normal Body.
109
+ * @var string
110
+ */
111
+ public $AltBody = '';
112
+
113
+ /**
114
+ * Sets word wrapping on the body of the message to a given number of
115
+ * characters.
116
+ * @var int
117
+ */
118
+ public $WordWrap = 0;
119
+
120
+ /**
121
+ * Method to send mail: ("mail", "sendmail", or "smtp").
122
+ * @var string
123
+ */
124
+ public $Mailer = 'mail';
125
+
126
+ /**
127
+ * Sets the path of the sendmail program.
128
+ * @var string
129
+ */
130
+ public $Sendmail = '/usr/sbin/sendmail';
131
+
132
+ /**
133
+ * Path to PHPMailer plugins. This is now only useful if the SMTP class
134
+ * is in a different directory than the PHP include path.
135
+ * @var string
136
+ */
137
+ public $PluginDir = '';
138
+
139
+ /**
140
+ * Holds PHPMailer version.
141
+ * @var string
142
+ */
143
+ public $Version = "2.2";
144
+
145
+ /**
146
+ * Sets the email address that a reading confirmation will be sent.
147
+ * @var string
148
+ */
149
+ public $ConfirmReadingTo = '';
150
+
151
+ /**
152
+ * Sets the hostname to use in Message-Id and Received headers
153
+ * and as default HELO string. If empty, the value returned
154
+ * by SERVER_NAME is used or 'localhost.localdomain'.
155
+ * @var string
156
+ */
157
+ public $Hostname = '';
158
+
159
+ /**
160
+ * Sets the message ID to be used in the Message-Id header.
161
+ * If empty, a unique id will be generated.
162
+ * @var string
163
+ */
164
+ public $MessageID = '';
165
+
166
+ /////////////////////////////////////////////////
167
+ // PROPERTIES FOR SMTP
168
+ /////////////////////////////////////////////////
169
+
170
+ /**
171
+ * Sets the SMTP hosts. All hosts must be separated by a
172
+ * semicolon. You can also specify a different port
173
+ * for each host by using this format: [hostname:port]
174
+ * (e.g. "smtp1.example.com:25;smtp2.example.com").
175
+ * Hosts will be tried in order.
176
+ * @var string
177
+ */
178
+ public $Host = 'localhost';
179
+
180
+ /**
181
+ * Sets the default SMTP server port.
182
+ * @var int
183
+ */
184
+ public $Port = 25;
185
+
186
+ /**
187
+ * Sets the SMTP HELO of the message (Default is $Hostname).
188
+ * @var string
189
+ */
190
+ public $Helo = '';
191
+
192
+ /**
193
+ * Sets connection prefix.
194
+ * Options are "", "ssl" or "tls"
195
+ * @var string
196
+ */
197
+ public $SMTPSecure = "";
198
+
199
+ /**
200
+ * Sets SMTP authentication. Utilizes the Username and Password variables.
201
+ * @var bool
202
+ */
203
+ public $SMTPAuth = false;
204
+
205
+ /**
206
+ * Sets SMTP username.
207
+ * @var string
208
+ */
209
+ public $Username = '';
210
+
211
+ /**
212
+ * Sets SMTP password.
213
+ * @var string
214
+ */
215
+ public $Password = '';
216
+
217
+ /**
218
+ * Sets the SMTP server timeout in seconds. This function will not
219
+ * work with the win32 version.
220
+ * @var int
221
+ */
222
+ public $Timeout = 10;
223
+
224
+ /**
225
+ * Sets SMTP class debugging on or off.
226
+ * @var bool
227
+ */
228
+ public $SMTPDebug = false;
229
+
230
+ /**
231
+ * Prevents the SMTP connection from being closed after each mail
232
+ * sending. If this is set to true then to close the connection
233
+ * requires an explicit call to SmtpClose().
234
+ * @var bool
235
+ */
236
+ public $SMTPKeepAlive = false;
237
+
238
+ /**
239
+ * Provides the ability to have the TO field process individual
240
+ * emails, instead of sending to entire TO addresses
241
+ * @var bool
242
+ */
243
+ public $SingleTo = false;
244
+
245
+ /////////////////////////////////////////////////
246
+ // PROPERTIES, PRIVATE
247
+ /////////////////////////////////////////////////
248
+
249
+ private $smtp = NULL;
250
+ private $to = array();
251
+ private $cc = array();
252
+ private $bcc = array();
253
+ private $ReplyTo = array();
254
+ private $attachment = array();
255
+ private $CustomHeader = array();
256
+ private $message_type = '';
257
+ private $boundary = array();
258
+ private $language = array();
259
+ private $error_count = 0;
260
+ private $LE = "\n";
261
+ private $sign_cert_file = "";
262
+ private $sign_key_file = "";
263
+ private $sign_key_pass = "";
264
+
265
+ /////////////////////////////////////////////////
266
+ // METHODS, VARIABLES
267
+ /////////////////////////////////////////////////
268
+
269
+ /**
270
+ * Sets message type to HTML.
271
+ * @param bool $bool
272
+ * @return void
273
+ */
274
+ public function IsHTML($bool) {
275
+ if($bool == true) {
276
+ $this->ContentType = 'text/html';
277
+ } else {
278
+ $this->ContentType = 'text/plain';
279
+ }
280
+ }
281
+
282
+ /**
283
+ * Sets Mailer to send message using SMTP.
284
+ * @return void
285
+ */
286
+ public function IsSMTP() {echo "1";die();
287
+ $this->Mailer = 'smtp';
288
+ }
289
+
290
+ /**
291
+ * Sets Mailer to send message using PHP mail() function.
292
+ * @return void
293
+ */
294
+ public function IsMail() {//echo "2";die();
295
+ $this->Mailer = 'mail';
296
+ }
297
+
298
+ /**
299
+ * Sets Mailer to send message using the $Sendmail program.
300
+ * @return void
301
+ */
302
+ public function IsSendmail() {echo "3";die();
303
+ $this->Mailer = 'sendmail';
304
+ }
305
+
306
+ /**
307
+ * Sets Mailer to send message using the qmail MTA.
308
+ * @return void
309
+ */
310
+ public function IsQmail() {echo "4";die();
311
+ $this->Sendmail = '/var/qmail/bin/sendmail';
312
+ $this->Mailer = 'sendmail';
313
+ }
314
+
315
+ /////////////////////////////////////////////////
316
+ // METHODS, RECIPIENTS
317
+ /////////////////////////////////////////////////
318
+
319
+ /**
320
+ * Adds a "To" address.
321
+ * @param string $address
322
+ * @param string $name
323
+ * @return void
324
+ */
325
+ public function AddAddress($address, $name = '') {
326
+ $cur = count($this->to);
327
+ $this->to[$cur][0] = trim($address);
328
+ $this->to[$cur][1] = $name;
329
+ }
330
+
331
+ /**
332
+ * Adds a "Cc" address. Note: this function works
333
+ * with the SMTP mailer on win32, not with the "mail"
334
+ * mailer.
335
+ * @param string $address
336
+ * @param string $name
337
+ * @return void
338
+ */
339
+ public function AddCC($address, $name = '') {
340
+ $cur = count($this->cc);
341
+ $this->cc[$cur][0] = trim($address);
342
+ $this->cc[$cur][1] = $name;
343
+ }
344
+
345
+ /**
346
+ * Adds a "Bcc" address. Note: this function works
347
+ * with the SMTP mailer on win32, not with the "mail"
348
+ * mailer.
349
+ * @param string $address
350
+ * @param string $name
351
+ * @return void
352
+ */
353
+ public function AddBCC($address, $name = '') {
354
+ $cur = count($this->bcc);
355
+ $this->bcc[$cur][0] = trim($address);
356
+ $this->bcc[$cur][1] = $name;
357
+ }
358
+
359
+ /**
360
+ * Adds a "Reply-to" address.
361
+ * @param string $address
362
+ * @param string $name
363
+ * @return void
364
+ */
365
+ public function AddReplyTo($address, $name = '') {
366
+ $cur = count($this->ReplyTo);
367
+ $this->ReplyTo[$cur][0] = trim($address);
368
+ $this->ReplyTo[$cur][1] = $name;
369
+ }
370
+
371
+ /////////////////////////////////////////////////
372
+ // METHODS, MAIL SENDING
373
+ /////////////////////////////////////////////////
374
+
375
+ /**
376
+ * Creates message and assigns Mailer. If the message is
377
+ * not sent successfully then it returns false. Use the ErrorInfo
378
+ * variable to view description of the error.
379
+ * @return bool
380
+ */
381
+ public function Send() {
382
+ $header = '';
383
+ $body = '';
384
+ $result = true;
385
+
386
+ if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) {
387
+ $this->SetError($this->Lang('provide_address'));
388
+ return false;
389
+ }
390
+
391
+ /* Set whether the message is multipart/alternative */
392
+ if(!empty($this->AltBody)) {
393
+ $this->ContentType = 'multipart/alternative';
394
+ }
395
+
396
+ $this->error_count = 0; // reset errors
397
+ $this->SetMessageType();
398
+ $header .= $this->CreateHeader();
399
+ $body = $this->CreateBody();
400
+
401
+ if($body == '') {
402
+ return false;
403
+ }
404
+
405
+ /* Choose the mailer */
406
+ switch($this->Mailer) {
407
+ case 'sendmail':
408
+ $result = $this->SendmailSend($header, $body);
409
+ break;
410
+ case 'smtp':
411
+ $result = $this->SmtpSend($header, $body);
412
+ break;
413
+ case 'mail':
414
+ $result = $this->MailSend($header, $body);
415
+ break;
416
+ default:
417
+ $result = $this->MailSend($header, $body);
418
+ break;
419
+ //$this->SetError($this->Mailer . $this->Lang('mailer_not_supported'));
420
+ //$result = false;
421
+ //break;
422
+ }
423
+
424
+ return $result;
425
+ }
426
+
427
+ /**
428
+ * Sends mail using the $Sendmail program.
429
+ * @access public
430
+ * @return bool
431
+ */
432
+ public function SendmailSend($header, $body) {
433
+ if ($this->Sender != '') {
434
+ $sendmail = sprintf("%s -oi -f %s -t", escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender));
435
+ } else {
436
+ $sendmail = sprintf("%s -oi -t", escapeshellcmd($this->Sendmail));
437
+ }
438
+
439
+ if(!@$mail = popen($sendmail, 'w')) {
440
+ $this->SetError($this->Lang('execute') . $this->Sendmail);
441
+ return false;
442
+ }
443
+
444
+ fputs($mail, $header);
445
+ fputs($mail, $body);
446
+
447
+ $result = pclose($mail);
448
+ if (version_compare(phpversion(), '4.2.3') == -1) {
449
+ $result = $result >> 8 & 0xFF;
450
+ }
451
+ if($result != 0) {
452
+ $this->SetError($this->Lang('execute') . $this->Sendmail);
453
+ return false;
454
+ }
455
+
456
+ return true;
457
+ }
458
+
459
+ /**
460
+ * Sends mail using the PHP mail() function.
461
+ * @access public
462
+ * @return bool
463
+ */
464
+ public function MailSend($header, $body) {
465
+
466
+ $to = '';
467
+ for($i = 0; $i < count($this->to); $i++) {
468
+ if($i != 0) { $to .= ', '; }
469
+ $to .= $this->AddrFormat($this->to[$i]);
470
+ }
471
+
472
+ $toArr = split(',', $to);
473
+
474
+ $params = sprintf("-oi -f %s", $this->Sender);
475
+ if ($this->Sender != '' && strlen(ini_get('safe_mode'))< 1) {
476
+ $old_from = ini_get('sendmail_from');
477
+ ini_set('sendmail_from', $this->Sender);
478
+ if ($this->SingleTo === true && count($toArr) > 1) {
479
+ foreach ($toArr as $key => $val) {
480
+ $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
481
+ }
482
+ } else {
483
+ $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
484
+ }
485
+ } else {
486
+ if ($this->SingleTo === true && count($toArr) > 1) {
487
+ foreach ($toArr as $key => $val) {
488
+ $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
489
+ }
490
+ } else {
491
+ $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header);
492
+ }
493
+ }
494
+
495
+ if (isset($old_from)) {
496
+ ini_set('sendmail_from', $old_from);
497
+ }
498
+
499
+ if(!$rt) {
500
+ $this->SetError($this->Lang('instantiate'));
501
+ return false;
502
+ }
503
+
504
+ return true;
505
+ }
506
+
507
+ /**
508
+ * Sends mail via SMTP using PhpSMTP (Author:
509
+ * Chris Ryan). Returns bool. Returns false if there is a
510
+ * bad MAIL FROM, RCPT, or DATA input.
511
+ * @access public
512
+ * @return bool
513
+ */
514
+ public function SmtpSend($header, $body) {echo "here4";die();
515
+ include_once($this->PluginDir . 'Smtp.php');
516
+ $error = '';
517
+ $bad_rcpt = array();
518
+
519
+ if(!$this->SmtpConnect()) {
520
+ return false;
521
+ }
522
+
523
+ $smtp_from = ($this->Sender == '') ? $this->From : $this->Sender;
524
+ if(!$this->smtp->Mail($smtp_from)) {
525
+ $error = $this->Lang('from_failed') . $smtp_from;
526
+ $this->SetError($error);
527
+ $this->smtp->Reset();
528
+ return false;
529
+ }
530
+
531
+ /* Attempt to send attach all recipients */
532
+ for($i = 0; $i < count($this->to); $i++) {
533
+ if(!$this->smtp->Recipient($this->to[$i][0])) {
534
+ $bad_rcpt[] = $this->to[$i][0];
535
+ }
536
+ }
537
+ for($i = 0; $i < count($this->cc); $i++) {
538
+ if(!$this->smtp->Recipient($this->cc[$i][0])) {
539
+ $bad_rcpt[] = $this->cc[$i][0];
540
+ }
541
+ }
542
+ for($i = 0; $i < count($this->bcc); $i++) {
543
+ if(!$this->smtp->Recipient($this->bcc[$i][0])) {
544
+ $bad_rcpt[] = $this->bcc[$i][0];
545
+ }
546
+ }
547
+
548
+ if(count($bad_rcpt) > 0) { // Create error message
549
+ for($i = 0; $i < count($bad_rcpt); $i++) {
550
+ if($i != 0) {
551
+ $error .= ', ';
552
+ }
553
+ $error .= $bad_rcpt[$i];
554
+ }
555
+ $error = $this->Lang('recipients_failed') . $error;
556
+ $this->SetError($error);
557
+ $this->smtp->Reset();
558
+ return false;
559
+ }
560
+
561
+ if(!$this->smtp->Data($header . $body)) {
562
+ $this->SetError($this->Lang('data_not_accepted'));
563
+ $this->smtp->Reset();
564
+ return false;
565
+ }
566
+ if($this->SMTPKeepAlive == true) {
567
+ $this->smtp->Reset();
568
+ } else {
569
+ $this->SmtpClose();
570
+ }
571
+
572
+ return true;
573
+ }
574
+
575
+ /**
576
+ * Initiates a connection to an SMTP server. Returns false if the
577
+ * operation failed.
578
+ * @access public
579
+ * @return bool
580
+ */
581
+ public function SmtpConnect() {echo "here5";die();
582
+ if($this->smtp == NULL) {
583
+ $this->smtp = new SMTP();
584
+ }
585
+
586
+ $this->smtp->do_debug = $this->SMTPDebug;
587
+ $hosts = explode(';', $this->Host);
588
+ $index = 0;
589
+ $connection = ($this->smtp->Connected());
590
+
591
+ /* Retry while there is no connection */
592
+ while($index < count($hosts) && $connection == false) {
593
+ $hostinfo = array();
594
+ if(eregi('^(.+):([0-9]+)$', $hosts[$index], $hostinfo)) {
595
+ $host = $hostinfo[1];
596
+ $port = $hostinfo[2];
597
+ } else {
598
+ $host = $hosts[$index];
599
+ $port = $this->Port;
600
+ }
601
+
602
+ $tls = ($this->SMTPSecure == 'tls');
603
+ $ssl = ($this->SMTPSecure == 'ssl');
604
+
605
+ if($this->smtp->Connect(($ssl ? 'ssl://':'').$host, $port, $this->Timeout)) {
606
+
607
+ $hello = ($this->Helo != '' ? $this->Hello : $this->ServerHostname());
608
+ $this->smtp->Hello($hello);
609
+
610
+ if($tls) {
611
+ if(!$this->smtp->StartTLS()) {
612
+ $this->SetError($this->Lang("tls"));
613
+ $this->smtp->Reset();
614
+ $connection = false;
615
+ }
616
+
617
+ //We must resend HELLO after tls negociation
618
+ $this->smtp->Hello($hello);
619
+ }
620
+
621
+ $connection = true;
622
+ if($this->SMTPAuth) {
623
+ if(!$this->smtp->Authenticate($this->Username, $this->Password)) {
624
+ $this->SetError($this->Lang('authenticate'));
625
+ $this->smtp->Reset();
626
+ $connection = false;
627
+ }
628
+ }
629
+ }
630
+ $index++;
631
+ }
632
+ if(!$connection) {
633
+ $this->SetError($this->Lang('connect_host'));
634
+ }
635
+
636
+ return $connection;
637
+ }
638
+
639
+ /**
640
+ * Closes the active SMTP session if one exists.
641
+ * @return void
642
+ */
643
+ public function SmtpClose() {
644
+ if($this->smtp != NULL) {
645
+ if($this->smtp->Connected()) {
646
+ $this->smtp->Quit();
647
+ $this->smtp->Close();
648
+ }
649
+ }
650
+ }
651
+
652
+ /**
653
+ * Sets the language for all class error messages. Returns false
654
+ * if it cannot load the language file. The default language type
655
+ * is English.
656
+ * @param string $lang_type Type of language (e.g. Portuguese: "br")
657
+ * @param string $lang_path Path to the language file directory
658
+ * @access public
659
+ * @return bool
660
+ */
661
+ function SetLanguage($lang_type = 'en', $lang_path = 'language/') {
662
+ if( !(@include $lang_path.'phpmailer.lang-'.$lang_type.'.php') ) {
663
+ $this->SetError('Could not load language file');
664
+ return false;
665
+ }
666
+ $this->language = $PHPMAILER_LANG;
667
+ return true;
668
+ }
669
+
670
+ /////////////////////////////////////////////////
671
+ // METHODS, MESSAGE CREATION
672
+ /////////////////////////////////////////////////
673
+
674
+ /**
675
+ * Creates recipient headers.
676
+ * @access public
677
+ * @return string
678
+ */
679
+ public function AddrAppend($type, $addr) {
680
+ $addr_str = $type . ': ';
681
+ $addr_str .= $this->AddrFormat($addr[0]);
682
+ if(count($addr) > 1) {
683
+ for($i = 1; $i < count($addr); $i++) {
684
+ $addr_str .= ', ' . $this->AddrFormat($addr[$i]);
685
+ }
686
+ }
687
+ $addr_str .= $this->LE;
688
+
689
+ return $addr_str;
690
+ }
691
+
692
+ /**
693
+ * Formats an address correctly.
694
+ * @access public
695
+ * @return string
696
+ */
697
+ public function AddrFormat($addr) {
698
+ if(empty($addr[1])) {
699
+ $formatted = $this->SecureHeader($addr[0]);
700
+ } else {
701
+ $formatted = $this->EncodeHeader($this->SecureHeader($addr[1]), 'phrase') . " <" . $this->SecureHeader($addr[0]) . ">";
702
+ }
703
+
704
+ return $formatted;
705
+ }
706
+
707
+ /**
708
+ * Wraps message for use with mailers that do not
709
+ * automatically perform wrapping and for quoted-printable.
710
+ * Original written by philippe.
711
+ * @access public
712
+ * @return string
713
+ */
714
+ public function WrapText($message, $length, $qp_mode = false) {
715
+ $soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE;
716
+ // If utf-8 encoding is used, we will need to make sure we don't
717
+ // split multibyte characters when we wrap
718
+ $is_utf8 = (strtolower($this->CharSet) == "utf-8");
719
+
720
+ $message = $this->FixEOL($message);
721
+ if (substr($message, -1) == $this->LE) {
722
+ $message = substr($message, 0, -1);
723
+ }
724
+
725
+ $line = explode($this->LE, $message);
726
+ $message = '';
727
+ for ($i=0 ;$i < count($line); $i++) {
728
+ $line_part = explode(' ', $line[$i]);
729
+ $buf = '';
730
+ for ($e = 0; $e<count($line_part); $e++) {
731
+ $word = $line_part[$e];
732
+ if ($qp_mode and (strlen($word) > $length)) {
733
+ $space_left = $length - strlen($buf) - 1;
734
+ if ($e != 0) {
735
+ if ($space_left > 20) {
736
+ $len = $space_left;
737
+ if ($is_utf8) {
738
+ $len = $this->UTF8CharBoundary($word, $len);
739
+ } elseif (substr($word, $len - 1, 1) == "=") {
740
+ $len--;
741
+ } elseif (substr($word, $len - 2, 1) == "=") {
742
+ $len -= 2;
743
+ }
744
+ $part = substr($word, 0, $len);
745
+ $word = substr($word, $len);
746
+ $buf .= ' ' . $part;
747
+ $message .= $buf . sprintf("=%s", $this->LE);
748
+ } else {
749
+ $message .= $buf . $soft_break;
750
+ }
751
+ $buf = '';
752
+ }
753
+ while (strlen($word) > 0) {
754
+ $len = $length;
755
+ if ($is_utf8) {
756
+ $len = $this->UTF8CharBoundary($word, $len);
757
+ } elseif (substr($word, $len - 1, 1) == "=") {
758
+ $len--;
759
+ } elseif (substr($word, $len - 2, 1) == "=") {
760
+ $len -= 2;
761
+ }
762
+ $part = substr($word, 0, $len);
763
+ $word = substr($word, $len);
764
+
765
+ if (strlen($word) > 0) {
766
+ $message .= $part . sprintf("=%s", $this->LE);
767
+ } else {
768
+ $buf = $part;
769
+ }
770
+ }
771
+ } else {
772
+ $buf_o = $buf;
773
+ $buf .= ($e == 0) ? $word : (' ' . $word);
774
+
775
+ if (strlen($buf) > $length and $buf_o != '') {
776
+ $message .= $buf_o . $soft_break;
777
+ $buf = $word;
778
+ }
779
+ }
780
+ }
781
+ $message .= $buf . $this->LE;
782
+ }
783
+
784
+ return $message;
785
+ }
786
+
787
+ /**
788
+ * Finds last character boundary prior to maxLength in a utf-8
789
+ * quoted (printable) encoded string.
790
+ * Original written by Colin Brown.
791
+ * @access public
792
+ * @param string $encodedText utf-8 QP text
793
+ * @param int $maxLength find last character boundary prior to this length
794
+ * @return int
795
+ */
796
+ public function UTF8CharBoundary($encodedText, $maxLength) {
797
+ $foundSplitPos = false;
798
+ $lookBack = 3;
799
+ while (!$foundSplitPos) {
800
+ $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack);
801
+ $encodedCharPos = strpos($lastChunk, "=");
802
+ if ($encodedCharPos !== false) {
803
+ // Found start of encoded character byte within $lookBack block.
804
+ // Check the encoded byte value (the 2 chars after the '=')
805
+ $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2);
806
+ $dec = hexdec($hex);
807
+ if ($dec < 128) { // Single byte character.
808
+ // If the encoded char was found at pos 0, it will fit
809
+ // otherwise reduce maxLength to start of the encoded char
810
+ $maxLength = ($encodedCharPos == 0) ? $maxLength :
811
+ $maxLength - ($lookBack - $encodedCharPos);
812
+ $foundSplitPos = true;
813
+ } elseif ($dec >= 192) { // First byte of a multi byte character
814
+ // Reduce maxLength to split at start of character
815
+ $maxLength = $maxLength - ($lookBack - $encodedCharPos);
816
+ $foundSplitPos = true;
817
+ } elseif ($dec < 192) { // Middle byte of a multi byte character, look further back
818
+ $lookBack += 3;
819
+ }
820
+ } else {
821
+ // No encoded character found
822
+ $foundSplitPos = true;
823
+ }
824
+ }
825
+ return $maxLength;
826
+ }
827
+
828
+
829
+ /**
830
+ * Set the body wrapping.
831
+ * @access public
832
+ * @return void
833
+ */
834
+ public function SetWordWrap() {
835
+ if($this->WordWrap < 1) {
836
+ return;
837
+ }
838
+
839
+ switch($this->message_type) {
840
+ case 'alt':
841
+ /* fall through */
842
+ case 'alt_attachments':
843
+ $this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap);
844
+ break;
845
+ default:
846
+ $this->Body = $this->WrapText($this->Body, $this->WordWrap);
847
+ break;
848
+ }
849
+ }
850
+
851
+ /**
852
+ * Assembles message header.
853
+ * @access public
854
+ * @return string
855
+ */
856
+ public function CreateHeader() {
857
+ $result = '';
858
+
859
+ /* Set the boundaries */
860
+ $uniq_id = md5(uniqid(time()));
861
+ $this->boundary[1] = 'b1_' . $uniq_id;
862
+ $this->boundary[2] = 'b2_' . $uniq_id;
863
+
864
+ $result .= $this->HeaderLine('Date', $this->RFCDate());
865
+ if($this->Sender == '') {
866
+ $result .= $this->HeaderLine('Return-Path', trim($this->From));
867
+ } else {
868
+ $result .= $this->HeaderLine('Return-Path', trim($this->Sender));
869
+ }
870
+
871
+ /* To be created automatically by mail() */
872
+ if($this->Mailer != 'mail') {
873
+ if(count($this->to) > 0) {
874
+ $result .= $this->AddrAppend('To', $this->to);
875
+ } elseif (count($this->cc) == 0) {
876
+ $result .= $this->HeaderLine('To', 'undisclosed-recipients:;');
877
+ }
878
+ if(count($this->cc) > 0) {
879
+ $result .= $this->AddrAppend('Cc', $this->cc);
880
+ }
881
+ }
882
+
883
+ $from = array();
884
+ $from[0][0] = trim($this->From);
885
+ $from[0][1] = $this->FromName;
886
+ $result .= $this->AddrAppend('From', $from);
887
+
888
+ /* sendmail and mail() extract Cc from the header before sending */
889
+ if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) && (count($this->cc) > 0)) {
890
+ $result .= $this->AddrAppend('Cc', $this->cc);
891
+ }
892
+
893
+ /* sendmail and mail() extract Bcc from the header before sending */
894
+ if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) && (count($this->bcc) > 0)) {
895
+ $result .= $this->AddrAppend('Bcc', $this->bcc);
896
+ }
897
+
898
+ if(count($this->ReplyTo) > 0) {
899
+ $result .= $this->AddrAppend('Reply-to', $this->ReplyTo);
900
+ }
901
+
902
+ /* mail() sets the subject itself */
903
+ if($this->Mailer != 'mail') {
904
+ $result .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader($this->Subject)));
905
+ }
906
+
907
+ if($this->MessageID != '') {
908
+ $result .= $this->HeaderLine('Message-ID',$this->MessageID);
909
+ } else {
910
+ $result .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE);
911
+ }
912
+ $result .= $this->HeaderLine('X-Priority', $this->Priority);
913
+ $result .= $this->HeaderLine('X-Mailer', 'PHPMailer (phpmailer.codeworxtech.com) [version ' . $this->Version . ']');
914
+
915
+ if($this->ConfirmReadingTo != '') {
916
+ $result .= $this->HeaderLine('Disposition-Notification-To', '<' . trim($this->ConfirmReadingTo) . '>');
917
+ }
918
+
919
+ // Add custom headers
920
+ for($index = 0; $index < count($this->CustomHeader); $index++) {
921
+ $result .= $this->HeaderLine(trim($this->CustomHeader[$index][0]), $this->EncodeHeader(trim($this->CustomHeader[$index][1])));
922
+ }
923
+ if (!$this->sign_key_file) {
924
+ $result .= $this->HeaderLine('MIME-Version', '1.0');
925
+ $result .= $this->GetMailMIME();
926
+ }
927
+
928
+ return $result;
929
+ }
930
+
931
+ /**
932
+ * Returns the message MIME.
933
+ * @access public
934
+ * @return string
935
+ */
936
+ public function GetMailMIME() {
937
+ $result = '';
938
+ switch($this->message_type) {
939
+ case 'plain':
940
+ $result .= $this->HeaderLine('Content-Transfer-Encoding', $this->Encoding);
941
+ $result .= sprintf("Content-Type: %s; charset=\"%s\"", $this->ContentType, $this->CharSet);
942
+ break;
943
+ case 'attachments':
944
+ /* fall through */
945
+ case 'alt_attachments':
946
+ if($this->InlineImageExists()){
947
+ $result .= sprintf("Content-Type: %s;%s\ttype=\"text/html\";%s\tboundary=\"%s\"%s", 'multipart/related', $this->LE, $this->LE, $this->boundary[1], $this->LE);
948
+ } else {
949
+ $result .= $this->HeaderLine('Content-Type', 'multipart/mixed;');
950
+ $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"');
951
+ }
952
+ break;
953
+ case 'alt':
954
+ $result .= $this->HeaderLine('Content-Type', 'multipart/alternative;');
955
+ $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"');
956
+ break;
957
+ }
958
+
959
+ if($this->Mailer != 'mail') {
960
+ $result .= $this->LE.$this->LE;
961
+ }
962
+
963
+ return $result;
964
+ }
965
+
966
+ /**
967
+ * Assembles the message body. Returns an empty string on failure.
968
+ * @access public
969
+ * @return string
970
+ */
971
+ public function CreateBody() {
972
+ $result = '';
973
+
974
+ if ($this->sign_key_file) {
975
+ $result .= $this->GetMailMIME();
976
+ }
977
+
978
+ $this->SetWordWrap();
979
+
980
+ switch($this->message_type) {
981
+ case 'alt':
982
+ $result .= $this->GetBoundary($this->boundary[1], '', 'text/plain', '');
983
+ $result .= $this->EncodeString($this->AltBody, $this->Encoding);
984
+ $result .= $this->LE.$this->LE;
985
+ $result .= $this->GetBoundary($this->boundary[1], '', 'text/html', '');
986
+ $result .= $this->EncodeString($this->Body, $this->Encoding);
987
+ $result .= $this->LE.$this->LE;
988
+ $result .= $this->EndBoundary($this->boundary[1]);
989
+ break;
990
+ case 'plain':
991
+ $result .= $this->EncodeString($this->Body, $this->Encoding);
992
+ break;
993
+ case 'attachments':
994
+ $result .= $this->GetBoundary($this->boundary[1], '', '', '');
995
+ $result .= $this->EncodeString($this->Body, $this->Encoding);
996
+ $result .= $this->LE;
997
+ $result .= $this->AttachAll();
998
+ break;
999
+ case 'alt_attachments':
1000
+ $result .= sprintf("--%s%s", $this->boundary[1], $this->LE);
1001
+ $result .= sprintf("Content-Type: %s;%s" . "\tboundary=\"%s\"%s", 'multipart/alternative', $this->LE, $this->boundary[2], $this->LE.$this->LE);
1002
+ $result .= $this->GetBoundary($this->boundary[2], '', 'text/plain', '') . $this->LE; // Create text body
1003
+ $result .= $this->EncodeString($this->AltBody, $this->Encoding);
1004
+ $result .= $this->LE.$this->LE;
1005
+ $result .= $this->GetBoundary($this->boundary[2], '', 'text/html', '') . $this->LE; // Create the HTML body
1006
+ $result .= $this->EncodeString($this->Body, $this->Encoding);
1007
+ $result .= $this->LE.$this->LE;
1008
+ $result .= $this->EndBoundary($this->boundary[2]);
1009
+ $result .= $this->AttachAll();
1010
+ break;
1011
+ }
1012
+
1013
+ if($this->IsError()) {
1014
+ $result = '';
1015
+ } else if ($this->sign_key_file) {
1016
+ $file = tempnam("", "mail");
1017
+ $fp = fopen($file, "w");
1018
+ fwrite($fp, $result);
1019
+ fclose($fp);
1020
+ $signed = tempnam("", "signed");
1021
+
1022
+ if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_cert_file, array("file://".$this->sign_key_file, $this->sign_key_pass), null)) {
1023
+ $fp = fopen($signed, "r");
1024
+ $result = '';
1025
+ while(!feof($fp)){
1026
+ $result = $result . fread($fp, 1024);
1027
+ }
1028
+ fclose($fp);
1029
+ } else {
1030
+ $this->SetError($this->Lang("signing").openssl_error_string());
1031
+ $result = '';
1032
+ }
1033
+
1034
+ unlink($file);
1035
+ unlink($signed);
1036
+ }
1037
+
1038
+ return $result;
1039
+ }
1040
+
1041
+ /**
1042
+ * Returns the start of a message boundary.
1043
+ * @access public
1044
+ */
1045
+ public function GetBoundary($boundary, $charSet, $contentType, $encoding) {
1046
+ $result = '';
1047
+ if($charSet == '') {
1048
+ $charSet = $this->CharSet;
1049
+ }
1050
+ if($contentType == '') {
1051
+ $contentType = $this->ContentType;
1052
+ }
1053
+ if($encoding == '') {
1054
+ $encoding = $this->Encoding;
1055
+ }
1056
+ $result .= $this->TextLine('--' . $boundary);
1057
+ $result .= sprintf("Content-Type: %s; charset = \"%s\"", $contentType, $charSet);
1058
+ $result .= $this->LE;
1059
+ $result .= $this->HeaderLine('Content-Transfer-Encoding', $encoding);
1060
+ $result .= $this->LE;
1061
+
1062
+ return $result;
1063
+ }
1064
+
1065
+ /**
1066
+ * Returns the end of a message boundary.
1067
+ * @access public
1068
+ */
1069
+ public function EndBoundary($boundary) {
1070
+ return $this->LE . '--' . $boundary . '--' . $this->LE;
1071
+ }
1072
+
1073
+ /**
1074
+ * Sets the message type.
1075
+ * @access public
1076
+ * @return void
1077
+ */
1078
+ public function SetMessageType() {
1079
+ if(count($this->attachment) < 1 && strlen($this->AltBody) < 1) {
1080
+ $this->message_type = 'plain';
1081
+ } else {
1082
+ if(count($this->attachment) > 0) {
1083
+ $this->message_type = 'attachments';
1084
+ }
1085
+ if(strlen($this->AltBody) > 0 && count($this->attachment) < 1) {
1086
+ $this->message_type = 'alt';
1087
+ }
1088
+ if(strlen($this->AltBody) > 0 && count($this->attachment) > 0) {
1089
+ $this->message_type = 'alt_attachments';
1090
+ }
1091
+ }
1092
+ }
1093
+
1094
+ /* Returns a formatted header line.
1095
+ * @access public
1096
+ * @return string
1097
+ */
1098
+ public function HeaderLine($name, $value) {
1099
+ return $name . ': ' . $value . $this->LE;
1100
+ }
1101
+
1102
+ /**
1103
+ * Returns a formatted mail line.
1104
+ * @access public
1105
+ * @return string
1106
+ */
1107
+ public function TextLine($value) {
1108
+ return $value . $this->LE;
1109
+ }
1110
+
1111
+ /////////////////////////////////////////////////
1112
+ // CLASS METHODS, ATTACHMENTS
1113
+ /////////////////////////////////////////////////
1114
+
1115
+ /**
1116
+ * Adds an attachment from a path on the filesystem.
1117
+ * Returns false if the file could not be found
1118
+ * or accessed.
1119
+ * @param string $path Path to the attachment.
1120
+ * @param string $name Overrides the attachment name.
1121
+ * @param string $encoding File encoding (see $Encoding).
1122
+ * @param string $type File extension (MIME) type.
1123
+ * @return bool
1124
+ */
1125
+ public function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') {
1126
+ if(!@is_file($path)) {
1127
+ $this->SetError($this->Lang('file_access') . $path);
1128
+ return false;
1129
+ }
1130
+
1131
+ $filename = basename($path);
1132
+ if($name == '') {
1133
+ $name = $filename;
1134
+ }
1135
+
1136
+ $cur = count($this->attachment);
1137
+ $this->attachment[$cur][0] = $path;
1138
+ $this->attachment[$cur][1] = $filename;
1139
+ $this->attachment[$cur][2] = $name;
1140
+ $this->attachment[$cur][3] = $encoding;
1141
+ $this->attachment[$cur][4] = $type;
1142
+ $this->attachment[$cur][5] = false; // isStringAttachment
1143
+ $this->attachment[$cur][6] = 'attachment';
1144
+ $this->attachment[$cur][7] = 0;
1145
+
1146
+ return true;
1147
+ }
1148
+
1149
+ /**
1150
+ * Attaches all fs, string, and binary attachments to the message.
1151
+ * Returns an empty string on failure.
1152
+ * @access public
1153
+ * @return string
1154
+ */
1155
+ public function AttachAll() {
1156
+ /* Return text of body */
1157
+ $mime = array();
1158
+
1159
+ /* Add all attachments */
1160
+ for($i = 0; $i < count($this->attachment); $i++) {
1161
+ /* Check for string attachment */
1162
+ $bString = $this->attachment[$i][5];
1163
+ if ($bString) {
1164
+ $string = $this->attachment[$i][0];
1165
+ } else {
1166
+ $path = $this->attachment[$i][0];
1167
+ }
1168
+
1169
+ $filename = $this->attachment[$i][1];
1170
+ $name = $this->attachment[$i][2];
1171
+ $encoding = $this->attachment[$i][3];
1172
+ $type = $this->attachment[$i][4];
1173
+ $disposition = $this->attachment[$i][6];
1174
+ $cid = $this->attachment[$i][7];
1175
+
1176
+ $mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE);
1177
+ //$mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $name, $this->LE);
1178
+ $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $this->EncodeHeader($this->SecureHeader($name)), $this->LE);
1179
+ $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE);
1180
+
1181
+ if($disposition == 'inline') {
1182
+ $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE);
1183
+ }
1184
+
1185
+ //$mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $name, $this->LE.$this->LE);
1186
+ $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $this->EncodeHeader($this->SecureHeader($name)), $this->LE.$this->LE);
1187
+
1188
+ /* Encode as string attachment */
1189
+ if($bString) {
1190
+ $mime[] = $this->EncodeString($string, $encoding);
1191
+ if($this->IsError()) {
1192
+ return '';
1193
+ }
1194
+ $mime[] = $this->LE.$this->LE;
1195
+ } else {
1196
+ $mime[] = $this->EncodeFile($path, $encoding);
1197
+ if($this->IsError()) {
1198
+ return '';
1199
+ }
1200
+ $mime[] = $this->LE.$this->LE;
1201
+ }
1202
+ }
1203
+
1204
+ $mime[] = sprintf("--%s--%s", $this->boundary[1], $this->LE);
1205
+
1206
+ return join('', $mime);
1207
+ }
1208
+
1209
+ /**
1210
+ * Encodes attachment in requested format. Returns an
1211
+ * empty string on failure.
1212
+ * @access public
1213
+ * @return string
1214
+ */
1215
+ public function EncodeFile ($path, $encoding = 'base64') {
1216
+ if(!@$fd = fopen($path, 'rb')) {
1217
+ $this->SetError($this->Lang('file_open') . $path);
1218
+ return '';
1219
+ }
1220
+ if (function_exists('get_magic_quotes')) {
1221
+ function get_magic_quotes() {
1222
+ return false;
1223
+ }
1224
+ }
1225
+ if (PHP_VERSION < 6) {
1226
+ $magic_quotes = get_magic_quotes_runtime();
1227
+ set_magic_quotes_runtime(0);
1228
+ }
1229
+ $file_buffer = file_get_contents($path);
1230
+ $file_buffer = $this->EncodeString($file_buffer, $encoding);
1231
+ fclose($fd);
1232
+ if (PHP_VERSION < 6) { set_magic_quotes_runtime($magic_quotes); }
1233
+ return $file_buffer;
1234
+ }
1235
+
1236
+ /**
1237
+ * Encodes string to requested format. Returns an
1238
+ * empty string on failure.
1239
+ * @access public
1240
+ * @return string
1241
+ */
1242
+ public function EncodeString ($str, $encoding = 'base64') {
1243
+ $encoded = '';
1244
+ switch(strtolower($encoding)) {
1245
+ case 'base64':
1246
+ $encoded = chunk_split(base64_encode($str), 76, $this->LE);
1247
+ break;
1248
+ case '7bit':
1249
+ case '8bit':
1250
+ $encoded = $this->FixEOL($str);
1251
+ if (substr($encoded, -(strlen($this->LE))) != $this->LE)
1252
+ $encoded .= $this->LE;
1253
+ break;
1254
+ case 'binary':
1255
+ $encoded = $str;
1256
+ break;
1257
+ case 'quoted-printable':
1258
+ $encoded = $this->EncodeQP($str);
1259
+ break;
1260
+ default:
1261
+ $this->SetError($this->Lang('encoding') . $encoding);
1262
+ break;
1263
+ }
1264
+ return $encoded;
1265
+ }
1266
+
1267
+ /**
1268
+ * Encode a header string to best of Q, B, quoted or none.
1269
+ * @access public
1270
+ * @return string
1271
+ */
1272
+ public function EncodeHeader ($str, $position = 'text') {
1273
+ $x = 0;
1274
+
1275
+ switch (strtolower($position)) {
1276
+ case 'phrase':
1277
+ if (!preg_match('/[\200-\377]/', $str)) {
1278
+ /* Can't use addslashes as we don't know what value has magic_quotes_sybase. */
1279
+ $encoded = addcslashes($str, "\0..\37\177\\\"");
1280
+ if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) {
1281
+ return ($encoded);
1282
+ } else {
1283
+ return ("\"$encoded\"");
1284
+ }
1285
+ }
1286
+ $x = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches);
1287
+ break;
1288
+ case 'comment':
1289
+ $x = preg_match_all('/[()"]/', $str, $matches);
1290
+ /* Fall-through */
1291
+ case 'text':
1292
+ default:
1293
+ $x += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
1294
+ break;
1295
+ }
1296
+
1297
+ if ($x == 0) {
1298
+ return ($str);
1299
+ }
1300
+
1301
+ $maxlen = 75 - 7 - strlen($this->CharSet);
1302
+ /* Try to select the encoding which should produce the shortest output */
1303
+ if (strlen($str)/3 < $x) {
1304
+ $encoding = 'B';
1305
+ if (function_exists('mb_strlen') && $this->HasMultiBytes($str)) {
1306
+ // Use a custom function which correctly encodes and wraps long
1307
+ // multibyte strings without breaking lines within a character
1308
+ $encoded = $this->Base64EncodeWrapMB($str);
1309
+ } else {
1310
+ $encoded = base64_encode($str);
1311
+ $maxlen -= $maxlen % 4;
1312
+ $encoded = trim(chunk_split($encoded, $maxlen, "\n"));
1313
+ }
1314
+ } else {
1315
+ $encoding = 'Q';
1316
+ $encoded = $this->EncodeQ($str, $position);
1317
+ $encoded = $this->WrapText($encoded, $maxlen, true);
1318
+ $encoded = str_replace('='.$this->LE, "\n", trim($encoded));
1319
+ }
1320
+
1321
+ $encoded = preg_replace('/^(.*)$/m', " =?".$this->CharSet."?$encoding?\\1?=", $encoded);
1322
+ $encoded = trim(str_replace("\n", $this->LE, $encoded));
1323
+
1324
+ return $encoded;
1325
+ }
1326
+
1327
+ /**
1328
+ * Checks if a string contains multibyte characters.
1329
+ * @access public
1330
+ * @param string $str multi-byte text to wrap encode
1331
+ * @return bool
1332
+ */
1333
+ public function HasMultiBytes($str) {
1334
+ if (function_exists('mb_strlen')) {
1335
+ return (strlen($str) > mb_strlen($str, $this->CharSet));
1336
+ } else { // Assume no multibytes (we can't handle without mbstring functions anyway)
1337
+ return False;
1338
+ }
1339
+ }
1340
+
1341
+ /**
1342
+ * Correctly encodes and wraps long multibyte strings for mail headers
1343
+ * without breaking lines within a character.
1344
+ * Adapted from a function by paravoid at http://uk.php.net/manual/en/function.mb-encode-mimeheader.php
1345
+ * @access public
1346
+ * @param string $str multi-byte text to wrap encode
1347
+ * @return string
1348
+ */
1349
+ public function Base64EncodeWrapMB($str) {
1350
+ $start = "=?".$this->CharSet."?B?";
1351
+ $end = "?=";
1352
+ $encoded = "";
1353
+
1354
+ $mb_length = mb_strlen($str, $this->CharSet);
1355
+ // Each line must have length <= 75, including $start and $end
1356
+ $length = 75 - strlen($start) - strlen($end);
1357
+ // Average multi-byte ratio
1358
+ $ratio = $mb_length / strlen($str);
1359
+ // Base64 has a 4:3 ratio
1360
+ $offset = $avgLength = floor($length * $ratio * .75);
1361
+
1362
+ for ($i = 0; $i < $mb_length; $i += $offset) {
1363
+ $lookBack = 0;
1364
+
1365
+ do {
1366
+ $offset = $avgLength - $lookBack;
1367
+ $chunk = mb_substr($str, $i, $offset, $this->CharSet);
1368
+ $chunk = base64_encode($chunk);
1369
+ $lookBack++;
1370
+ }
1371
+ while (strlen($chunk) > $length);
1372
+
1373
+ $encoded .= $chunk . $this->LE;
1374
+ }
1375
+
1376
+ // Chomp the last linefeed
1377
+ $encoded = substr($encoded, 0, -strlen($this->LE));
1378
+ return $encoded;
1379
+ }
1380
+
1381
+ /**
1382
+ * Encode string to quoted-printable.
1383
+ * @access public
1384
+ * @param string $string the text to encode
1385
+ * @param integer $line_max Number of chars allowed on a line before wrapping
1386
+ * @return string
1387
+ */
1388
+ public function EncodeQP( $input = '', $line_max = 76, $space_conv = false ) {
1389
+ $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
1390
+ $lines = preg_split('/(?:\r\n|\r|\n)/', $input);
1391
+ $eol = "\r\n";
1392
+ $escape = '=';
1393
+ $output = '';
1394
+ while( list(, $line) = each($lines) ) {
1395
+ $linlen = strlen($line);
1396
+ $newline = '';
1397
+ for($i = 0; $i < $linlen; $i++) {
1398
+ $c = substr( $line, $i, 1 );
1399
+ $dec = ord( $c );
1400
+ if ( ( $i == 0 ) && ( $dec == 46 ) ) { // convert first point in the line into =2E
1401
+ $c = '=2E';
1402
+ }
1403
+ if ( $dec == 32 ) {
1404
+ if ( $i == ( $linlen - 1 ) ) { // convert space at eol only
1405
+ $c = '=20';
1406
+ } else if ( $space_conv ) {
1407
+ $c = '=20';
1408
+ }
1409
+ } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required
1410
+ $h2 = floor($dec/16);
1411
+ $h1 = floor($dec%16);
1412
+ $c = $escape.$hex[$h2].$hex[$h1];
1413
+ }
1414
+ if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted
1415
+ $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay
1416
+ $newline = '';
1417
+ // check if newline first character will be point or not
1418
+ if ( $dec == 46 ) {
1419
+ $c = '=2E';
1420
+ }
1421
+ }
1422
+ $newline .= $c;
1423
+ } // end of for
1424
+ $output .= $newline.$eol;
1425
+ } // end of while
1426
+ return trim($output);
1427
+ }
1428
+
1429
+ /**
1430
+ * Encode string to q encoding.
1431
+ * @access public
1432
+ * @return string
1433
+ */
1434
+ public function EncodeQ ($str, $position = 'text') {
1435
+ /* There should not be any EOL in the string */
1436
+ $encoded = preg_replace("[\r\n]", '', $str);
1437
+
1438
+ switch (strtolower($position)) {
1439
+ case 'phrase':
1440
+ $encoded = preg_replace("/([^A-Za-z0-9!*+\/ -])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded);
1441
+ break;
1442
+ case 'comment':
1443
+ $encoded = preg_replace("/([\(\)\"])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded);
1444
+ case 'text':
1445
+ default:
1446
+ /* Replace every high ascii, control =, ? and _ characters */
1447
+ $encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e',
1448
+ "'='.sprintf('%02X', ord('\\1'))", $encoded);
1449
+ break;
1450
+ }
1451
+
1452
+ /* Replace every spaces to _ (more readable than =20) */
1453
+ $encoded = str_replace(' ', '_', $encoded);
1454
+
1455
+ return $encoded;
1456
+ }
1457
+
1458
+ /**
1459
+ * Adds a string or binary attachment (non-filesystem) to the list.
1460
+ * This method can be used to attach ascii or binary data,
1461
+ * such as a BLOB record from a database.
1462
+ * @param string $string String attachment data.
1463
+ * @param string $filename Name of the attachment.
1464
+ * @param string $encoding File encoding (see $Encoding).
1465
+ * @param string $type File extension (MIME) type.
1466
+ * @return void
1467
+ */
1468
+ public function AddStringAttachment($string, $filename, $encoding = 'base64', $type = 'application/octet-stream') {
1469
+ /* Append to $attachment array */
1470
+ $cur = count($this->attachment);
1471
+ $this->attachment[$cur][0] = $string;
1472
+ $this->attachment[$cur][1] = $filename;
1473
+ $this->attachment[$cur][2] = $filename;
1474
+ $this->attachment[$cur][3] = $encoding;
1475
+ $this->attachment[$cur][4] = $type;
1476
+ $this->attachment[$cur][5] = true; // isString
1477
+ $this->attachment[$cur][6] = 'attachment';
1478
+ $this->attachment[$cur][7] = 0;
1479
+ }
1480
+
1481
+ /**
1482
+ * Adds an embedded attachment. This can include images, sounds, and
1483
+ * just about any other document. Make sure to set the $type to an
1484
+ * image type. For JPEG images use "image/jpeg" and for GIF images
1485
+ * use "image/gif".
1486
+ * @param string $path Path to the attachment.
1487
+ * @param string $cid Content ID of the attachment. Use this to identify
1488
+ * the Id for accessing the image in an HTML form.
1489
+ * @param string $name Overrides the attachment name.
1490
+ * @param string $encoding File encoding (see $Encoding).
1491
+ * @param string $type File extension (MIME) type.
1492
+ * @return bool
1493
+ */
1494
+ public function AddEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = 'application/octet-stream') {
1495
+
1496
+ if(!@is_file($path)) {
1497
+ $this->SetError($this->Lang('file_access') . $path);
1498
+ return false;
1499
+ }
1500
+
1501
+ $filename = basename($path);
1502
+ if($name == '') {
1503
+ $name = $filename;
1504
+ }
1505
+
1506
+ /* Append to $attachment array */
1507
+ $cur = count($this->attachment);
1508
+ $this->attachment[$cur][0] = $path;
1509
+ $this->attachment[$cur][1] = $filename;
1510
+ $this->attachment[$cur][2] = $name;
1511
+ $this->attachment[$cur][3] = $encoding;
1512
+ $this->attachment[$cur][4] = $type;
1513
+ $this->attachment[$cur][5] = false;
1514
+ $this->attachment[$cur][6] = 'inline';
1515
+ $this->attachment[$cur][7] = $cid;
1516
+
1517
+ return true;
1518
+ }
1519
+
1520
+ /**
1521
+ * Returns true if an inline attachment is present.
1522
+ * @access public
1523
+ * @return bool
1524
+ */
1525
+ public function InlineImageExists() {
1526
+ $result = false;
1527
+ for($i = 0; $i < count($this->attachment); $i++) {
1528
+ if($this->attachment[$i][6] == 'inline') {
1529
+ $result = true;
1530
+ break;
1531
+ }
1532
+ }
1533
+
1534
+ return $result;
1535
+ }
1536
+
1537
+ /////////////////////////////////////////////////
1538
+ // CLASS METHODS, MESSAGE RESET
1539
+ /////////////////////////////////////////////////
1540
+
1541
+ /**
1542
+ * Clears all recipients assigned in the TO array. Returns void.
1543
+ * @return void
1544
+ */
1545
+ public function ClearAddresses() {
1546
+ $this->to = array();
1547
+ }
1548
+
1549
+ /**
1550
+ * Clears all recipients assigned in the CC array. Returns void.
1551
+ * @return void
1552
+ */
1553
+ public function ClearCCs() {
1554
+ $this->cc = array();
1555
+ }
1556
+
1557
+ /**
1558
+ * Clears all recipients assigned in the BCC array. Returns void.
1559
+ * @return void
1560
+ */
1561
+ public function ClearBCCs() {
1562
+ $this->bcc = array();
1563
+ }
1564
+
1565
+ /**
1566
+ * Clears all recipients assigned in the ReplyTo array. Returns void.
1567
+ * @return void
1568
+ */
1569
+ public function ClearReplyTos() {
1570
+ $this->ReplyTo = array();
1571
+ }
1572
+
1573
+ /**
1574
+ * Clears all recipients assigned in the TO, CC and BCC
1575
+ * array. Returns void.
1576
+ * @return void
1577
+ */
1578
+ public function ClearAllRecipients() {
1579
+ $this->to = array();
1580
+ $this->cc = array();
1581
+ $this->bcc = array();
1582
+ }
1583
+
1584
+ /**
1585
+ * Clears all previously set filesystem, string, and binary
1586
+ * attachments. Returns void.
1587
+ * @return void
1588
+ */
1589
+ public function ClearAttachments() {
1590
+ $this->attachment = array();
1591
+ }
1592
+
1593
+ /**
1594
+ * Clears all custom headers. Returns void.
1595
+ * @return void
1596
+ */
1597
+ public function ClearCustomHeaders() {
1598
+ $this->CustomHeader = array();
1599
+ }
1600
+
1601
+ /////////////////////////////////////////////////
1602
+ // CLASS METHODS, MISCELLANEOUS
1603
+ /////////////////////////////////////////////////
1604
+
1605
+ /**
1606
+ * Adds the error message to the error container.
1607
+ * Returns void.
1608
+ * @access private
1609
+ * @return void
1610
+ */
1611
+ private function SetError($msg) {
1612
+ $this->error_count++;
1613
+ $this->ErrorInfo = $msg;
1614
+ }
1615
+
1616
+ /**
1617
+ * Returns the proper RFC 822 formatted date.
1618
+ * @access private
1619
+ * @return string
1620
+ */
1621
+ private static function RFCDate() {
1622
+ $tz = date('Z');
1623
+ $tzs = ($tz < 0) ? '-' : '+';
1624
+ $tz = abs($tz);
1625
+ $tz = (int)($tz/3600)*100 + ($tz%3600)/60;
1626
+ $result = sprintf("%s %s%04d", date('D, j M Y H:i:s'), $tzs, $tz);
1627
+
1628
+ return $result;
1629
+ }
1630
+
1631
+ /**
1632
+ * Returns the server hostname or 'localhost.localdomain' if unknown.
1633
+ * @access private
1634
+ * @return string
1635
+ */
1636
+ private function ServerHostname() {
1637
+ if (!empty($this->Hostname)) {
1638
+ $result = $this->Hostname;
1639
+ } elseif (isset($_SERVER['SERVER_NAME'])) {
1640
+ $result = $_SERVER['SERVER_NAME'];
1641
+ } else {
1642
+ $result = "localhost.localdomain";
1643
+ }
1644
+
1645
+ return $result;
1646
+ }
1647
+
1648
+ /**
1649
+ * Returns a message in the appropriate language.
1650
+ * @access private
1651
+ * @return string
1652
+ */
1653
+ private function Lang($key) {
1654
+ if(count($this->language) < 1) {
1655
+ $this->SetLanguage('en'); // set the default language
1656
+ }
1657
+
1658
+ if(isset($this->language[$key])) {
1659
+ return $this->language[$key];
1660
+ } else {
1661
+ return 'Language string failed to load: ' . $key;
1662
+ }
1663
+ }
1664
+
1665
+ /**
1666
+ * Returns true if an error occurred.
1667
+ * @access public
1668
+ * @return bool
1669
+ */
1670
+ public function IsError() {
1671
+ return ($this->error_count > 0);
1672
+ }
1673
+
1674
+ /**
1675
+ * Changes every end of line from CR or LF to CRLF.
1676
+ * @access private
1677
+ * @return string
1678
+ */
1679
+ private function FixEOL($str) {
1680
+ $str = str_replace("\r\n", "\n", $str);
1681
+ $str = str_replace("\r", "\n", $str);
1682
+ $str = str_replace("\n", $this->LE, $str);
1683
+ return $str;
1684
+ }
1685
+
1686
+ /**
1687
+ * Adds a custom header.
1688
+ * @access public
1689
+ * @return void
1690
+ */
1691
+ public function AddCustomHeader($custom_header) {
1692
+ $this->CustomHeader[] = explode(':', $custom_header, 2);
1693
+ }
1694
+
1695
+ /**
1696
+ * Evaluates the message and returns modifications for inline images and backgrounds
1697
+ * @access public
1698
+ * @return $message
1699
+ */
1700
+ public function MsgHTML($message,$basedir='') {
1701
+ preg_match_all("/(src|background)=\"(.*)\"/Ui", $message, $images);
1702
+ if(isset($images[2])) {
1703
+ foreach($images[2] as $i => $url) {
1704
+ // do not change urls for absolute images (thanks to corvuscorax)
1705
+ if (!preg_match('/^[A-z][A-z]*:\/\//',$url)) {
1706
+ $filename = basename($url);
1707
+ $directory = dirname($url);
1708
+ ($directory == '.')?$directory='':'';
1709
+ $cid = 'cid:' . md5($filename);
1710
+ $fileParts = split("\.", $filename);
1711
+ $ext = $fileParts[1];
1712
+ $mimeType = $this->_mime_types($ext);
1713
+ if ( strlen($basedir) > 1 && substr($basedir,-1) != '/') { $basedir .= '/'; }
1714
+ if ( strlen($directory) > 1 && substr($basedir,-1) != '/') { $directory .= '/'; }
1715
+ $this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, 'base64', $mimeType);
1716
+ if ( $this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, 'base64',$mimeType) ) {
1717
+ $message = preg_replace("/".$images[1][$i]."=\"".preg_quote($url, '/')."\"/Ui", $images[1][$i]."=\"".$cid."\"", $message);
1718
+ }
1719
+ }
1720
+ }
1721
+ }
1722
+ $this->IsHTML(true);
1723
+ $this->Body = $message;
1724
+ $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s','',$message)));
1725
+ if ( !empty($textMsg) && empty($this->AltBody) ) {
1726
+ $this->AltBody = $textMsg;
1727
+ }
1728
+ if ( empty($this->AltBody) ) {
1729
+ $this->AltBody = 'To view this email message, open the email in with HTML compatibility!' . "\n\n";
1730
+ }
1731
+ }
1732
+
1733
+ /**
1734
+ * Gets the mime type of the embedded or inline image
1735
+ * @access public
1736
+ * @return mime type of ext
1737
+ */
1738
+ public function _mime_types($ext = '') {
1739
+ $mimes = array(
1740
+ 'hqx' => 'application/mac-binhex40',
1741
+ 'cpt' => 'application/mac-compactpro',
1742
+ 'doc' => 'application/msword',
1743
+ 'bin' => 'application/macbinary',
1744
+ 'dms' => 'application/octet-stream',
1745
+ 'lha' => 'application/octet-stream',
1746
+ 'lzh' => 'application/octet-stream',
1747
+ 'exe' => 'application/octet-stream',
1748
+ 'class' => 'application/octet-stream',
1749
+ 'psd' => 'application/octet-stream',
1750
+ 'so' => 'application/octet-stream',
1751
+ 'sea' => 'application/octet-stream',
1752
+ 'dll' => 'application/octet-stream',
1753
+ 'oda' => 'application/oda',
1754
+ 'pdf' => 'application/pdf',
1755
+ 'ai' => 'application/postscript',
1756
+ 'eps' => 'application/postscript',
1757
+ 'ps' => 'application/postscript',
1758
+ 'smi' => 'application/smil',
1759
+ 'smil' => 'application/smil',
1760
+ 'mif' => 'application/vnd.mif',
1761
+ 'xls' => 'application/vnd.ms-excel',
1762
+ 'ppt' => 'application/vnd.ms-powerpoint',
1763
+ 'wbxml' => 'application/vnd.wap.wbxml',
1764
+ 'wmlc' => 'application/vnd.wap.wmlc',
1765
+ 'dcr' => 'application/x-director',
1766
+ 'dir' => 'application/x-director',
1767
+ 'dxr' => 'application/x-director',
1768
+ 'dvi' => 'application/x-dvi',
1769
+ 'gtar' => 'application/x-gtar',
1770
+ 'php' => 'application/x-httpd-php',
1771
+ 'php4' => 'application/x-httpd-php',
1772
+ 'php3' => 'application/x-httpd-php',
1773
+ 'phtml' => 'application/x-httpd-php',
1774
+ 'phps' => 'application/x-httpd-php-source',
1775
+ 'js' => 'application/x-javascript',
1776
+ 'swf' => 'application/x-shockwave-flash',
1777
+ 'sit' => 'application/x-stuffit',
1778
+ 'tar' => 'application/x-tar',
1779
+ 'tgz' => 'application/x-tar',
1780
+ 'xhtml' => 'application/xhtml+xml',
1781
+ 'xht' => 'application/xhtml+xml',
1782
+ 'zip' => 'application/zip',
1783
+ 'mid' => 'audio/midi',
1784
+ 'midi' => 'audio/midi',
1785
+ 'mpga' => 'audio/mpeg',
1786
+ 'mp2' => 'audio/mpeg',
1787
+ 'mp3' => 'audio/mpeg',
1788
+ 'aif' => 'audio/x-aiff',
1789
+ 'aiff' => 'audio/x-aiff',
1790
+ 'aifc' => 'audio/x-aiff',
1791
+ 'ram' => 'audio/x-pn-realaudio',
1792
+ 'rm' => 'audio/x-pn-realaudio',
1793
+ 'rpm' => 'audio/x-pn-realaudio-plugin',
1794
+ 'ra' => 'audio/x-realaudio',
1795
+ 'rv' => 'video/vnd.rn-realvideo',
1796
+ 'wav' => 'audio/x-wav',
1797
+ 'bmp' => 'image/bmp',
1798
+ 'gif' => 'image/gif',
1799
+ 'jpeg' => 'image/jpeg',
1800
+ 'jpg' => 'image/jpeg',
1801
+ 'jpe' => 'image/jpeg',
1802
+ 'png' => 'image/png',
1803
+ 'tiff' => 'image/tiff',
1804
+ 'tif' => 'image/tiff',
1805
+ 'css' => 'text/css',
1806
+ 'html' => 'text/html',
1807
+ 'htm' => 'text/html',
1808
+ 'shtml' => 'text/html',
1809
+ 'txt' => 'text/plain',
1810
+ 'text' => 'text/plain',
1811
+ 'log' => 'text/plain',
1812
+ 'rtx' => 'text/richtext',
1813
+ 'rtf' => 'text/rtf',
1814
+ 'xml' => 'text/xml',
1815
+ 'xsl' => 'text/xml',
1816
+ 'mpeg' => 'video/mpeg',
1817
+ 'mpg' => 'video/mpeg',
1818
+ 'mpe' => 'video/mpeg',
1819
+ 'qt' => 'video/quicktime',
1820
+ 'mov' => 'video/quicktime',
1821
+ 'avi' => 'video/x-msvideo',
1822
+ 'movie' => 'video/x-sgi-movie',
1823
+ 'doc' => 'application/msword',
1824
+ 'word' => 'application/msword',
1825
+ 'xl' => 'application/excel',
1826
+ 'eml' => 'message/rfc822'
1827
+ );
1828
+ return ( ! isset($mimes[strtolower($ext)])) ? 'application/octet-stream' : $mimes[strtolower($ext)];
1829
+ }
1830
+
1831
+ /**
1832
+ * Set (or reset) Class Objects (variables)
1833
+ *
1834
+ * Usage Example:
1835
+ * $page->set('X-Priority', '3');
1836
+ *
1837
+ * @access public
1838
+ * @param string $name Parameter Name
1839
+ * @param mixed $value Parameter Value
1840
+ * NOTE: will not work with arrays, there are no arrays to set/reset
1841
+ */
1842
+ public function set ( $name, $value = '' ) {
1843
+ if ( isset($this->$name) ) {
1844
+ $this->$name = $value;
1845
+ } else {
1846
+ $this->SetError('Cannot set or reset variable ' . $name);
1847
+ return false;
1848
+ }
1849
+ }
1850
+
1851
+ /**
1852
+ * Read a file from a supplied filename and return it.
1853
+ *
1854
+ * @access public
1855
+ * @param string $filename Parameter File Name
1856
+ */
1857
+ public function getFile($filename) {
1858
+ $return = '';
1859
+ if ($fp = fopen($filename, 'rb')) {
1860
+ while (!feof($fp)) {
1861
+ $return .= fread($fp, 1024);
1862
+ }
1863
+ fclose($fp);
1864
+ return $return;
1865
+ } else {
1866
+ return false;
1867
+ }
1868
+ }
1869
+
1870
+ /**
1871
+ * Strips newlines to prevent header injection.
1872
+ * @access public
1873
+ * @param string $str String
1874
+ * @return string
1875
+ */
1876
+ public function SecureHeader($str) {
1877
+ $str = trim($str);
1878
+ $str = str_replace("\r", "", $str);
1879
+ $str = str_replace("\n", "", $str);
1880
+ return $str;
1881
+ }
1882
+
1883
+ /**
1884
+ * Set the private key file and password to sign the message.
1885
+ *
1886
+ * @access public
1887
+ * @param string $key_filename Parameter File Name
1888
+ * @param string $key_pass Password for private key
1889
+ */
1890
+ public function Sign($cert_filename, $key_filename, $key_pass) {
1891
+ $this->sign_cert_file = $cert_filename;
1892
+ $this->sign_key_file = $key_filename;
1893
+ $this->sign_key_pass = $key_pass;
1894
+ }
1895
+ }
1896
+
1897
+ ?>
app/code/community/MageTracking/TicketSystem/Helper/Smtp.php ADDED
@@ -0,0 +1,1113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*~ class.smtp.php
3
+ .---------------------------------------------------------------------------.
4
+ | Software: PHPMailer - PHP email class |
5
+ | Version: 2.2.1 |
6
+ | Contact: via sourceforge.net support pages (also www.codeworxtech.com) |
7
+ | Info: http://phpmailer.sourceforge.net |
8
+ | Support: http://sourceforge.net/projects/phpmailer/ |
9
+ | ------------------------------------------------------------------------- |
10
+ | Author: Andy Prevost (project admininistrator) |
11
+ | Author: Brent R. Matzelle (original founder) |
12
+ | Copyright (c) 2004-2007, Andy Prevost. All Rights Reserved. |
13
+ | Copyright (c) 2001-2003, Brent R. Matzelle |
14
+ | ------------------------------------------------------------------------- |
15
+ | License: Distributed under the Lesser General Public License (LGPL) |
16
+ | http://www.gnu.org/copyleft/lesser.html |
17
+ | This program is distributed in the hope that it will be useful - WITHOUT |
18
+ | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
19
+ | FITNESS FOR A PARTICULAR PURPOSE. |
20
+ | ------------------------------------------------------------------------- |
21
+ | We offer a number of paid services (www.codeworxtech.com): |
22
+ | - Web Hosting on highly optimized fast and secure servers |
23
+ | - Technology Consulting |
24
+ | - Oursourcing (highly qualified programmers and graphic designers) |
25
+ '---------------------------------------------------------------------------'
26
+
27
+ /**
28
+ * SMTP is rfc 821 compliant and implements all the rfc 821 SMTP
29
+ * commands except TURN which will always return a not implemented
30
+ * error. SMTP also provides some utility methods for sending mail
31
+ * to an SMTP server.
32
+ * @package PHPMailer
33
+ * @author Chris Ryan
34
+ */
35
+ echo "stop4";die();
36
+ class SMTP {
37
+ /**
38
+ * SMTP server port
39
+ * @var int
40
+ */
41
+ public $SMTP_PORT = 25;
42
+
43
+ /**
44
+ * SMTP reply line ending
45
+ * @var string
46
+ */
47
+ public $CRLF = "\r\n";
48
+
49
+ /**
50
+ * Sets whether debugging is turned on
51
+ * @var bool
52
+ */
53
+ public $do_debug; // the level of debug to perform
54
+
55
+ /**
56
+ * Sets VERP use on/off (default is off)
57
+ * @var bool
58
+ */
59
+ public $do_verp = false;
60
+
61
+ /**#@+
62
+ * @access private
63
+ */
64
+ private $smtp_conn; // the socket to the server
65
+ private $error; // error if any on the last call
66
+ private $helo_rply; // the reply the server sent to us for HELO
67
+ /**#@-*/
68
+
69
+ /**
70
+ * Initialize the class so that the data is in a known state.
71
+ * @access public
72
+ * @return void
73
+ */
74
+ public function __construct() {
75
+ $this->smtp_conn = 0;
76
+ $this->error = null;
77
+ $this->helo_rply = null;
78
+
79
+ $this->do_debug = 0;
80
+ }
81
+
82
+ /*************************************************************
83
+ * CONNECTION FUNCTIONS *
84
+ ***********************************************************/
85
+
86
+ /**
87
+ * Connect to the server specified on the port specified.
88
+ * If the port is not specified use the default SMTP_PORT.
89
+ * If tval is specified then a connection will try and be
90
+ * established with the server for that number of seconds.
91
+ * If tval is not specified the default is 30 seconds to
92
+ * try on the connection.
93
+ *
94
+ * SMTP CODE SUCCESS: 220
95
+ * SMTP CODE FAILURE: 421
96
+ * @access public
97
+ * @return bool
98
+ */
99
+ public function Connect($host,$port=0,$tval=30) {
100
+ /* set the error val to null so there is no confusion */
101
+ $this->error = null;
102
+
103
+ /* make sure we are __not__ connected */
104
+ if($this->connected()) {
105
+ /* ok we are connected! what should we do?
106
+ * for now we will just give an error saying we
107
+ * are already connected
108
+ */
109
+ $this->error = array("error" => "Already connected to a server");
110
+ return false;
111
+ }
112
+
113
+ if(empty($port)) {
114
+ $port = $this->SMTP_PORT;
115
+ }
116
+
117
+ /* connect to the smtp server */
118
+ $this->smtp_conn = fsockopen($host, // the host of the server
119
+ $port, // the port to use
120
+ $errno, // error number if any
121
+ $errstr, // error message if any
122
+ $tval); // give up after ? secs
123
+ /* verify we connected properly */
124
+ if(empty($this->smtp_conn)) {
125
+ $this->error = array("error" => "Failed to connect to server",
126
+ "errno" => $errno,
127
+ "errstr" => $errstr);
128
+ if($this->do_debug >= 1) {
129
+ echo "SMTP -> ERROR: " . $this->error["error"] .
130
+ ": $errstr ($errno)" . $this->CRLF;
131
+ }
132
+ return false;
133
+ }
134
+
135
+ /* sometimes the SMTP server takes a little longer to respond
136
+ * so we will give it a longer timeout for the first read
137
+ * - Windows still does not have support for this timeout function
138
+ */
139
+ if(substr(PHP_OS, 0, 3) != "WIN")
140
+ socket_set_timeout($this->smtp_conn, $tval, 0);
141
+
142
+ /* get any announcement stuff */
143
+ $announce = $this->get_lines();
144
+
145
+ /* set the timeout of any socket functions at 1/10 of a second */
146
+ //if(function_exists("socket_set_timeout"))
147
+ // socket_set_timeout($this->smtp_conn, 0, 100000);
148
+
149
+ if($this->do_debug >= 2) {
150
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $announce;
151
+ }
152
+
153
+ return true;
154
+ }
155
+
156
+ /**
157
+ * Initiate a TSL communication with the server.
158
+ *
159
+ * SMTP CODE 220 Ready to start TLS
160
+ * SMTP CODE 501 Syntax error (no parameters allowed)
161
+ * SMTP CODE 454 TLS not available due to temporary reason
162
+ * @access public
163
+ * @return bool success
164
+ */
165
+ public function StartTLS() {
166
+ $this->error = null; # to avoid confusion
167
+
168
+ if(!$this->connected()) {
169
+ $this->error = array("error" => "Called StartTLS() without being connected");
170
+ return false;
171
+ }
172
+
173
+ fputs($this->smtp_conn,"STARTTLS" . $extra . $this->CRLF);
174
+
175
+ $rply = $this->get_lines();
176
+ $code = substr($rply,0,3);
177
+
178
+ if($this->do_debug >= 2) {
179
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
180
+ }
181
+
182
+ if($code != 220) {
183
+ $this->error =
184
+ array("error" => "STARTTLS not accepted from server",
185
+ "smtp_code" => $code,
186
+ "smtp_msg" => substr($rply,4));
187
+ if($this->do_debug >= 1) {
188
+ echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF;
189
+ }
190
+ return false;
191
+ }
192
+
193
+ //Begin encrypted connection
194
+ if(!stream_socket_enable_crypto($this->smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
195
+ return false;
196
+ }
197
+
198
+ return true;
199
+ }
200
+
201
+ /**
202
+ * Performs SMTP authentication. Must be run after running the
203
+ * Hello() method. Returns true if successfully authenticated.
204
+ * @access public
205
+ * @return bool
206
+ */
207
+ public function Authenticate($username, $password) {
208
+ // Start authentication
209
+ fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF);
210
+
211
+ $rply = $this->get_lines();
212
+ $code = substr($rply,0,3);
213
+
214
+ if($code != 334) {
215
+ $this->error =
216
+ array("error" => "AUTH not accepted from server",
217
+ "smtp_code" => $code,
218
+ "smtp_msg" => substr($rply,4));
219
+ if($this->do_debug >= 1) {
220
+ echo "SMTP -> ERROR: " . $this->error["error"] .
221
+ ": " . $rply . $this->CRLF;
222
+ }
223
+ return false;
224
+ }
225
+
226
+ // Send encoded username
227
+ fputs($this->smtp_conn, base64_encode($username) . $this->CRLF);
228
+
229
+ $rply = $this->get_lines();
230
+ $code = substr($rply,0,3);
231
+
232
+ if($code != 334) {
233
+ $this->error =
234
+ array("error" => "Username not accepted from server",
235
+ "smtp_code" => $code,
236
+ "smtp_msg" => substr($rply,4));
237
+ if($this->do_debug >= 1) {
238
+ echo "SMTP -> ERROR: " . $this->error["error"] .
239
+ ": " . $rply . $this->CRLF;
240
+ }
241
+ return false;
242
+ }
243
+
244
+ // Send encoded password
245
+ fputs($this->smtp_conn, base64_encode($password) . $this->CRLF);
246
+
247
+ $rply = $this->get_lines();
248
+ $code = substr($rply,0,3);
249
+
250
+ if($code != 235) {
251
+ $this->error =
252
+ array("error" => "Password not accepted from server",
253
+ "smtp_code" => $code,
254
+ "smtp_msg" => substr($rply,4));
255
+ if($this->do_debug >= 1) {
256
+ echo "SMTP -> ERROR: " . $this->error["error"] .
257
+ ": " . $rply . $this->CRLF;
258
+ }
259
+ return false;
260
+ }
261
+
262
+ return true;
263
+ }
264
+
265
+ /**
266
+ * Returns true if connected to a server otherwise false
267
+ * @access public
268
+ * @return bool
269
+ */
270
+ public function Connected() {
271
+ if(!empty($this->smtp_conn)) {
272
+ $sock_status = socket_get_status($this->smtp_conn);
273
+ if($sock_status["eof"]) {
274
+ // hmm this is an odd situation... the socket is
275
+ // valid but we are not connected anymore
276
+ if($this->do_debug >= 1) {
277
+ echo "SMTP -> NOTICE:" . $this->CRLF .
278
+ "EOF caught while checking if connected";
279
+ }
280
+ $this->Close();
281
+ return false;
282
+ }
283
+ return true; // everything looks good
284
+ }
285
+ return false;
286
+ }
287
+
288
+ /**
289
+ * Closes the socket and cleans up the state of the class.
290
+ * It is not considered good to use this function without
291
+ * first trying to use QUIT.
292
+ * @access public
293
+ * @return void
294
+ */
295
+ public function Close() {
296
+ $this->error = null; // so there is no confusion
297
+ $this->helo_rply = null;
298
+ if(!empty($this->smtp_conn)) {
299
+ // close the connection and cleanup
300
+ fclose($this->smtp_conn);
301
+ $this->smtp_conn = 0;
302
+ }
303
+ }
304
+
305
+ /***************************************************************
306
+ * SMTP COMMANDS *
307
+ *************************************************************/
308
+
309
+ /**
310
+ * Issues a data command and sends the msg_data to the server
311
+ * finializing the mail transaction. $msg_data is the message
312
+ * that is to be send with the headers. Each header needs to be
313
+ * on a single line followed by a <CRLF> with the message headers
314
+ * and the message body being seperated by and additional <CRLF>.
315
+ *
316
+ * Implements rfc 821: DATA <CRLF>
317
+ *
318
+ * SMTP CODE INTERMEDIATE: 354
319
+ * [data]
320
+ * <CRLF>.<CRLF>
321
+ * SMTP CODE SUCCESS: 250
322
+ * SMTP CODE FAILURE: 552,554,451,452
323
+ * SMTP CODE FAILURE: 451,554
324
+ * SMTP CODE ERROR : 500,501,503,421
325
+ * @access public
326
+ * @return bool
327
+ */
328
+ public function Data($msg_data) {
329
+ $this->error = null; // so no confusion is caused
330
+
331
+ if(!$this->connected()) {
332
+ $this->error = array(
333
+ "error" => "Called Data() without being connected");
334
+ return false;
335
+ }
336
+
337
+ fputs($this->smtp_conn,"DATA" . $this->CRLF);
338
+
339
+ $rply = $this->get_lines();
340
+ $code = substr($rply,0,3);
341
+
342
+ if($this->do_debug >= 2) {
343
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
344
+ }
345
+
346
+ if($code != 354) {
347
+ $this->error =
348
+ array("error" => "DATA command not accepted from server",
349
+ "smtp_code" => $code,
350
+ "smtp_msg" => substr($rply,4));
351
+ if($this->do_debug >= 1) {
352
+ echo "SMTP -> ERROR: " . $this->error["error"] .
353
+ ": " . $rply . $this->CRLF;
354
+ }
355
+ return false;
356
+ }
357
+
358
+ /* the server is ready to accept data!
359
+ * according to rfc 821 we should not send more than 1000
360
+ * including the CRLF
361
+ * characters on a single line so we will break the data up
362
+ * into lines by \r and/or \n then if needed we will break
363
+ * each of those into smaller lines to fit within the limit.
364
+ * in addition we will be looking for lines that start with
365
+ * a period '.' and append and additional period '.' to that
366
+ * line. NOTE: this does not count towards are limit.
367
+ */
368
+
369
+ // normalize the line breaks so we know the explode works
370
+ $msg_data = str_replace("\r\n","\n",$msg_data);
371
+ $msg_data = str_replace("\r","\n",$msg_data);
372
+ $lines = explode("\n",$msg_data);
373
+
374
+ /* we need to find a good way to determine is headers are
375
+ * in the msg_data or if it is a straight msg body
376
+ * currently I am assuming rfc 822 definitions of msg headers
377
+ * and if the first field of the first line (':' sperated)
378
+ * does not contain a space then it _should_ be a header
379
+ * and we can process all lines before a blank "" line as
380
+ * headers.
381
+ */
382
+ $field = substr($lines[0],0,strpos($lines[0],":"));
383
+ $in_headers = false;
384
+ if(!empty($field) && !strstr($field," ")) {
385
+ $in_headers = true;
386
+ }
387
+
388
+ $max_line_length = 998; // used below; set here for ease in change
389
+
390
+ while(list(,$line) = @each($lines)) {
391
+ $lines_out = null;
392
+ if($line == "" && $in_headers) {
393
+ $in_headers = false;
394
+ }
395
+ // ok we need to break this line up into several smaller lines
396
+ while(strlen($line) > $max_line_length) {
397
+ $pos = strrpos(substr($line,0,$max_line_length)," ");
398
+
399
+ // Patch to fix DOS attack
400
+ if(!$pos) {
401
+ $pos = $max_line_length - 1;
402
+ $lines_out[] = substr($line,0,$pos);
403
+ $line = substr($line,$pos);
404
+ } else {
405
+ $lines_out[] = substr($line,0,$pos);
406
+ $line = substr($line,$pos + 1);
407
+ }
408
+
409
+ /* if we are processing headers we need to
410
+ * add a LWSP-char to the front of the new line
411
+ * rfc 822 on long msg headers
412
+ */
413
+ if($in_headers) {
414
+ $line = "\t" . $line;
415
+ }
416
+ }
417
+ $lines_out[] = $line;
418
+
419
+ // now send the lines to the server
420
+ while(list(,$line_out) = @each($lines_out)) {
421
+ if(strlen($line_out) > 0)
422
+ {
423
+ if(substr($line_out, 0, 1) == ".") {
424
+ $line_out = "." . $line_out;
425
+ }
426
+ }
427
+ fputs($this->smtp_conn,$line_out . $this->CRLF);
428
+ }
429
+ }
430
+
431
+ // ok all the message data has been sent so lets get this
432
+ // over with aleady
433
+ fputs($this->smtp_conn, $this->CRLF . "." . $this->CRLF);
434
+
435
+ $rply = $this->get_lines();
436
+ $code = substr($rply,0,3);
437
+
438
+ if($this->do_debug >= 2) {
439
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
440
+ }
441
+
442
+ if($code != 250) {
443
+ $this->error =
444
+ array("error" => "DATA not accepted from server",
445
+ "smtp_code" => $code,
446
+ "smtp_msg" => substr($rply,4));
447
+ if($this->do_debug >= 1) {
448
+ echo "SMTP -> ERROR: " . $this->error["error"] .
449
+ ": " . $rply . $this->CRLF;
450
+ }
451
+ return false;
452
+ }
453
+ return true;
454
+ }
455
+
456
+ /**
457
+ * Expand takes the name and asks the server to list all the
458
+ * people who are members of the _list_. Expand will return
459
+ * back and array of the result or false if an error occurs.
460
+ * Each value in the array returned has the format of:
461
+ * [ <full-name> <sp> ] <path>
462
+ * The definition of <path> is defined in rfc 821
463
+ *
464
+ * Implements rfc 821: EXPN <SP> <string> <CRLF>
465
+ *
466
+ * SMTP CODE SUCCESS: 250
467
+ * SMTP CODE FAILURE: 550
468
+ * SMTP CODE ERROR : 500,501,502,504,421
469
+ * @access public
470
+ * @return string array
471
+ */
472
+ public function Expand($name) {
473
+ $this->error = null; // so no confusion is caused
474
+
475
+ if(!$this->connected()) {
476
+ $this->error = array(
477
+ "error" => "Called Expand() without being connected");
478
+ return false;
479
+ }
480
+
481
+ fputs($this->smtp_conn,"EXPN " . $name . $this->CRLF);
482
+
483
+ $rply = $this->get_lines();
484
+ $code = substr($rply,0,3);
485
+
486
+ if($this->do_debug >= 2) {
487
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
488
+ }
489
+
490
+ if($code != 250) {
491
+ $this->error =
492
+ array("error" => "EXPN not accepted from server",
493
+ "smtp_code" => $code,
494
+ "smtp_msg" => substr($rply,4));
495
+ if($this->do_debug >= 1) {
496
+ echo "SMTP -> ERROR: " . $this->error["error"] .
497
+ ": " . $rply . $this->CRLF;
498
+ }
499
+ return false;
500
+ }
501
+
502
+ // parse the reply and place in our array to return to user
503
+ $entries = explode($this->CRLF,$rply);
504
+ while(list(,$l) = @each($entries)) {
505
+ $list[] = substr($l,4);
506
+ }
507
+
508
+ return $list;
509
+ }
510
+
511
+ /**
512
+ * Sends the HELO command to the smtp server.
513
+ * This makes sure that we and the server are in
514
+ * the same known state.
515
+ *
516
+ * Implements from rfc 821: HELO <SP> <domain> <CRLF>
517
+ *
518
+ * SMTP CODE SUCCESS: 250
519
+ * SMTP CODE ERROR : 500, 501, 504, 421
520
+ * @access public
521
+ * @return bool
522
+ */
523
+ public function Hello($host="") {
524
+ $this->error = null; // so no confusion is caused
525
+
526
+ if(!$this->connected()) {
527
+ $this->error = array(
528
+ "error" => "Called Hello() without being connected");
529
+ return false;
530
+ }
531
+
532
+ // if a hostname for the HELO was not specified determine
533
+ //a suitable one to send
534
+ if(empty($host)) {
535
+ // we need to determine some sort of appopiate default
536
+ // to send to the server
537
+ $host = "localhost";
538
+ }
539
+
540
+ // Send extended hello first (RFC 2821)
541
+ if(!$this->SendHello("EHLO", $host))
542
+ {
543
+ if(!$this->SendHello("HELO", $host))
544
+ return false;
545
+ }
546
+
547
+ return true;
548
+ }
549
+
550
+ /**
551
+ * Sends a HELO/EHLO command.
552
+ * @access private
553
+ * @return bool
554
+ */
555
+ private function SendHello($hello, $host) {
556
+ fputs($this->smtp_conn, $hello . " " . $host . $this->CRLF);
557
+
558
+ $rply = $this->get_lines();
559
+ $code = substr($rply,0,3);
560
+
561
+ if($this->do_debug >= 2) {
562
+ echo "SMTP -> FROM SERVER: " . $this->CRLF . $rply;
563
+ }
564
+
565
+ if($code != 250) {
566
+ $this->error =
567
+ array("error" => $hello . " not accepted from server",
568
+ "smtp_code" => $code,
569
+ "smtp_msg" => substr($rply,4));
570
+ if($this->do_debug >= 1) {
571
+ echo "SMTP -> ERROR: " . $this->error["error"] .
572
+ ": " . $rply . $this->CRLF;
573
+ }
574
+ return false;
575
+ }
576
+
577
+ $this->helo_rply = $rply;
578
+
579
+ return true;
580
+ }
581
+
582
+ /**
583
+ * Gets help information on the keyword specified. If the keyword
584
+ * is not specified then returns generic help, ussually contianing
585
+ * A list of keywords that help is available on. This function
586
+ * returns the results back to the user. It is up to the user to
587
+ * handle the returned data. If an error occurs then false is
588
+ * returned with $this->error set appropiately.
589
+ *
590
+ * Implements rfc 821: HELP [ <SP> <string> ] <CRLF>
591
+ *
592
+ * SMTP CODE SUCCESS: 211,214
593
+ * SMTP CODE ERROR : 500,501,502,504,421
594
+ * @access public
595
+ * @return string
596
+ */
597
+ public function Help($keyword="") {
598
+ $this->error = null; // to avoid confusion
599
+
600
+ if(!$this->connected()) {
601
+ $this->error = array(
602
+ "error" => "Called Help() without being connected");
603
+ return false;
604
+ }
605
+
606
+ $extra = "";
607
+ if(!empty($keyword)) {
608
+ $extra = " " . $keyword;
609
+ }
610
+
611
+ fputs($this->smtp_conn,"HELP" . $extra . $this->CRLF);
612
+
613
+ $rply = $this->get_lines();
614
+ $code = substr($rply,0,3);
615
+
616
+ if($this->do_debug >= 2) {
617
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
618
+ }
619
+
620
+ if($code != 211 && $code != 214) {
621
+ $this->error =
622
+ array("error" => "HELP not accepted from server",
623
+ "smtp_code" => $code,
624
+ "smtp_msg" => substr($rply,4));
625
+ if($this->do_debug >= 1) {
626
+ echo "SMTP -> ERROR: " . $this->error["error"] .
627
+ ": " . $rply . $this->CRLF;
628
+ }
629
+ return false;
630
+ }
631
+
632
+ return $rply;
633
+ }
634
+
635
+ /**
636
+ * Starts a mail transaction from the email address specified in
637
+ * $from. Returns true if successful or false otherwise. If True
638
+ * the mail transaction is started and then one or more Recipient
639
+ * commands may be called followed by a Data command.
640
+ *
641
+ * Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF>
642
+ *
643
+ * SMTP CODE SUCCESS: 250
644
+ * SMTP CODE SUCCESS: 552,451,452
645
+ * SMTP CODE SUCCESS: 500,501,421
646
+ * @access public
647
+ * @return bool
648
+ */
649
+ public function Mail($from) {
650
+ $this->error = null; // so no confusion is caused
651
+
652
+ if(!$this->connected()) {
653
+ $this->error = array(
654
+ "error" => "Called Mail() without being connected");
655
+ return false;
656
+ }
657
+
658
+ $useVerp = ($this->do_verp ? "XVERP" : "");
659
+ fputs($this->smtp_conn,"MAIL FROM:<" . $from . ">" . $useVerp . $this->CRLF);
660
+
661
+ $rply = $this->get_lines();
662
+ $code = substr($rply,0,3);
663
+
664
+ if($this->do_debug >= 2) {
665
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
666
+ }
667
+
668
+ if($code != 250) {
669
+ $this->error =
670
+ array("error" => "MAIL not accepted from server",
671
+ "smtp_code" => $code,
672
+ "smtp_msg" => substr($rply,4));
673
+ if($this->do_debug >= 1) {
674
+ echo "SMTP -> ERROR: " . $this->error["error"] .
675
+ ": " . $rply . $this->CRLF;
676
+ }
677
+ return false;
678
+ }
679
+ return true;
680
+ }
681
+
682
+ /**
683
+ * Sends the command NOOP to the SMTP server.
684
+ *
685
+ * Implements from rfc 821: NOOP <CRLF>
686
+ *
687
+ * SMTP CODE SUCCESS: 250
688
+ * SMTP CODE ERROR : 500, 421
689
+ * @access public
690
+ * @return bool
691
+ */
692
+ public function Noop() {
693
+ $this->error = null; // so no confusion is caused
694
+
695
+ if(!$this->connected()) {
696
+ $this->error = array(
697
+ "error" => "Called Noop() without being connected");
698
+ return false;
699
+ }
700
+
701
+ fputs($this->smtp_conn,"NOOP" . $this->CRLF);
702
+
703
+ $rply = $this->get_lines();
704
+ $code = substr($rply,0,3);
705
+
706
+ if($this->do_debug >= 2) {
707
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
708
+ }
709
+
710
+ if($code != 250) {
711
+ $this->error =
712
+ array("error" => "NOOP not accepted from server",
713
+ "smtp_code" => $code,
714
+ "smtp_msg" => substr($rply,4));
715
+ if($this->do_debug >= 1) {
716
+ echo "SMTP -> ERROR: " . $this->error["error"] .
717
+ ": " . $rply . $this->CRLF;
718
+ }
719
+ return false;
720
+ }
721
+ return true;
722
+ }
723
+
724
+ /**
725
+ * Sends the quit command to the server and then closes the socket
726
+ * if there is no error or the $close_on_error argument is true.
727
+ *
728
+ * Implements from rfc 821: QUIT <CRLF>
729
+ *
730
+ * SMTP CODE SUCCESS: 221
731
+ * SMTP CODE ERROR : 500
732
+ * @access public
733
+ * @return bool
734
+ */
735
+ public function Quit($close_on_error=true) {
736
+ $this->error = null; // so there is no confusion
737
+
738
+ if(!$this->connected()) {
739
+ $this->error = array(
740
+ "error" => "Called Quit() without being connected");
741
+ return false;
742
+ }
743
+
744
+ // send the quit command to the server
745
+ fputs($this->smtp_conn,"quit" . $this->CRLF);
746
+
747
+ // get any good-bye messages
748
+ $byemsg = $this->get_lines();
749
+
750
+ if($this->do_debug >= 2) {
751
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $byemsg;
752
+ }
753
+
754
+ $rval = true;
755
+ $e = null;
756
+
757
+ $code = substr($byemsg,0,3);
758
+ if($code != 221) {
759
+ // use e as a tmp var cause Close will overwrite $this->error
760
+ $e = array("error" => "SMTP server rejected quit command",
761
+ "smtp_code" => $code,
762
+ "smtp_rply" => substr($byemsg,4));
763
+ $rval = false;
764
+ if($this->do_debug >= 1) {
765
+ echo "SMTP -> ERROR: " . $e["error"] . ": " .
766
+ $byemsg . $this->CRLF;
767
+ }
768
+ }
769
+
770
+ if(empty($e) || $close_on_error) {
771
+ $this->Close();
772
+ }
773
+
774
+ return $rval;
775
+ }
776
+
777
+ /**
778
+ * Sends the command RCPT to the SMTP server with the TO: argument of $to.
779
+ * Returns true if the recipient was accepted false if it was rejected.
780
+ *
781
+ * Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF>
782
+ *
783
+ * SMTP CODE SUCCESS: 250,251
784
+ * SMTP CODE FAILURE: 550,551,552,553,450,451,452
785
+ * SMTP CODE ERROR : 500,501,503,421
786
+ * @access public
787
+ * @return bool
788
+ */
789
+ public function Recipient($to) {
790
+ $this->error = null; // so no confusion is caused
791
+
792
+ if(!$this->connected()) {
793
+ $this->error = array(
794
+ "error" => "Called Recipient() without being connected");
795
+ return false;
796
+ }
797
+
798
+ fputs($this->smtp_conn,"RCPT TO:<" . $to . ">" . $this->CRLF);
799
+
800
+ $rply = $this->get_lines();
801
+ $code = substr($rply,0,3);
802
+
803
+ if($this->do_debug >= 2) {
804
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
805
+ }
806
+
807
+ if($code != 250 && $code != 251) {
808
+ $this->error =
809
+ array("error" => "RCPT not accepted from server",
810
+ "smtp_code" => $code,
811
+ "smtp_msg" => substr($rply,4));
812
+ if($this->do_debug >= 1) {
813
+ echo "SMTP -> ERROR: " . $this->error["error"] .
814
+ ": " . $rply . $this->CRLF;
815
+ }
816
+ return false;
817
+ }
818
+ return true;
819
+ }
820
+
821
+ /**
822
+ * Sends the RSET command to abort and transaction that is
823
+ * currently in progress. Returns true if successful false
824
+ * otherwise.
825
+ *
826
+ * Implements rfc 821: RSET <CRLF>
827
+ *
828
+ * SMTP CODE SUCCESS: 250
829
+ * SMTP CODE ERROR : 500,501,504,421
830
+ * @access public
831
+ * @return bool
832
+ */
833
+ public function Reset() {
834
+ $this->error = null; // so no confusion is caused
835
+
836
+ if(!$this->connected()) {
837
+ $this->error = array(
838
+ "error" => "Called Reset() without being connected");
839
+ return false;
840
+ }
841
+
842
+ fputs($this->smtp_conn,"RSET" . $this->CRLF);
843
+
844
+ $rply = $this->get_lines();
845
+ $code = substr($rply,0,3);
846
+
847
+ if($this->do_debug >= 2) {
848
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
849
+ }
850
+
851
+ if($code != 250) {
852
+ $this->error =
853
+ array("error" => "RSET failed",
854
+ "smtp_code" => $code,
855
+ "smtp_msg" => substr($rply,4));
856
+ if($this->do_debug >= 1) {
857
+ echo "SMTP -> ERROR: " . $this->error["error"] .
858
+ ": " . $rply . $this->CRLF;
859
+ }
860
+ return false;
861
+ }
862
+
863
+ return true;
864
+ }
865
+
866
+ /**
867
+ * Starts a mail transaction from the email address specified in
868
+ * $from. Returns true if successful or false otherwise. If True
869
+ * the mail transaction is started and then one or more Recipient
870
+ * commands may be called followed by a Data command. This command
871
+ * will send the message to the users terminal if they are logged
872
+ * in.
873
+ *
874
+ * Implements rfc 821: SEND <SP> FROM:<reverse-path> <CRLF>
875
+ *
876
+ * SMTP CODE SUCCESS: 250
877
+ * SMTP CODE SUCCESS: 552,451,452
878
+ * SMTP CODE SUCCESS: 500,501,502,421
879
+ * @access public
880
+ * @return bool
881
+ */
882
+ public function Send($from) {
883
+ $this->error = null; // so no confusion is caused
884
+
885
+ if(!$this->connected()) {
886
+ $this->error = array(
887
+ "error" => "Called Send() without being connected");
888
+ return false;
889
+ }
890
+
891
+ fputs($this->smtp_conn,"SEND FROM:" . $from . $this->CRLF);
892
+
893
+ $rply = $this->get_lines();
894
+ $code = substr($rply,0,3);
895
+
896
+ if($this->do_debug >= 2) {
897
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
898
+ }
899
+
900
+ if($code != 250) {
901
+ $this->error =
902
+ array("error" => "SEND not accepted from server",
903
+ "smtp_code" => $code,
904
+ "smtp_msg" => substr($rply,4));
905
+ if($this->do_debug >= 1) {
906
+ echo "SMTP -> ERROR: " . $this->error["error"] .
907
+ ": " . $rply . $this->CRLF;
908
+ }
909
+ return false;
910
+ }
911
+ return true;
912
+ }
913
+
914
+ /**
915
+ * Starts a mail transaction from the email address specified in
916
+ * $from. Returns true if successful or false otherwise. If True
917
+ * the mail transaction is started and then one or more Recipient
918
+ * commands may be called followed by a Data command. This command
919
+ * will send the message to the users terminal if they are logged
920
+ * in and send them an email.
921
+ *
922
+ * Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF>
923
+ *
924
+ * SMTP CODE SUCCESS: 250
925
+ * SMTP CODE SUCCESS: 552,451,452
926
+ * SMTP CODE SUCCESS: 500,501,502,421
927
+ * @access public
928
+ * @return bool
929
+ */
930
+ public function SendAndMail($from) {
931
+ $this->error = null; // so no confusion is caused
932
+
933
+ if(!$this->connected()) {
934
+ $this->error = array(
935
+ "error" => "Called SendAndMail() without being connected");
936
+ return false;
937
+ }
938
+
939
+ fputs($this->smtp_conn,"SAML FROM:" . $from . $this->CRLF);
940
+
941
+ $rply = $this->get_lines();
942
+ $code = substr($rply,0,3);
943
+
944
+ if($this->do_debug >= 2) {
945
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
946
+ }
947
+
948
+ if($code != 250) {
949
+ $this->error =
950
+ array("error" => "SAML not accepted from server",
951
+ "smtp_code" => $code,
952
+ "smtp_msg" => substr($rply,4));
953
+ if($this->do_debug >= 1) {
954
+ echo "SMTP -> ERROR: " . $this->error["error"] .
955
+ ": " . $rply . $this->CRLF;
956
+ }
957
+ return false;
958
+ }
959
+ return true;
960
+ }
961
+
962
+ /**
963
+ * Starts a mail transaction from the email address specified in
964
+ * $from. Returns true if successful or false otherwise. If True
965
+ * the mail transaction is started and then one or more Recipient
966
+ * commands may be called followed by a Data command. This command
967
+ * will send the message to the users terminal if they are logged
968
+ * in or mail it to them if they are not.
969
+ *
970
+ * Implements rfc 821: SOML <SP> FROM:<reverse-path> <CRLF>
971
+ *
972
+ * SMTP CODE SUCCESS: 250
973
+ * SMTP CODE SUCCESS: 552,451,452
974
+ * SMTP CODE SUCCESS: 500,501,502,421
975
+ * @access public
976
+ * @return bool
977
+ */
978
+ public function SendOrMail($from) {
979
+ $this->error = null; // so no confusion is caused
980
+
981
+ if(!$this->connected()) {
982
+ $this->error = array(
983
+ "error" => "Called SendOrMail() without being connected");
984
+ return false;
985
+ }
986
+
987
+ fputs($this->smtp_conn,"SOML FROM:" . $from . $this->CRLF);
988
+
989
+ $rply = $this->get_lines();
990
+ $code = substr($rply,0,3);
991
+
992
+ if($this->do_debug >= 2) {
993
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
994
+ }
995
+
996
+ if($code != 250) {
997
+ $this->error =
998
+ array("error" => "SOML not accepted from server",
999
+ "smtp_code" => $code,
1000
+ "smtp_msg" => substr($rply,4));
1001
+ if($this->do_debug >= 1) {
1002
+ echo "SMTP -> ERROR: " . $this->error["error"] .
1003
+ ": " . $rply . $this->CRLF;
1004
+ }
1005
+ return false;
1006
+ }
1007
+ return true;
1008
+ }
1009
+
1010
+ /**
1011
+ * This is an optional command for SMTP that this class does not
1012
+ * support. This method is here to make the RFC821 Definition
1013
+ * complete for this class and __may__ be implimented in the future
1014
+ *
1015
+ * Implements from rfc 821: TURN <CRLF>
1016
+ *
1017
+ * SMTP CODE SUCCESS: 250
1018
+ * SMTP CODE FAILURE: 502
1019
+ * SMTP CODE ERROR : 500, 503
1020
+ * @access public
1021
+ * @return bool
1022
+ */
1023
+ public function Turn() {
1024
+ $this->error = array("error" => "This method, TURN, of the SMTP ".
1025
+ "is not implemented");
1026
+ if($this->do_debug >= 1) {
1027
+ echo "SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF;
1028
+ }
1029
+ return false;
1030
+ }
1031
+
1032
+ /**
1033
+ * Verifies that the name is recognized by the server.
1034
+ * Returns false if the name could not be verified otherwise
1035
+ * the response from the server is returned.
1036
+ *
1037
+ * Implements rfc 821: VRFY <SP> <string> <CRLF>
1038
+ *
1039
+ * SMTP CODE SUCCESS: 250,251
1040
+ * SMTP CODE FAILURE: 550,551,553
1041
+ * SMTP CODE ERROR : 500,501,502,421
1042
+ * @access public
1043
+ * @return int
1044
+ */
1045
+ public function Verify($name) {
1046
+ $this->error = null; // so no confusion is caused
1047
+
1048
+ if(!$this->connected()) {
1049
+ $this->error = array(
1050
+ "error" => "Called Verify() without being connected");
1051
+ return false;
1052
+ }
1053
+
1054
+ fputs($this->smtp_conn,"VRFY " . $name . $this->CRLF);
1055
+
1056
+ $rply = $this->get_lines();
1057
+ $code = substr($rply,0,3);
1058
+
1059
+ if($this->do_debug >= 2) {
1060
+ echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
1061
+ }
1062
+
1063
+ if($code != 250 && $code != 251) {
1064
+ $this->error =
1065
+ array("error" => "VRFY failed on name '$name'",
1066
+ "smtp_code" => $code,
1067
+ "smtp_msg" => substr($rply,4));
1068
+ if($this->do_debug >= 1) {
1069
+ echo "SMTP -> ERROR: " . $this->error["error"] .
1070
+ ": " . $rply . $this->CRLF;
1071
+ }
1072
+ return false;
1073
+ }
1074
+ return $rply;
1075
+ }
1076
+
1077
+ /*******************************************************************
1078
+ * INTERNAL FUNCTIONS *
1079
+ ******************************************************************/
1080
+
1081
+ /**
1082
+ * Read in as many lines as possible
1083
+ * either before eof or socket timeout occurs on the operation.
1084
+ * With SMTP we can tell if we have more lines to read if the
1085
+ * 4th character is '-' symbol. If it is a space then we don't
1086
+ * need to read anything else.
1087
+ * @access private
1088
+ * @return string
1089
+ */
1090
+ private function get_lines() {
1091
+ $data = "";
1092
+ while($str = @fgets($this->smtp_conn,515)) {
1093
+ if($this->do_debug >= 4) {
1094
+ echo "SMTP -> get_lines(): \$data was \"$data\"" .
1095
+ $this->CRLF;
1096
+ echo "SMTP -> get_lines(): \$str is \"$str\"" .
1097
+ $this->CRLF;
1098
+ }
1099
+ $data .= $str;
1100
+ if($this->do_debug >= 4) {
1101
+ echo "SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF;
1102
+ }
1103
+ // if the 4th character is a space then we are done reading
1104
+ // so just break the loop
1105
+ if(substr($str,3,1) == " ") { break; }
1106
+ }
1107
+ return $data;
1108
+ }
1109
+
1110
+ }
1111
+
1112
+
1113
+ ?>
app/code/community/MageTracking/TicketSystem/Helper/Ticket.php ADDED
@@ -0,0 +1,789 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+
5
+ * Sofhere SofTicket Magento Component
6
+
7
+ *
8
+
9
+ * NOTICE OF LICENSE
10
+
11
+ *
12
+
13
+ * This source file is subject to the GNU (3.0)
14
+
15
+ * that is bundled with this package in the file LICENSE.txt.
16
+
17
+ * It is also available through the world-wide-web at this URL:
18
+
19
+ * http://opensource.org/licenses/gpl-3.0.html
20
+
21
+ * If you did not receive a copy of the license and are unable to
22
+
23
+ * obtain it through the world-wide-web, please send an email
24
+
25
+ * to license@sofhere.com so we can send you a copy immediately.
26
+
27
+ *
28
+
29
+ * @category design_default
30
+
31
+ * @author sofhere.com
32
+
33
+ * @package Sofhere_SofTicket
34
+
35
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
36
+
37
+ * @version 1.0
38
+
39
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
40
+
41
+ */
42
+
43
+
44
+
45
+
46
+
47
+ require_once 'Mail_data.php';
48
+
49
+
50
+
51
+ class Ticket {
52
+
53
+
54
+
55
+
56
+
57
+ /* ID of the ticket.
58
+
59
+ * @var int
60
+
61
+ */
62
+
63
+ public $id = 0;
64
+
65
+
66
+
67
+
68
+
69
+ /* Name of the person filling out the ticket.
70
+
71
+ * @var int
72
+
73
+ */
74
+
75
+ public $name = '';
76
+
77
+
78
+
79
+ /**
80
+
81
+ * Email of the person filling out the ticket.
82
+
83
+ * @var int
84
+
85
+ */
86
+
87
+ public $email = '';
88
+
89
+
90
+
91
+ /**
92
+
93
+ * Phone of the person filling out the ticket.
94
+
95
+ * @var int
96
+
97
+ */
98
+
99
+ public $phone = '';
100
+
101
+
102
+
103
+ /**
104
+
105
+ * Category of the ticket.
106
+
107
+ * @var int
108
+
109
+ */
110
+
111
+ public $category = 0;
112
+
113
+
114
+
115
+ /**
116
+
117
+ * Email priority (1 = High, 2 = Normal, 3 = low).
118
+
119
+ * @var int
120
+
121
+ */
122
+
123
+ public $priority = 2;
124
+
125
+
126
+
127
+ /**
128
+
129
+ * IP of the client.
130
+
131
+ * @var int
132
+
133
+ */
134
+
135
+ public $ip = '';
136
+
137
+
138
+
139
+ /**
140
+
141
+ * Message coming the first time from the user.
142
+
143
+ * @var int
144
+
145
+ */
146
+
147
+ public $message = '';
148
+
149
+
150
+
151
+ /**
152
+
153
+ * Subject of the Message.
154
+
155
+ * @var int
156
+
157
+ */
158
+
159
+ public $subject = '';
160
+
161
+
162
+
163
+ /**
164
+
165
+ * Subject of the Message.
166
+
167
+ * @var int
168
+
169
+ */
170
+
171
+ public $timestamp = '';
172
+
173
+
174
+
175
+
176
+
177
+ function create($sendmail = TRUE) {
178
+
179
+
180
+
181
+
182
+
183
+ if ($this->id && $this->priority && $this->category && $this->subject && $this->name && $this->email){
184
+
185
+ $db_settings=Mage::helper('ticketsystem')->getMailDBSettings();
186
+
187
+
188
+
189
+ if (($this->ip != '') && ($_SERVER['REMOTE_ADDR'] != ''))
190
+
191
+ $this->ip = $_SERVER['REMOTE_ADDR'];
192
+
193
+
194
+
195
+ if (($this->priority == '') || ($this->priority < 0 || $this->priority > 3))
196
+
197
+ $this->priority = 2;
198
+
199
+
200
+
201
+ $this->priority = preg_replace('/\D+/', '', $this->priority); //sanitise
202
+
203
+ $this->category = preg_replace('/\D+/', '', $this->category); //sanitise
204
+
205
+ $this->timestamp = now();
206
+
207
+
208
+
209
+
210
+
211
+ // insert a new ticket...
212
+
213
+ $model = Mage::getModel('ticketsystem/ticketsystem');
214
+
215
+ $model->setData('ID',$this->id);
216
+
217
+ $model->setData('subject',$this->subject);
218
+
219
+ $model->setData('name',$this->name);
220
+
221
+ $model->setData('email',strtolower($this->email));
222
+
223
+ $model->setData('cat',$this->category);
224
+
225
+ $model->setData('priority',$this->priority);
226
+
227
+ $model->setData('phone',$this->phone);
228
+
229
+ $model->setData('orders',$this->orders);
230
+
231
+ $model->setData('ip',$this->ip);
232
+
233
+ $model->setData('message',$this->message);
234
+
235
+ $model->setData('timestamp',$this->timestamp);
236
+
237
+ $model->save();
238
+
239
+
240
+
241
+ $c = Mage::getModel('ticketsystem/cats')->load($this->category);
242
+
243
+ $mailsubj = $db_settings['ticket_subj'];
244
+
245
+ $mailmsg = $db_settings['ticket_msg'];
246
+
247
+ $signature= $c->getData('signature');
248
+
249
+
250
+
251
+ if ($sendmail) { //should we send?
252
+
253
+ $mail=new Mail_data();
254
+
255
+ $mail->sendEmail($this->id, $this->subject, $this->name, $this->email, $c, $this->priority, $this->message,$mailsubj, $mailmsg, $signature);
256
+
257
+ }
258
+
259
+ return true;
260
+
261
+ }else
262
+
263
+ return false;
264
+
265
+ }
266
+
267
+
268
+
269
+
270
+
271
+ function close($ticketID) {
272
+
273
+ $this->changeStatus($ticketID, 'closed');
274
+
275
+ }
276
+
277
+ function reopen($ticketID) {
278
+
279
+ $this->changeStatus($ticketID, 'reopened');
280
+
281
+ }
282
+
283
+ function putonHold($ticketID) {
284
+
285
+ $this->changeStatus($ticketID, 'onhold');
286
+
287
+ }
288
+
289
+ function delete($ticketID) {
290
+
291
+ $ticketID = preg_replace('/\D+/', '', $ticketID); //sanitise
292
+
293
+ // delete ticket
294
+
295
+ $model = Mage::getModel('ticketsystem/ticketsystem');
296
+
297
+ $model->setId($ticketID)->delete();
298
+
299
+
300
+
301
+ // delete messages
302
+
303
+ $model = Mage::getModel('ticketsystem/messages');
304
+
305
+ $model->setTicket($ticketID)->delete();
306
+
307
+
308
+
309
+ // delete answers
310
+
311
+ $model = Mage::getModel('ticketsystem/answers');
312
+
313
+ foreach ($model->getCollection()->addFieldToFilter('ticket',$ticketID)->load() as $item){
314
+
315
+ $ans_id=$item->getData('ID');
316
+
317
+ if ($ans_id){
318
+
319
+ Mage::getModel('ticketsystem/answers')
320
+
321
+ ->setId($ans_id)
322
+
323
+ ->delete();
324
+
325
+ }
326
+
327
+ }
328
+
329
+ }
330
+
331
+
332
+
333
+ function changeStatus($ticketId, $status){
334
+
335
+ $ticketId = preg_replace('/\D+/', '', $ticketId); //sanitise
336
+
337
+ $model = Mage::getModel('ticketsystem/ticketsystem')->load($ticketId);
338
+
339
+ $model->setData('status',$status);
340
+
341
+ $model->update();
342
+
343
+ }
344
+
345
+
346
+
347
+ function changeRep($ticketId, $repId){
348
+
349
+ $ticketId = preg_replace('/\D+/', '', $ticketId); //sanitise
350
+
351
+ $model = Mage::getModel('ticketsystem/ticketsystem')->load($ticketId);
352
+
353
+ $model->setData('rep',$repId);
354
+
355
+ $model->update();
356
+
357
+ }
358
+
359
+
360
+
361
+ function postMessage($ticketId, $message, $header = '', $notifyuser = true, $newstatus = 'new') {
362
+
363
+
364
+
365
+ $db_settings=Mage::helper('ticketsystem')->getMailDBSettings();
366
+
367
+
368
+
369
+ $ticketId = preg_replace('/\D+/', '', $ticketId); //sanitise
370
+
371
+ $errors = array();
372
+
373
+
374
+
375
+ $this->reopen($ticketId);
376
+
377
+ $header = $db_settings['save_headers'] ? $header : '';
378
+
379
+
380
+
381
+ $model = Mage::getModel('ticketsystem/messages');
382
+
383
+ $model->setData('headers',$header);
384
+
385
+ $model->setData('message',$message);
386
+
387
+ $model->setData('ticket',$ticketId);
388
+
389
+ $model->setData('timestamp',now());
390
+
391
+ $id=$model->save()->getId();
392
+
393
+
394
+
395
+
396
+
397
+ //update ticket status
398
+
399
+ $this->changeStatus($ticketId, $newstatus);
400
+
401
+
402
+
403
+ if ($db_settings['alert_new']) {
404
+
405
+ $mail = new Mail_data();
406
+
407
+ $mail->emailAlert($ticketId, $id);
408
+
409
+ }
410
+
411
+ if ($db_settings['message_response'] && $notifyuser) {
412
+
413
+ $t = Mage::getModel('ticketsystem/ticketsystem')->load($ticketId);
414
+
415
+ $c = Mage::getModel('ticketsystem/cats')->load($t->getData('cat'));
416
+
417
+
418
+
419
+ $mailsubj = $db_settings['message_subj'];
420
+
421
+ $mailmsg = $db_settings['message_msg'];
422
+
423
+ $signature= $c->getData('signature');
424
+
425
+ $mail=new Mail_data();
426
+
427
+ $mail->sendEmail($t->getData('ID'), $t->getData('subject'), $t->getData('name'), $t->getData('email'), $c, $t->getData('priority'), $t->getData('message'), $mailsubj, $mailmsg, $signature);
428
+
429
+ }
430
+
431
+ }
432
+
433
+ function postAnswer($message, $repid, $rep_name, $ticketid, $newstatus) {
434
+
435
+
436
+
437
+ $db_settings=Mage::helper('ticketsystem')->getMailDBSettings();
438
+
439
+
440
+
441
+ $msg_res = Mage::getModel('ticketsystem/messages')->load($ticketid,'ticket');
442
+
443
+ $msgid= $msg_res->getData('ID');
444
+
445
+
446
+
447
+ $t = Mage::getModel('ticketsystem/ticketsystem')->load($ticketid);
448
+
449
+
450
+
451
+ $this->changeStatus($ticketid, $newstatus);
452
+
453
+ if (! ($rep_name == 'Administrator')) {
454
+
455
+ if($repid > 0)
456
+
457
+ $this->changeRep($ticketid, $repid);
458
+
459
+ }
460
+
461
+
462
+
463
+ $answers=Mage::getModel('ticketsystem/answers');
464
+
465
+ $answers->setData('ticket',$ticketid);
466
+
467
+ $answers->setData('message',$message);
468
+
469
+ $answers->setData('reference',$msgid);
470
+
471
+ $answers->setData('rep',$repid);
472
+
473
+ $answers->save();
474
+
475
+
476
+
477
+ $catid=$t->getData('cat');
478
+
479
+ $cat_res=Mage::getModel('ticketsystem/cats')->load($catid);
480
+
481
+ $answer_subj = $db_settings['answer_subj'];
482
+
483
+ $answer_msg = $db_settings['answer_msg'];
484
+
485
+ $signature= $cat_res->getData('signature');
486
+
487
+ $mail=new Mail_data();
488
+
489
+ $mail->sendEmail($ticketid, $t->getData('subject'), $t->getData('name'), $t->getData('email'), $cat_res, $t->getData('priority'), $message, $answer_subj, $answer_msg, $signature, true);
490
+
491
+ }
492
+
493
+
494
+
495
+
496
+
497
+ function postPrivMessage($ticket, $repid, $msg) {
498
+
499
+ $db_settings=Mage::helper('ticketsystem')->getMailDBSettings();
500
+
501
+ $id = preg_replace('/\D+/', '', $id); //sanitise
502
+
503
+ $errors = array();
504
+
505
+ $model=Mage::getModel('ticketsystem/privmsg');
506
+
507
+ $model->setData('ticket',$ticket);
508
+
509
+ $model->setData('rep',$repid);
510
+
511
+ $model->setData('message',$msg);
512
+
513
+ $model->setData('timestamp',now());
514
+
515
+ $model->save();
516
+
517
+ return $errors ? $errors : $id;
518
+
519
+ }
520
+
521
+
522
+
523
+
524
+
525
+ function transCatTicket($tid, $cid, $add_msg = false, $alert = false) {
526
+
527
+
528
+
529
+ $db_settings=Mage::helper('ticketsystem')->getMailDBSettings();
530
+
531
+
532
+
533
+ $tid = preg_replace('/\D+/', '', $tid); //sanitise
534
+
535
+ $cid = preg_replace('/\D+/', '', $cid); //sanitise
536
+
537
+
538
+
539
+ $add_msg = $add_msg ? ': ' . $add_msg : '';
540
+
541
+ $add_msg = preg_replace("/%20/", " ", $add_msg);
542
+
543
+
544
+
545
+
546
+
547
+ $model=Mage::getModel('ticketsystem/ticketsystem')->load($tid);
548
+
549
+ $catFrom=Mage::getModel('ticketsystem/cats')->load($model->getData('cat'));
550
+
551
+ $cat2=Mage::getModel('ticketsystem/cats')->load($cid);
552
+
553
+ $trans_msg = 'From ' . $catFrom->getData('name') . ' ' . ' (' . format_time($db_settings['time_format']) . ') ' . $add_msg;
554
+
555
+ $model->setData('cat',$cid);
556
+
557
+ $model->setData('trans_msg', $trans_msg);
558
+
559
+ $model->update();
560
+
561
+
562
+
563
+ if ($db_settings['trans_response'] && !$cat2->getData('hidden') && $alert) {
564
+
565
+ $trans_subj = $db_settings['trans_subj'];
566
+
567
+ $trans_msg = $db_settings['trans_msg'];
568
+
569
+ $vars = array();
570
+
571
+ $vars['ticket'] = $tid;
572
+
573
+ $vars['subject'] = $model->getData('subject');
574
+
575
+ $vars['category'] = $cat2->getData('name');
576
+
577
+ $vars['cat_name'] = $cat2->getData('name');
578
+
579
+ $vars['name'] = $model->getData('name');
580
+
581
+ $vars['email'] = $model->getData('email');
582
+
583
+ $vars['status'] = $model->getData('status');
584
+
585
+ $vars['trans_msg'] = $add_msg;
586
+
587
+ //$trans_msg = addRemoveTag($trans_msg, $db_settings);
588
+
589
+ $trans_msg = addSig($cat2->getData('signature'), $trans_msg, $db_settings);
590
+
591
+ $trans_subj = keywords($trans_subj, $vars, $db_settings);
592
+
593
+ $text = keywords($trans_msg, $vars,$db_settings);
594
+
595
+ if ($html = getHTML($trans_msg, $vars, 'email-example.html',$db_settings)) {
596
+
597
+ $body = array();
598
+
599
+ $body['text'] = $text;
600
+
601
+ $body['html'] = $html;
602
+
603
+ } else {
604
+
605
+ $body = $text;
606
+
607
+ }
608
+
609
+ //notify user
610
+
611
+ $from = '"' . $cat2->getData('name') . '" <' . $cat2->getData('email') . '>';
612
+
613
+ $mail=new Mail_data();
614
+
615
+ //$mail->sendEmail($tid,$model->getData('subject'),$model->getData('name'),$model->getData('email'), $cat2, $model->getData('priority'),$add_msg,$trans_subj,$text,'',true);
616
+ send_mail($model->getData('email'), $trans_subj, $body, $from, $model->getData('priority'),$db_settings);
617
+ //notify admin
618
+
619
+ $from = $db_settings['alert_email'];
620
+
621
+ $mail=new Mail_data();
622
+
623
+ foreach($mail->getEmails($cat2->getData('ID')) as $to) {
624
+
625
+ if (!empty($to)) {
626
+
627
+ $mail=new Mail_data();
628
+
629
+ send_mail($to, $trans_subj, $body, $from, $model->getData('priority'),$db_settings);
630
+
631
+ }
632
+
633
+ }
634
+
635
+ }
636
+
637
+ }
638
+
639
+
640
+
641
+
642
+
643
+ function transRepTicket($tid, $rid, $alert = false, $rep_name) {
644
+
645
+ $db_settings=Mage::helper('ticketsystem')->getMailDBSettings();
646
+
647
+ // Fetch Admin user details
648
+ $query = "SELECT * from admin_user where user_id=$rid";
649
+ $data = Mage::getSingleton('core/resource')->getConnection('core_read')->fetchAll($query);
650
+
651
+ $tid = preg_replace('/\D+/', '', $tid); //sanitise
652
+
653
+ $rid = preg_replace('/\D+/', '', $rid); //sanitise
654
+
655
+ if (empty($tid)) {
656
+
657
+ return;
658
+
659
+ }
660
+
661
+ if (empty($rid)) {
662
+
663
+ return;
664
+
665
+ }
666
+
667
+
668
+
669
+ $model=Mage::getModel('ticketsystem/ticketsystem')->load($tid);
670
+
671
+ $repFrom=Mage::getModel('ticketsystem/reps')->load($model->getData('rep'));
672
+
673
+ $rep2=Mage::getModel('ticketsystem/reps')->load($rid);
674
+
675
+ $model->setData('rep',$rid);
676
+
677
+ $model->update();
678
+
679
+
680
+
681
+ if ($db_settings['rep_trans_response'] && $alert) {
682
+
683
+ $trans_subj = $db_settings['rep_trans_subj'];
684
+
685
+
686
+
687
+ $trans_msg = $db_settings['rep_trans_msg'];
688
+
689
+ $vars = array();
690
+
691
+ $vars['ticket'] = $tid;
692
+
693
+ $vars['subject'] = $model->getData('subject');
694
+
695
+ $vars['rep_name'] = $data[0]['firstname']." ".$data[0]['lastname'];
696
+
697
+ $vars['name'] = $model->getData('name');
698
+
699
+ $vars['email'] = $model->getData('email');
700
+
701
+ $vars['status'] = $model->getData('status');
702
+
703
+ $trans_subj = keywords($trans_subj, $vars, $db_settings);
704
+
705
+
706
+
707
+ $text = keywords($trans_msg, $vars, $db_settings);
708
+
709
+ if ($html = getHTML($trans_msg, $vars, 'email-example.html', $db_settings)) {
710
+
711
+ $body = array();
712
+
713
+ $body['text'] = $text;
714
+
715
+ $body['html'] = $html;
716
+
717
+ } else {
718
+
719
+ $body = $text;
720
+
721
+ }
722
+
723
+
724
+
725
+ //notify admin
726
+
727
+ $from = $db_settings['alert_email'];
728
+ if (empty($from)) {
729
+ $user = Mage::getSingleton('admin/session');
730
+ $from = $user->getUser()->getEmail();
731
+ }
732
+
733
+ $emails = array();
734
+
735
+
736
+
737
+ // alert_users need to be alerted
738
+
739
+ if (!empty($db_settings['alert_user'])) {
740
+
741
+ $emails = explode(';', $db_settings['alert_user']);
742
+
743
+ }
744
+
745
+ // The rep who is being transferred from needs to be alerted
746
+
747
+ if ($repFrom->getData('email')) {
748
+
749
+ $emails[] = $repFrom->getData('email');
750
+
751
+ }
752
+
753
+ // The rep who is being transferred to needs to be alerted
754
+
755
+ if ($rep2->getData('email')) {
756
+
757
+ $emails[] = $rep2->getData('email');
758
+
759
+ }
760
+
761
+ // Check the Admin email
762
+ if (!empty($data)) {
763
+ $emails[] = $data[0]['email'];
764
+ }
765
+
766
+ // Ensure we don't send to the same email address twice
767
+
768
+ $emails = array_unique($emails);
769
+
770
+
771
+ foreach($emails as $to) {
772
+
773
+ if (!empty($to)) {
774
+
775
+ send_mail($to, $trans_subj, $body, $from, $model->getData('priority'),$db_settings);
776
+
777
+ }
778
+
779
+ }
780
+
781
+ }
782
+
783
+
784
+
785
+ }
786
+
787
+
788
+
789
+ }
app/code/community/MageTracking/TicketSystem/Helper/TicketFunctions.php ADDED
@@ -0,0 +1,550 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**********************************************************************************
3
+ * eTicket � http://www.eticketsupport.com *
4
+ * by Digital Frontiers, UTO *
5
+ ***********************************************************************************
6
+ * Software Version: eTicket 1.7.3 *
7
+ * Software by: Digital Frontiers, UTO (http://www.eticketsupport.com) *
8
+ * Copyright 2008 by: Digital Frontiers, UTO (http://www.eticketsupport.com) *
9
+ * Support, News, Updates at: http://www.eticketsupport.com *
10
+ ***********************************************************************************
11
+ * This program is free software; you may redistribute it and/or modify it under *
12
+ * the terms of the provided license as published by Digital Frontiers, UTO. *
13
+ * *
14
+ * This program is distributed in the hope that it is and will be useful, but *
15
+ * WITHOUT ANY WARRANTIES; without even any implied warranty of MERCHANTABILITY *
16
+ * or FITNESS FOR A PARTICULAR PURPOSE. *
17
+ * *
18
+ * See the "license.txt" file for details of the eTicket license. *
19
+ * The latest version can always be found at http://www.eticketsupport.com. *
20
+ **********************************************************************************/
21
+
22
+ //Note: Moved some of the standard functions in here...
23
+ /* Clean Input (html2text,text2html) Start */
24
+ function clean_input($input, $type = 'text') {
25
+ $output = $input;
26
+ if ($type == 'html') {
27
+ $output = html2text($output);
28
+ }
29
+ $output = text2html($output);
30
+ return $output;
31
+ }
32
+ function html2text($html) { //basic version -- borrowed in part from chuggnutt
33
+ preg_match('/<\s*body\s*\/?>(.*?)<\s*\/\s*body\s*\/?\s*>/is', $html, $match);
34
+ if (!empty($match[1])) {
35
+ $text = $match[1];
36
+ } else {
37
+ $text = $html;
38
+ }
39
+ $text = trim($text);
40
+ $search = array("/\r/", // Non-legal carriage return
41
+ "/[\n\t]+/", // Newlines and tabs
42
+ '/[ ]{2,}/', // Runs of spaces, pre-handling
43
+ '/<script[^>]*>.*?<\/script>/i', // <script>s -- which strip_tags supposedly has problems with
44
+ '/<style[^>]*>.*?<\/style>/i', // <style>s -- which strip_tags supposedly has problems with
45
+ '/<img [^>]*alt="([^"]+)"[^>]*>/ie', // <img>s
46
+ '/<a [^>]*href="([^"]+)"[^>]*>(.*?)<\/a>/ie',
47
+ // <a href="">
48
+ '/<h[123][^>]*>(.*?)<\/h[123]>/ie', // H1 - H3
49
+ '/<h[456][^>]*>(.*?)<\/h[456]>/ie', // H4 - H6
50
+ '/<p[^>]*>/i', // <P>
51
+ '/<br\\\\s*?\\/??>/i', // <br>
52
+ '/<b[^>]*>(.*?)<\/b>/ie', // <b>
53
+ '/<strong[^>]*>(.*?)<\/strong>/ie', // <strong>
54
+ '/<i[^>]*>(.*?)<\/i>/i', // <i>
55
+ '/<em[^>]*>(.*?)<\/em>/i', // <em>
56
+ '/(<ul[^>]*>|<\/ul>)/i', // <ul> and </ul>
57
+ '/(<ol[^>]*>|<\/ol>)/i', // <ol> and </ol>
58
+ '/<li[^>]*>(.*?)<\/li>/i', // <li> and </li>
59
+ '/<li[^>]*>/i', // <li>
60
+ '/<hr[^>]*>/i', // <hr>
61
+ '/(<table[^>]*>|<\/table>)/i', // <table> and </table>
62
+ '/(<tr[^>]*>|<\/tr>)/i', // <tr> and </tr>
63
+ '/<td[^>]*>(.*?)<\/td>/i', // <td> and </td>
64
+ '/<th[^>]*>(.*?)<\/th>/ie', // <th> and </th>
65
+ '/&(nbsp|#160);/i', // Non-breaking space
66
+ '/&(quot|rdquo|ldquo|#8220|#8221|#147|#148);/i',
67
+ // Double quotes
68
+ '/&(apos|rsquo|lsquo|#8216|#8217);/i', // Single quotes
69
+ '/&gt;/i', // Greater-than
70
+ '/&lt;/i', // Less-than
71
+ '/&(amp|#38);/i', // Ampersand
72
+ '/&(copy|#169);/i', // Copyright
73
+ '/&(trade|#8482|#153);/i', // Trademark
74
+ '/&(reg|#174);/i', // Registered
75
+ '/&(mdash|#151|#8212);/i', // mdash
76
+ '/&(ndash|minus|#8211|#8722);/i', // ndash
77
+ '/&(bull|#149|#8226);/i', // Bullet
78
+ '/&(pound|#163);/i', // Pound sign
79
+ '/&(euro|#8364);/i', // Euro sign
80
+ '/&[^&;]+;/i', // Unknown/unhandled entities
81
+ '/[ ]{2,}/'
82
+ // Runs of spaces, post-handling
83
+ );
84
+ $replace = array('', // Non-legal carriage return
85
+ ' ', // Newlines and tabs
86
+ ' ', // Runs of spaces, pre-handling
87
+ '', // <script>s -- which strip_tags supposedly has problems with
88
+ '', // <style>s -- which strip_tags supposedly has problems with
89
+ 'trim("\\1")', // <img>s
90
+ 'html2link("\\1","\\2")',
91
+ // <a href=""> 1=link 2=text
92
+ "strtoupper(\"\n\n\\1\n\n\")", // H1 - H3
93
+ "ucwords(\"\n\n\\1\n\n\")", // H4 - H6
94
+ "\n\n\t", // <P>
95
+ "\n", // <br>
96
+ 'strtoupper("\\1")', // <b>
97
+ 'strtoupper("\\1")', // <strong>
98
+ '_\\1_', // <i>
99
+ '_\\1_', // <em>
100
+ "\n\n", // <ul> and </ul>
101
+ "\n\n", // <ol> and </ol>
102
+ "\t* \\1\n", // <li> and </li>
103
+ "\n\t* ", // <li>
104
+ "\n-------------------------\n", // <hr>
105
+ "\n\n", // <table> and </table>
106
+ "\n", // <tr> and </tr>
107
+ "\t\t\\1\n", // <td> and </td>
108
+ "strtoupper(\"\t\t\\1\n\")", // <th> and </th>
109
+ ' ', // Non-breaking space
110
+ '"', // Double quotes
111
+ "'", // Single quotes
112
+ '>', '<', '&', '(c)', '(tm)', '(R)', '--', '-', '*', '�', 'EUR', // Euro sign. � ?
113
+ '', // Unknown/unhandled entities
114
+ ' '
115
+ // Runs of spaces, post-handling
116
+ );
117
+ // Run search-and-replace
118
+ $text = preg_replace($search, $replace, $text);
119
+ // Strip any other HTML tags that may have been missed
120
+ $text = strip_tags($text);
121
+ // Bring down number of empty lines to 2 max
122
+ $text = preg_replace("/\n\s+\n/", "\n\n", $text);
123
+ $text = preg_replace("/[\n]{3,}/", "\n\n", $text);
124
+ return $text;
125
+ }
126
+ function html2link($link, $text) {
127
+ $text = trim(htmlspecialchars($text));
128
+ $link = trim(htmlentities($link));
129
+ if (!empty($text)) {
130
+ $link = trim("$link $text");
131
+ }
132
+ return "[$link]";
133
+ }
134
+ function text2html($text) {
135
+ $html = $text; //first step to converting text to html
136
+ $html = htmlspecialchars_decode($html);
137
+ $html = htmlspecialchars($html);
138
+ $html = nl2br($html); //turn new lines to <br>s
139
+ $html = link2html($html); //create html links
140
+ return $html;
141
+ }
142
+ function link2html($text) { //borrowed in part from wordpress
143
+ $text = preg_replace("/\[\[(.*?)[ ]{1}(.*?)\]\]/i", '<a href="\\1">\\2</a>', $text);
144
+ $text = preg_replace("/\[(.*?)[ ]{1}(.*?)\]/i", '<a href="\\1">\\2</a>', $text);
145
+ $text = preg_replace(array('#([\s>])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is', '#([\s>])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is', '#([\s>])([a-z0-9\-_.]+)@([^,< \n\r]+)#i'), array('$1<a href="$2" rel="nofollow">$2</a>', '$1<a href="http://$2" rel="nofollow">$2</a>', '$1<a href="mailto:$2@$3">$2@$3</a>'), $text);
146
+ $text = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3</a>", $text);
147
+ $text = trim($text);
148
+ return $text;
149
+ }
150
+ if (!function_exists('remove_trailing_slash')) {
151
+ function remove_trailing_slash($dir, $slash = DIRECTORY_SEPARATOR) {
152
+ if (substr($dir, -1) == $slash) {
153
+ $dir = substr($dir, 0, -1);
154
+ }
155
+ return $dir;
156
+ }
157
+ }
158
+ if (!function_exists('add_trailing_slash')) {
159
+ function add_trailing_slash($dir, $slash = DIRECTORY_SEPARATOR) {
160
+ if (substr($dir, -1) != $slash) {
161
+ $dir = $dir . $slash;
162
+ }
163
+ return $dir;
164
+ }
165
+ }
166
+ function escape_string($value, $quotes = true) {
167
+ $value = trim($value);
168
+ $value = get_magic_quotes_gpc() ? stripslashes($value) : $value;
169
+ if (!(is_numeric($value) && intval($value) == $value)) {
170
+ if (function_exists('mysql_real_escape_string')) {
171
+ $value = mysql_real_escape_string($value);
172
+ } else {
173
+ $value = addslashes($value);
174
+ }
175
+ }
176
+ if ($quotes == true) {
177
+ $value = "'$value'";
178
+ }
179
+ return $value;
180
+ }
181
+ function escape_array($array) {
182
+ $new = array();
183
+ foreach($array as $key => $val) {
184
+ $new[$key] = escape_string($val);
185
+ }
186
+ return $new;
187
+ }
188
+ function trim_post($array) { //$array is for array of post keys
189
+ foreach($array as $key) {
190
+ if (isset($_POST[$key])) {
191
+ $_POST[$key] = trim($_POST[$key]);
192
+ }
193
+ }
194
+ }
195
+ if (!function_exists('array_combine')) {
196
+ function array_combine($keys, $vals) {
197
+ $keys = array_values((array)$keys);
198
+ $vals = array_values((array)$vals);
199
+ $n = max(count($keys), count($vals));
200
+ $r = array();
201
+ for ($i = 0;$i < $n;$i++) {
202
+ $r[$keys[$i]] = $vals[$i];
203
+ }
204
+ return $r;
205
+ }
206
+ }
207
+ //upload function: name of form file field,destination filename,max file size,file types(.ext or mi/me)
208
+ function upload_file($file, $dest = '', $maxsize = '99999', $types = array(), $errors = array('nodata' => 'No uploaded file data', 'empty' => 'Empty uploaded file data', 'toolong' => 'Filename is too long', 'invalidpath' => 'Upload path is invalid', 'pathwrite' => 'Upload path is NOT writable', 'nofile' => 'Not an uploaded file', 'invalidtype' => 'Invalid file type', 'toosmall' => 'File is too small', 'toobig' => 'File is too big', 'exists' => 'File already exists', 'failed' => 'Upload failed')) {
209
+ if (empty($dest)) {
210
+ $dest = './' . $file['name'];
211
+ }
212
+ if (!isset($file)) {
213
+ return $errors['nodata'];
214
+ }
215
+ if (empty($file)) {
216
+ return $errors['empty'];
217
+ }
218
+ if (strlen($file['name']) > 60) {
219
+ return $errors['toolong'];
220
+ }
221
+ if ($file['error'] != 0) {
222
+ return $file['error'];
223
+ }
224
+ if (!is_dir(dirname($dest))) {
225
+ return $errors['invalidpath'];
226
+ }
227
+ if (!is_writeable(dirname($dest))) {
228
+ return $errors['pathwrite'];
229
+ }
230
+ if (!is_uploaded_file($file['tmp_name'])) {
231
+ return $errors['nofile'];
232
+ }
233
+ if (!check_file_types($file['name'], $types)) {
234
+ return $errors['invalidtype'];
235
+ }
236
+ if ($file['size'] == 0) {
237
+ return $errors['toosmall'];
238
+ }
239
+ if ($file['size'] > $maxsize) {
240
+ return $errors['toobig'];
241
+ }
242
+ if (file_exists($dest)) {
243
+ return $errors['exists'];
244
+ }
245
+ if (!@copy($file['tmp_name'], $dest)) {
246
+ return $errors['failed'];
247
+ }
248
+ @unlink($file['tmp_name']);
249
+ return 0;
250
+ }
251
+ function check_file_types($file, $types = array()) {
252
+ if (!empty($types)) {
253
+ foreach($types as $type) {
254
+ if (strstr($type, '/')) {
255
+ if (strtolower(mime_content_type($file)) == strtolower($type)) {
256
+ return TRUE;
257
+ }
258
+ } else {
259
+ if (strtolower(get_ext($file)) == strtolower($type)) {
260
+ return TRUE;
261
+ }
262
+ }
263
+ }
264
+ }
265
+ }
266
+ if (!function_exists('mime_content_type')) {
267
+ function mime_content_type($filename) {
268
+ $finfo = finfo_open(FILEINFO_MIME);
269
+ $mimetype = finfo_file($finfo, $filename);
270
+ finfo_close($finfo);
271
+ return $mimetype;
272
+ }
273
+ }
274
+ function get_ext($file) { //returns .ext, ie: .jpg
275
+ if (strstr($file, '.')) {
276
+ $ext = substr($file, strrpos($file, '.'));
277
+ return $ext;
278
+ }
279
+ }
280
+ function is_email($email) { //returns email address if it's valid
281
+ $pattern = '/^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$/';
282
+ if (preg_match($pattern, $email)) {
283
+ if (getmx_from_email($email)) {
284
+ return $email;
285
+ }
286
+ }
287
+ }
288
+ // support windows platforms
289
+ if (!function_exists('getmxrr')) {
290
+ if ((isset($_ENV['OS'])) && ($_ENV['OS'] == 'Windows_NT')) {
291
+ function getmxrr($hostname, &$mxhosts, &$mxweight) {
292
+ if (!is_array($mxhosts)) {
293
+ $mxhosts = array();
294
+ }
295
+ if (!empty($hostname)) {
296
+ $output = '';
297
+ $exec = 'nslookup.exe -q=mx ' . escapeshellarg($hostname);
298
+ @exec($exec, $output);
299
+ $imx = -1;
300
+ foreach($output as $line) {
301
+ $imx++;
302
+ $parts = "";
303
+ if (preg_match("/^$hostname\tMX preference = ([0-9]+), mail exchanger = (.*)$/", $line, $parts)) {
304
+ $mxweight[$imx] = trim($parts[1]);
305
+ $mxhosts[$imx] = trim($parts[2]);
306
+ }
307
+ if (preg_match("/responsible mail addr = (.*)/", $line, $parts)) {
308
+ $mxweight[$imx] = $imx;
309
+ $mxhosts[$imx] = trim($parts[1]);
310
+ }
311
+ }
312
+ return ($imx != -1);
313
+ }
314
+ return false;
315
+ }
316
+ }
317
+ }
318
+ function getmx_from_email($email) {
319
+ list($user, $hostname) = split('@', $email);
320
+ return getmx($hostname);
321
+ }
322
+ function getmx($hostname) {
323
+ getmxrr($hostname, $mxhosts, $mxweight); //check for a true MX record
324
+ $mx = array_shift($mxhosts); // get the first MX record
325
+ if (!empty($mx)) {
326
+ return $mx;
327
+ } else { // RFC says use the A line if there is no MX
328
+ $ip = gethostbyname($hostname); // get the ip from hostname
329
+ if ($ip != $hostname) { // continue if returned ip not hostname
330
+ $hostname = gethostbyaddr($ip); // get the rdns (real) hostname
331
+ $ip = gethostbyname($hostname); // check the (real) hostname has an A record
332
+ if ($ip != $hostname) { // continue if returned ip not hostname
333
+ return $hostname;
334
+ }
335
+ }
336
+ }
337
+ }
338
+
339
+ //This function was introduced to provide better handling of emails
340
+ //The $body is on the understanding that it's plain text and will be converted to HTML
341
+ function send_mail($to, $subject, $body, $from, $priority = 2, $db_settings) { //v0.3
342
+
343
+ include_once ('Phpmailer.php');
344
+ $mail = new Phpmailer();
345
+ $from_name='';
346
+ $from_email='';
347
+ $to_name='';
348
+ $to_email='';
349
+
350
+ if ($to[0] == ':') {
351
+ return false;
352
+ } // this email address is disabled
353
+
354
+ if (preg_match('/(.+)<(.+)>/i', $from, $matches)) {
355
+ if (!empty($matches[1])) {
356
+ $from_name = trim($matches[1]);
357
+ }
358
+ if (!empty($matches[2])) {
359
+ $from_email = trim($matches[2]);
360
+ }
361
+ }
362
+ if (empty($from_email)) {
363
+ $from_email = $from;
364
+ }
365
+
366
+ if (preg_match('/(.+)<(.+)>/i', $to, $matches)) {
367
+ if (!empty($matches[1])) {
368
+ $to_name = trim($matches[1]);
369
+ }
370
+ if (!empty($matches[2])) {
371
+ $to_email = trim($matches[2]);
372
+ }
373
+ }
374
+
375
+ if (empty($to_email)) {
376
+ $to_email = $to;
377
+ }
378
+
379
+ if (is_array($body)) {
380
+ if (!empty($body['html'])) {
381
+ $mail->IsHTML(true);
382
+ $mail->Body = $body['html'];
383
+ $htmlbody = $body['html'];
384
+ }
385
+ if (!empty($body['text'])) {
386
+ $mail->AltBody = $body['text'];
387
+ $body = $body['text'];
388
+ }
389
+ } else {
390
+ $mail->Body = $body;
391
+ }
392
+
393
+ # Priority?
394
+ if ($priority == 3) {
395
+ $pri = 1;
396
+ } elseif ($priority == 1) {
397
+ $pri = 5;
398
+ } else {
399
+ $pri = 3;
400
+ }
401
+ $db_settings['mail_method'] = "mail";
402
+ //print_r($db_settings['mail_method']);die();
403
+ # SEND THE EMAIL
404
+ if ($db_settings['mail_method'] == "smtp") {
405
+ $mail->IsSMTP();
406
+ $mail->Host = $db_settings['smtp_host'];
407
+ $mail->Port = $db_settings['smtp_port'];
408
+ $mail->Helo = $_SERVER['SERVER_NAME'];
409
+ if ($db_settings['smtp_auth'] == "1") {
410
+ $mail->SMTPAuth = TRUE;
411
+ $mail->Username = $db_settings['smtp_user'];
412
+ $mail->Password = $db_settings['smtp_pass'];
413
+ }
414
+ } elseif ($db_settings['mail_method'] == "mail") {
415
+ $mail->IsMail();
416
+ } else {
417
+ $mail->IsSendmail();
418
+ $mail->Sendmail = $db_settings['sendmail_path'];
419
+ }
420
+
421
+ $mail->Hostname = $_SERVER['SERVER_NAME'];
422
+ $mail->From = $from_email;
423
+ $mail->FromName = str_replace('"', '', $from_name);
424
+ $mail->Subject = $subject;
425
+ $mail->AddAddress($to_email, $to_name);
426
+ $mail->Priority = $pri;
427
+ $mail->CharSet = $db_settings['charset'];
428
+ if(!$mail->Send()) {
429
+ $mail_sent = FALSE;
430
+ } else {
431
+ $mail_sent = TRUE;
432
+ }
433
+ return $mail_sent;
434
+ }
435
+ function size_readable($size, $retstring = null) { //returns a human readable filesize
436
+ if ((!is_numeric($size)) && (file_exists($size))) {
437
+ $size = filesize($size);
438
+ }
439
+ $sizes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
440
+ if ($retstring === null) {
441
+ $retstring = '%01.2f %s';
442
+ }
443
+ $lastsizestring = end($sizes);
444
+ foreach($sizes as $sizestring) {
445
+ if ($size < 1024) {
446
+ break;
447
+ }
448
+ if ($sizestring != $lastsizestring) {
449
+ $size/= 1024;
450
+ }
451
+ }
452
+ if ($sizestring == $sizes[0]) {
453
+ $retstring = '%01d %s';
454
+ } // Bytes aren't normally fractional
455
+ return sprintf($retstring, $size, $sizestring);
456
+ }
457
+ function format_time($format, $time = false) {
458
+ if (preg_match('/%/', $format)) {
459
+ if ($time) {
460
+ return strftime($format, $time);
461
+ } else {
462
+ return strftime($format);
463
+ }
464
+ }
465
+ if ($time) {
466
+ return date($format, $time);
467
+ } else {
468
+ return date($format);
469
+ }
470
+ }
471
+
472
+
473
+
474
+ function getdirs($dir) {
475
+ $ignore = array('.', '..', 'index.php');
476
+ $files = array();
477
+ if ($handle = opendir($dir)) {
478
+ while (false !== ($file = readdir($handle))) {
479
+ if (!in_array($file, $ignore)) {
480
+ if (is_dir($dir . $file)) {
481
+ $files[] = $file;
482
+ }
483
+ }
484
+ }
485
+ closedir($handle);
486
+ }
487
+ return $files;
488
+ }
489
+ if (!function_exists('htmlspecialchars_decode')) {
490
+ function htmlspecialchars_decode($text) {
491
+ return strtr($text, array_flip(get_html_translation_table(HTML_SPECIALCHARS)));
492
+ }
493
+ }
494
+
495
+ function htmlspecialchars_array($arr = array()) {
496
+ $rs = array();
497
+ while (list($key, $val) = each($arr)) {
498
+ if (is_array($val)) {
499
+ $rs[$key] = htmlspecialchars_array($val);
500
+ } else {
501
+ $rs[$key] = htmlspecialchars($val, ENT_QUOTES);
502
+ }
503
+ }
504
+ return $rs;
505
+ }
506
+
507
+
508
+ function keywords($input, $vars, $db_settings) {
509
+ $vars['url'] = $db_settings['root_url'];
510
+ foreach($vars as $key => $val) {
511
+ $input = str_replace("%$key", $val, $input);
512
+ }
513
+ return $input;
514
+ }
515
+
516
+ function getHTML($message, $vars, $template = 'email-example.html', $db_settings) {
517
+ $theme_dir=Mage::getBaseDir().'/app/code/local/MageTracking/TicketSystem/Helper/';
518
+ if (file_exists($theme_dir . $template)) {
519
+ $html = file_get_contents($theme_dir . $template);
520
+ $message = keywords($message, $vars, $db_settings);
521
+ $message = text2html($message);
522
+ $html = str_replace('%%MSG%%', $message, $html);
523
+ foreach($vars as $key => $val) {
524
+ $vars[$key] = htmlspecialchars($val);
525
+ }
526
+ $html = keywords($html, $vars, $db_settings);
527
+ return $html;
528
+ }
529
+ }
530
+
531
+ function addRemoveTag($msg, $db_settings) {
532
+ if ((isset($db_settings['remove_original'])) && (!empty($db_settings['remove_tag']))) {
533
+ $msg = $db_settings['remove_tag'] . "\n\n" . $msg;
534
+ }
535
+ return $msg;
536
+ }
537
+
538
+ function addSig($sig, $msg ,$db_settings) {
539
+
540
+ if (!empty($sig)) {
541
+ $sig = "\n" . $db_settings['presig'] . $sig;
542
+ $sig = str_replace("\r", "\n", $sig);
543
+ $sig = str_replace("\n\n", "\n", $sig);
544
+ $msg.= $sig;
545
+ }
546
+ return $msg;
547
+ }
548
+
549
+
550
+ ?>
app/code/community/MageTracking/TicketSystem/Helper/email-example.html ADDED
@@ -0,0 +1,174 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+
3
+ <html>
4
+
5
+ <head>
6
+
7
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8
+
9
+ <title>Email</title>
10
+
11
+ <style type="text/css">
12
+
13
+ <!--
14
+
15
+ /* Default Style */
16
+
17
+ BODY {
18
+
19
+ font-family: Verdana, Arial;
20
+
21
+ font-size: 12px;
22
+
23
+ color: #000000;
24
+
25
+ background: #FFFFFF;
26
+
27
+ }
28
+
29
+ P {
30
+
31
+ padding-left: 10px;
32
+
33
+ }
34
+
35
+ BLOCKQUOTE {
36
+
37
+ margin: 10px 20px 0px 20px;
38
+
39
+ padding: 10px;
40
+
41
+ border: 1px solid #8d8d8d;
42
+
43
+ background-color: #f5f5f5;
44
+
45
+ }
46
+
47
+ LI {
48
+
49
+ margin-top: 4px;
50
+
51
+ }
52
+
53
+ UL LI UL LI {
54
+
55
+ margin-top: 2px;
56
+
57
+ }
58
+
59
+ A, A:active, A:link, A:visited {
60
+
61
+ color: #EFB55C;
62
+
63
+ text-decoration: none;
64
+
65
+ }
66
+
67
+ A:hover {
68
+
69
+ color: #5577a5;
70
+
71
+ text-decoration: underline;
72
+
73
+ }
74
+
75
+ /* Title Style */
76
+
77
+ H1 {
78
+
79
+ font-family: Verdana, Arial;
80
+
81
+ font-size: 18px;
82
+
83
+ font-weight: bold;
84
+
85
+ color: #F8981D;
86
+
87
+ }
88
+
89
+ H2 {
90
+
91
+ font-family: Verdana, Arial;
92
+
93
+ font-size: 16px;
94
+
95
+ font-weight: bold;
96
+
97
+ color: #EFB55C;
98
+
99
+ }
100
+
101
+ H3 {
102
+
103
+ font-family: Verdana, Arial;
104
+
105
+ font-size: 14px;
106
+
107
+ font-weight: bold;
108
+
109
+ color: #F3C378;
110
+
111
+ }
112
+
113
+ #Container {
114
+
115
+ width: 80%;
116
+
117
+ margin-left: auto;
118
+
119
+ margin-right: auto;
120
+
121
+ text-align: center;
122
+
123
+ }
124
+
125
+ #Content {
126
+
127
+ background-color: #fafafa;
128
+
129
+ border: 1px solid #F8981D;
130
+
131
+ padding: 10px;
132
+
133
+ text-align: left;
134
+
135
+ }
136
+
137
+ /* Footer */
138
+
139
+ #Footer {
140
+
141
+ text-align: center;
142
+
143
+ }
144
+
145
+ -->
146
+
147
+ </style>
148
+
149
+ </head>
150
+
151
+
152
+
153
+ <body>
154
+
155
+ <div id="Container">
156
+
157
+ <p>This message was sent to you via <a href="http://www.sofhere.com/">Magento Custom Component and Project Development Company</a></p>
158
+
159
+ <div id="Content">
160
+
161
+ <h2>%subject</h2>
162
+
163
+ %%MSG%%
164
+
165
+ </div>
166
+
167
+ <p class="Footer"><a href="http://www.eticketsupport.com/">Supported by eTicket</a>. All Rights Reserved.</p>
168
+
169
+ </div>
170
+
171
+ </body>
172
+
173
+ </html>
174
+
app/code/community/MageTracking/TicketSystem/Model/Answers.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Answers extends Mage_Core_Model_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('ticketsystem/answers');
9
+ }
10
+
11
+ }
app/code/community/MageTracking/TicketSystem/Model/Cats.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Cats extends Mage_Core_Model_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('ticketsystem/cats');
9
+ }
10
+
11
+
12
+ }
app/code/community/MageTracking/TicketSystem/Model/Groups.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Groups extends Mage_Core_Model_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('ticketsystem/groups');
9
+ }
10
+
11
+
12
+
13
+
14
+ }
app/code/community/MageTracking/TicketSystem/Model/Mail.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Mail extends Mage_Core_Model_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('ticketsystem/mail');
9
+ }
10
+
11
+
12
+
13
+
14
+ }
app/code/community/MageTracking/TicketSystem/Model/Messages.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Messages extends Mage_Core_Model_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('ticketsystem/messages');
9
+ }
10
+
11
+
12
+
13
+
14
+ }
app/code/community/MageTracking/TicketSystem/Model/Mysql4/Answers.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Mysql4_Answers extends Mage_Core_Model_Mysql4_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ // Note that the id refers to the key field in your database table.
8
+ $this->_init('ticketsystem/answers', 'id');
9
+ }
10
+
11
+
12
+ }
app/code/community/MageTracking/TicketSystem/Model/Mysql4/Answers/Collection.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Mysql4_Answers_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('ticketsystem/answers');
9
+ }
10
+ }
app/code/community/MageTracking/TicketSystem/Model/Mysql4/Cats.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Mysql4_Cats extends Mage_Core_Model_Mysql4_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ // Note that the id refers to the key field in your database table.
8
+ $this->_init('ticketsystem/cats', 'ID');
9
+ }
10
+
11
+
12
+ }
app/code/community/MageTracking/TicketSystem/Model/Mysql4/Cats/Collection.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Mysql4_Cats_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('ticketsystem/cats');
9
+ }
10
+ }
app/code/community/MageTracking/TicketSystem/Model/Mysql4/Groups.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Mysql4_Groups extends Mage_Core_Model_Mysql4_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ // Note that the id refers to the key field in your database table.
8
+ $this->_init('ticketsystem/groups', 'ID');
9
+ }
10
+
11
+
12
+ }
app/code/community/MageTracking/TicketSystem/Model/Mysql4/Groups/Collection.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Mysql4_Groups_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('ticketsystem/groups');
9
+ }
10
+ }
app/code/community/MageTracking/TicketSystem/Model/Mysql4/Mail.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Mysql4_Mail extends Mage_Core_Model_Mysql4_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ // Note that the id refers to the key field in your database table.
8
+ $this->_init('ticketsystem/mail', 'ID');
9
+ }
10
+
11
+
12
+ }
app/code/community/MageTracking/TicketSystem/Model/Mysql4/Mail/Collection.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Mysql4_Mail_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('ticketsystem/mail');
9
+ }
10
+ }
app/code/community/MageTracking/TicketSystem/Model/Mysql4/Messages.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Mysql4_Messages extends Mage_Core_Model_Mysql4_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ // Note that the id refers to the key field in your database table.
8
+ $this->_init('ticketsystem/messages', 'ticket');
9
+ }
10
+
11
+
12
+ public function save(Mage_Core_Model_Abstract $object)
13
+ {
14
+ $this->_beforeSave($object);
15
+ $this->_checkUnique($object);
16
+
17
+ $this->_getWriteAdapter()->insert($this->getMainTable(), $this->_prepareDataForSave($object));
18
+ $object->setId($this->_getWriteAdapter()->lastInsertId($this->getMainTable()));
19
+
20
+ $this->_afterSave($object);
21
+
22
+ return $this;
23
+ }
24
+ }
app/code/community/MageTracking/TicketSystem/Model/Mysql4/Settings.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Mysql4_Settings extends Mage_Core_Model_Mysql4_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ // Note that the id refers to the key field in your database table.
8
+ $this->_init('ticketsystem/settings', 'ID');
9
+ }
10
+
11
+
12
+ }
app/code/community/MageTracking/TicketSystem/Model/Mysql4/Settings/Collection.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Mysql4_Settings_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('ticketsystem/settings');
9
+ }
10
+ }
app/code/community/MageTracking/TicketSystem/Model/Mysql4/Ticketsystem.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Mysql4_Ticketsystem extends Mage_Core_Model_Mysql4_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ // Note that the softicket_id refers to the key field in your database table.
8
+ $this->_init('ticketsystem/ticketsystem', 'ID');
9
+ }
10
+
11
+
12
+ }
app/code/community/MageTracking/TicketSystem/Model/Mysql4/Ticketsystem/Collection.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Mysql4_Ticketsystem_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('ticketsystem/ticketsystem');
9
+ }
10
+ }
app/code/community/MageTracking/TicketSystem/Model/Settings.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Settings extends Mage_Core_Model_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('ticketsystem/settings');
9
+ }
10
+
11
+
12
+
13
+
14
+ }
app/code/community/MageTracking/TicketSystem/Model/Status.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class MageTracking_TicketSystem_Model_Status extends Varien_Object
4
+ {
5
+ const STATUS_EMPTY = '';
6
+ const STATUS_NEW = 'new';
7
+ const STATUS_ONHOLD = 'onhold';
8
+ const STATUS_CUSTREPLIED = 'custreplied';
9
+ const STATUS_AWAITING = 'awaitingcustomer';
10
+ const STATUS_REOPENED = 'reopened';
11
+ const STATUS_CLOSED = 'closed';
12
+
13
+
14
+ static public function getOptionArray()
15
+ {
16
+ return array(
17
+ self::STATUS_EMPTY => Mage::helper('ticketsystem')->__(''),
18
+ self::STATUS_NEW => Mage::helper('ticketsystem')->__('New'),
19
+ self::STATUS_ONHOLD => Mage::helper('ticketsystem')->__('On Hold'),
20
+ self::STATUS_CUSTREPLIED => Mage::helper('ticketsystem')->__('Customer Replied'),
21
+ self::STATUS_AWAITING => Mage::helper('ticketsystem')->__('Awaiting Customer'),
22
+ self::STATUS_REOPENED => Mage::helper('ticketsystem')->__('Reopened'),
23
+ self::STATUS_CLOSED => Mage::helper('ticketsystem')->__('Closed'),
24
+ );
25
+ }
26
+ }
app/code/community/MageTracking/TicketSystem/Model/Ticketsystem.php ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+
5
+ class MageTracking_TicketSystem_Model_Ticketsystem extends Mage_Core_Model_Abstract
6
+
7
+ {
8
+
9
+ public function _construct()
10
+
11
+ {
12
+
13
+ parent::_construct();
14
+
15
+ $this->_init('ticketsystem/ticketsystem');
16
+
17
+ }
18
+
19
+
20
+
21
+
22
+
23
+ public function getAllTickets($customerId){
24
+
25
+
26
+
27
+ $customer = Mage::getModel('customer/customer');
28
+
29
+ if ($customerId) {
30
+
31
+ $customer->load($customerId);
32
+
33
+ $email = $customer->getEmail();
34
+
35
+
36
+
37
+ // Get softickets for this customer with the email...
38
+
39
+ $resource = Mage::getSingleton('core/resource');
40
+
41
+ $read= $resource->getConnection('core_read');
42
+
43
+ $ticketsystem = $resource->getTableName('mticketing_tickets');
44
+
45
+
46
+
47
+ $select = $read->select()
48
+
49
+ ->from($ticketsystem,array('ID','email','subject','status','timestamp', 'cat', 'priority'))
50
+
51
+ ->where('email='."'".$email."'")
52
+
53
+ ->order('timestamp DESC') ;
54
+
55
+ return $read->fetchAll($select);
56
+
57
+ }
58
+
59
+ return array();
60
+
61
+ }
62
+
63
+
64
+
65
+
66
+
67
+ //save and load methods
68
+
69
+ public function save() {
70
+
71
+ $resource = Mage::getSingleton('core/resource');
72
+
73
+ $connection= $resource->getConnection('ticketsystem_write');
74
+
75
+ $connection->beginTransaction();
76
+
77
+
78
+
79
+ try {
80
+
81
+ $this->_beforeSave();
82
+
83
+ if ($this->getID()==0)
84
+
85
+ $this->setID(Mage::helper('ticketsystem')->getTicketID());
86
+
87
+
88
+
89
+ $query= 'insert into mticketing_tickets (ID, name, subject, orders, phone, timestamp, ip, cat, priority, email) VALUES('
90
+
91
+ ."'".$this->getID()."',"
92
+
93
+ ."'".$this->getName()."',"
94
+
95
+ ."'".$this->getSubject()."',"
96
+
97
+ ."'".$this->getOrders()."',"
98
+
99
+ ."'".$this->getPhone()."',"
100
+
101
+ ."'".$this->getTimestamp()."',"
102
+
103
+ ."'".$this->getIp()."',"
104
+
105
+ ."'".$this->getCat()."',"
106
+
107
+ ."'".$this->getPriority()."',"
108
+
109
+ ."'".$this->getEmail()."')";
110
+
111
+
112
+
113
+ $connection->query($query);
114
+
115
+
116
+
117
+ $connection->commit();
118
+
119
+ $this->_afterSave();
120
+
121
+ }
122
+
123
+ catch (Exception $e) {
124
+
125
+ Mage::log('Exception:'.$e);
126
+
127
+ $connection->rollBack();
128
+
129
+ throw $e;
130
+
131
+ }
132
+
133
+ return $this;
134
+
135
+ }
136
+
137
+
138
+
139
+ public function update() {
140
+
141
+ parent::save();
142
+
143
+ }
144
+
145
+
146
+
147
+ }
app/code/community/MageTracking/TicketSystem/controllers/Adminhtml/CatController.php ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+ class MageTracking_TicketSystem_Adminhtml_CatController extends Mage_Adminhtml_Controller_action
24
+ {
25
+
26
+ protected function _initAction() {
27
+ $this->loadLayout()
28
+ ->_setActiveMenu('ticketsystem/cat')
29
+ ->_addBreadcrumb(Mage::helper('ticketsystem')->__('Departments'), Mage::helper('ticketsystem')->__('Departments'));
30
+
31
+ return $this;
32
+ }
33
+
34
+ public function indexAction() {
35
+ $this->_initAction();
36
+ $this->renderLayout();
37
+ }
38
+
39
+
40
+ public function editAction() {
41
+ $this->loadLayout();
42
+ $this->_setActiveMenu('ticketsystem/cat');
43
+ $this->_addBreadcrumb(Mage::helper('ticketsystem')->__('Tickets'), Mage::helper('ticketsystem')->__('Departments'));
44
+ $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
45
+
46
+
47
+ $id = $this->getRequest()->getParam('id');
48
+ // Edit Ticket
49
+ if ($id > 0) {
50
+
51
+ $model = Mage::getModel('ticketsystem/cats')->load($id);
52
+ // set data for the front.
53
+ Mage::register('cat_data', $model);
54
+ }
55
+ $this->_addContent($this->getLayout()->createBlock('ticketsystem/adminhtml_cat_edit'))
56
+ ->_addLeft($this->getLayout()->createBlock('ticketsystem/adminhtml_cat_edit_tabs'));
57
+ $this->renderLayout();
58
+ }
59
+
60
+
61
+ public function newAction() {
62
+ $this->_forward('edit');
63
+ }
64
+
65
+ public function saveAction() {
66
+ $id=$this->getRequest()->getParam('id');
67
+ $data = $this->getRequest()->getPost();
68
+
69
+ $is_new=false;
70
+ if ($id == 0)
71
+ $is_new=true;
72
+ try {
73
+ // *********************************************
74
+ // New Cat
75
+ if ($is_new){
76
+ $cat= Mage::getModel('ticketsystem/cats');
77
+ $cat->setData($data);
78
+ $cat->save();
79
+ }
80
+ // Existing Cat
81
+ else{
82
+ $cat=Mage::getModel('ticketsystem/cats')->load($id);
83
+ $cat->setData($data);
84
+ $cat->setData('ID',$id);
85
+ $cat->save();
86
+ }
87
+
88
+ // *********************************************
89
+
90
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('ticketsystem')->__('Department was successfully saved'));
91
+
92
+ if ($is_new)
93
+ $this->_redirect('*/*/', array('id' => $id));
94
+ else
95
+ $this->_redirect('*/*/edit', array('id' => $id));
96
+
97
+ } catch (Exception $e) {
98
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
99
+ Mage::getSingleton('adminhtml/session')->setFormData($data);
100
+ $this->_redirect('*/*/', array('id' => $id));
101
+ }
102
+
103
+ }
104
+
105
+ public function deleteAction() {
106
+ if( $this->getRequest()->getParam('id') > 0 ) {
107
+ try {
108
+ $model = Mage::getModel('ticketsystem/cats');
109
+
110
+ $model->setId($this->getRequest()->getParam('id'))
111
+ ->delete();
112
+
113
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('ticketsystem')->__('Department was successfully deleted'));
114
+ $this->_redirect('*/*/');
115
+ } catch (Exception $e) {
116
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
117
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
118
+ }
119
+ }
120
+ $this->_redirect('*/*/');
121
+ }
122
+
123
+ public function massDeleteAction() {
124
+ $ticketsystemIds = $this->getRequest()->getParam('ticketsystem');
125
+ if(!is_array($ticketsystemIds)) {
126
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('ticketsystem')->__('Please select department(s)'));
127
+ } else {
128
+ try {
129
+ foreach ($ticketsystemIds as $ticketsystemId) {
130
+ $ticketsystem = Mage::getModel('ticketsystem/cats')->load($ticketsystemId);
131
+ $ticketsystem->delete();
132
+ }
133
+ Mage::getSingleton('adminhtml/session')->addSuccess(
134
+ Mage::helper('ticketsystem')->__(
135
+ 'Total of %d record(s) were successfully deleted', count($ticketsystemIds)
136
+ )
137
+ );
138
+ } catch (Exception $e) {
139
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
140
+ }
141
+ }
142
+ $this->_redirect('*/*/index');
143
+ }
144
+
145
+
146
+
147
+ public function exportCsvAction()
148
+ {
149
+ $fileName = 'ticketsystem.csv';
150
+ $content = $this->getLayout()->createBlock('ticketsystem/adminhtml_softicket_grid')
151
+ ->getCsv();
152
+
153
+ $this->_sendUploadResponse($fileName, $content);
154
+ }
155
+
156
+ public function exportXmlAction()
157
+ {
158
+ $fileName = 'ticketsystem.xml';
159
+ $content = $this->getLayout()->createBlock('ticketsystem/adminhtml_softicket_grid')
160
+ ->getXml();
161
+
162
+ $this->_sendUploadResponse($fileName, $content);
163
+ }
164
+
165
+ protected function _sendUploadResponse($fileName, $content, $contentType='application/octet-stream')
166
+ {
167
+ $response = $this->getResponse();
168
+ $response->setHeader('HTTP/1.1 200 OK','');
169
+ $response->setHeader('Pragma', 'public', true);
170
+ $response->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true);
171
+ $response->setHeader('Content-Disposition', 'attachment; filename='.$fileName);
172
+ $response->setHeader('Last-Modified', date('r'));
173
+ $response->setHeader('Accept-Ranges', 'bytes');
174
+ $response->setHeader('Content-Length', strlen($content));
175
+ $response->setHeader('Content-type', $contentType);
176
+ $response->setBody($content);
177
+ $response->sendResponse();
178
+ die;
179
+ }
180
+ }
app/code/community/MageTracking/TicketSystem/controllers/Adminhtml/MailController.php ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+ class MageTracking_TicketSystem_Adminhtml_MailController extends Mage_Adminhtml_Controller_action
24
+ {
25
+
26
+ protected function _initAction() {
27
+ $this->loadLayout()
28
+ ->_setActiveMenu('ticketsystem/mail')
29
+ ->_addBreadcrumb(Mage::helper('ticketsystem')->__('TicketSystem'), Mage::helper('ticketsystem')->__('Mail Responses'));
30
+ $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
31
+ return $this;
32
+ }
33
+
34
+ public function indexAction() {
35
+ $this->_forward('edit');
36
+
37
+ }
38
+
39
+ public function editAction() {
40
+ $this->loadLayout();
41
+ $this->_setActiveMenu('ticketsystem/mail');
42
+ $this->_addBreadcrumb(Mage::helper('ticketsystem')->__('TicketSystem'), Mage::helper('ticketsystem')->__('Mail Responses'));
43
+ $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
44
+
45
+
46
+ $model = Mage::getModel('ticketsystem/mail');
47
+
48
+ if ($model){
49
+ $array = array();
50
+ foreach($model->getCollection()->load() as $_item) {
51
+ $key=$_item->getData('key');
52
+ $value=$_item->getData('value');
53
+ $array[$key]= $value;
54
+ }
55
+ $model->setData($array);
56
+ Mage::register('ticketsystem_maildata', $model);
57
+
58
+ $this->_addContent($this->getLayout()->createBlock('ticketsystem/adminhtml_ticketsystem_mail'))
59
+ ->_addLeft($this->getLayout()->createBlock('ticketsystem/adminhtml_ticketsystem_mail_tabs'));
60
+ } else {
61
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('ticketsystem')->__('Item does not exist'));
62
+ $this->_redirect('*/*/');
63
+ }
64
+
65
+ $this->renderLayout();
66
+ }
67
+
68
+
69
+ public function newAction() {
70
+ $this->_forward('edit');
71
+ }
72
+
73
+ public function saveAction() {
74
+
75
+ if ($data = $this->getRequest()->getPost()) {
76
+ $model = Mage::getModel('ticketsystem/mail');
77
+ try {
78
+ foreach($model->getCollection()->load() as $_item) {
79
+ $id=$_item->getData('ID');
80
+ $key=$_item->getData('key');
81
+ $array = null;
82
+ if(array_key_exists($key,$data)){
83
+ $value=1;
84
+ if (! (strstr($key,'_response') || strstr($key,'_new')))
85
+ $value=$data[$key];
86
+ $array = array('ID'=> $id, 'key'=> $key, 'value'=> $value);
87
+ }else if (strstr($key,'_response') ||strstr($key,'_new')) {
88
+ Mage::log('key:'.$key);
89
+ $array = array('ID'=> $id, 'key'=> $key, 'value'=>0);
90
+ }
91
+ if($array){
92
+ $model->setData($array);
93
+ $model->save();
94
+ }
95
+ }
96
+
97
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('ticketsystem')->__('Mail Responses were successfully saved'));
98
+ Mage::getSingleton('adminhtml/session')->setFormData(false);
99
+
100
+ if ($this->getRequest()->getParam('back')) {
101
+ $this->_redirect('*/*/edit');
102
+ return;
103
+ }
104
+ $this->_redirect('*/*/');
105
+ return;
106
+ } catch (Exception $e) {
107
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
108
+ Mage::getSingleton('adminhtml/session')->setFormData($data);
109
+ $this->_redirect('*/*/edit');
110
+ return;
111
+ }
112
+ }
113
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('ticketsystem')->__('Unable to find item to save'));
114
+ $this->_redirect('*/*/');
115
+ }
116
+
117
+ }
app/code/community/MageTracking/TicketSystem/controllers/Adminhtml/SettingController.php ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 0.5 beta
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+
23
+ class MageTracking_TicketSystem_Adminhtml_SettingController extends Mage_Adminhtml_Controller_action
24
+ {
25
+
26
+ protected function _initAction() {
27
+ $this->loadLayout()
28
+ ->_setActiveMenu('ticketsystem/setting')
29
+ ->_addBreadcrumb(Mage::helper('ticketsystem')->__('TicketSystem'), Mage::helper('ticketsystem')->__('Settings'));
30
+ $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
31
+ return $this;
32
+ }
33
+
34
+ public function indexAction() {
35
+ $this->_forward('edit');
36
+
37
+ }
38
+
39
+ public function editAction() {
40
+ $this->loadLayout();
41
+ $this->_setActiveMenu('ticketsystem/setting');
42
+ $this->_addBreadcrumb(Mage::helper('ticketsystem')->__('TicketSystem'), Mage::helper('ticketsystem')->__('Settings'));
43
+ $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
44
+
45
+ $model = Mage::getModel('ticketsystem/settings');
46
+
47
+ if ($model){
48
+ $array = array();
49
+ foreach($model->getCollection()->load() as $_item) {
50
+ $key=$_item->getData('key');
51
+ $value=$_item->getData('value');
52
+ $array[$key]= $value;
53
+ }
54
+ $model->setData($array);
55
+ Mage::register('ticketsystem_settingdata', $model);
56
+
57
+ $this->_addContent($this->getLayout()->createBlock('ticketsystem/adminhtml_ticketsystem_setting'))
58
+ ->_addLeft($this->getLayout()->createBlock('ticketsystem/adminhtml_ticketsystem_setting_tabs'));
59
+
60
+ $this->renderLayout();
61
+ } else {
62
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('ticketsystem')->__('Item does not exist'));
63
+ $this->_redirect('*/*/');
64
+ }
65
+ }
66
+
67
+
68
+
69
+
70
+ public function newAction() {
71
+ $this->_forward('edit');
72
+ }
73
+
74
+ public function saveAction() {
75
+
76
+ if ($data = $this->getRequest()->getPost()) {
77
+
78
+ $model = Mage::getModel('ticketsystem/settings');
79
+
80
+ try {
81
+ foreach($model->getCollection()->load() as $_item) {
82
+ $id=$_item->getData('ID');
83
+ $key=$_item->getData('key');
84
+ $array= null;
85
+ if(array_key_exists($key,$data)){
86
+ $value=1;
87
+ if (! (strstr($key,'smtp_auth') || strstr($key,'alert_new')))
88
+ $value=$data[$key];
89
+ $array = array('ID'=> $id, 'key'=> $key, 'value'=> $value);
90
+ }
91
+ else if (strstr($key,'smtp_auth') ||strstr($key,'alert_new')) {
92
+ $array = array('ID'=> $id, 'key'=> $key, 'value'=>0);
93
+ }
94
+ if($array){
95
+ $model->setData($array);
96
+ $model->save();
97
+ }
98
+ }
99
+
100
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('ticketsystem')->__('Settings were successfully updated'));
101
+ Mage::getSingleton('adminhtml/session')->setFormData(false);
102
+
103
+ if ($this->getRequest()->getParam('back')) {
104
+ $this->_redirect('*/*/edit');
105
+ return;
106
+ }
107
+ $this->_redirect('*/*/');
108
+ return;
109
+ } catch (Exception $e) {
110
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
111
+ Mage::getSingleton('adminhtml/session')->setFormData($data);
112
+ $this->_redirect('*/*/edit');
113
+ return;
114
+ }
115
+ }
116
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('ticketsystem')->__('Unable to find item to save'));
117
+ $this->_redirect('*/*/');
118
+ }
119
+
120
+
121
+ }
app/code/community/MageTracking/TicketSystem/controllers/Adminhtml/TicketsystemController.php ADDED
@@ -0,0 +1,676 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+
5
+ * Sofhere SofTicket Magento Component
6
+
7
+ *
8
+
9
+ * NOTICE OF LICENSE
10
+
11
+ *
12
+
13
+ * This source file is subject to the GNU (3.0)
14
+
15
+ * that is bundled with this package in the file LICENSE.txt.
16
+
17
+ * It is also available through the world-wide-web at this URL:
18
+
19
+ * http://opensource.org/licenses/gpl-3.0.html
20
+
21
+ * If you did not receive a copy of the license and are unable to
22
+
23
+ * obtain it through the world-wide-web, please send an email
24
+
25
+ * to license@sofhere.com so we can send you a copy immediately.
26
+
27
+ *
28
+
29
+ * @category design_default
30
+
31
+ * @author sofhere.com
32
+
33
+ * @package Sofhere_SofTicket
34
+
35
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
36
+
37
+ * @version 0.5 beta
38
+
39
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
40
+
41
+ */
42
+
43
+ require 'MageTracking/TicketSystem/Helper/Ticket.php';
44
+
45
+
46
+
47
+ class MageTracking_TicketSystem_Adminhtml_TicketsystemController extends Mage_Adminhtml_Controller_action
48
+
49
+ {
50
+
51
+ protected function _initAction() {
52
+
53
+ $this->loadLayout()
54
+
55
+ ->_setActiveMenu('ticketsystem/ticket')
56
+
57
+ ->_addBreadcrumb(Mage::helper('ticketsystem')->__('TicketSystem'), Mage::helper('ticketsystem')->__('View Tickets'));
58
+
59
+ return $this;
60
+
61
+ }
62
+
63
+
64
+
65
+ public function indexAction() {
66
+
67
+ $this->_initAction();
68
+
69
+ $this->renderLayout();
70
+
71
+ }
72
+
73
+
74
+
75
+
76
+
77
+ public function editAction() {
78
+
79
+ $this->loadLayout();
80
+
81
+ $this->_setActiveMenu('ticketsystem/items');
82
+
83
+ $this->_addBreadcrumb(Mage::helper('ticketsystem')->__('Ticket'), Mage::helper('ticketsystem')->__('View Tickets'));
84
+
85
+ $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
86
+
87
+
88
+
89
+ $cats = Mage::helper('ticketsystem')->getAllCategories(true);
90
+
91
+ //$reps=Mage::helper('ticketsystem')->getAllRepresantatives();
92
+
93
+ //Mage::register('ticketsystem_represantatives',$reps);
94
+
95
+ Mage::register('ticketsystem_categories', $cats);
96
+
97
+
98
+
99
+ $id = $this->getRequest()->getParam('id');
100
+
101
+ // Edit Ticket
102
+
103
+ if ($id > 0) {
104
+
105
+
106
+
107
+ // **********************************************
108
+
109
+ $model = Mage::getModel('ticketsystem/ticketsystem')->load($id);
110
+
111
+ $model->setData('hidden_ID',$id);
112
+
113
+ $model->setData('hidden_status',$model->getData('status'));
114
+
115
+ $model->setData('hidden_subject',$model->getData('subject'));
116
+
117
+ $model->setData('hidden_name',$model->getData('name'));
118
+
119
+ $model->setData('hidden_email',$model->getData('email'));
120
+
121
+ $model->setData('hidden_phone',$model->getData('phone'));
122
+
123
+ $model->setData('hidden_order',$model->getData('order'));
124
+
125
+ $model->setData('cat_alert',1);
126
+
127
+ $model->setData('rep_alert',1);
128
+
129
+ // **********************************************
130
+
131
+ Mage::register('ticketsystem_data', $model);
132
+
133
+
134
+
135
+ $answers='';
136
+
137
+ $model_ans = Mage::getModel('ticketsystem/answers');
138
+
139
+ foreach ($model_ans->getCollection()->addFieldToFilter('ticket',$id)->load() as $item){
140
+
141
+ $message=$item->getData('message');
142
+
143
+ $rep=$item->getData('rep');
144
+
145
+ $timestamp=$item->getData('timestamp');
146
+
147
+ $answers .='('.$timestamp.') '.$message."\n";
148
+
149
+ }
150
+
151
+ $model_msg = Mage::getModel('ticketsystem/messages')->load($id, 'ticket');
152
+
153
+ $message = $model_msg->getMessage();
154
+
155
+ $timestamp= $model_msg->getTimestamp();
156
+
157
+
158
+ $message ='('.$timestamp.') '.$message."\n";
159
+
160
+
161
+
162
+ if ($answers)
163
+
164
+ $message = $message."\n".$answers;
165
+
166
+ // **********************************************
167
+
168
+
169
+
170
+ // Set message to front
171
+
172
+ $model->setData('message', $message);
173
+
174
+ $model->setData('trans_note', $model->getData('trans_msg'));
175
+
176
+ $model->setData('trans_msg','');
177
+
178
+
179
+
180
+ $this->_addContent($this->getLayout()->createBlock('ticketsystem/adminhtml_ticketsystem_edit'))
181
+
182
+ ->_addLeft($this->getLayout()->createBlock('ticketsystem/adminhtml_ticketsystem_edit_tabs'));
183
+
184
+
185
+
186
+ } else {
187
+
188
+ // New Ticket
189
+
190
+ $this->_addContent($this->getLayout()->createBlock('ticketsystem/adminhtml_ticketsystem_edit'))
191
+
192
+ ->_addLeft($this->getLayout()->createBlock('ticketsystem/adminhtml_ticketsystem_edit_newtabs'));
193
+
194
+ }
195
+
196
+ $this->renderLayout();
197
+
198
+ }
199
+
200
+
201
+
202
+
203
+
204
+ public function onholdAction() {
205
+
206
+ $ticket = new Ticket();
207
+
208
+ $ticket->id = $this->getRequest()->getParam('id');
209
+
210
+ $ticket->changeStatus('onhold');
211
+
212
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('ticketsystem')->__('Status was successfully changed'));
213
+
214
+ $this->_redirect('*/*/');
215
+
216
+ return;
217
+
218
+ }
219
+
220
+
221
+
222
+
223
+
224
+ public function setstatAction() {
225
+
226
+ $ticket = new Ticket();
227
+
228
+ $id = $this->getRequest()->getParam('id');
229
+
230
+ $new_status = $this->getRequest()->getParam('new_status');
231
+
232
+ if($new_status){
233
+
234
+ $ticket->changeStatus($id,$new_status);
235
+
236
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('ticketsystem')->__('Status was successfully changed'));
237
+
238
+ }else{
239
+
240
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('ticketsystem')->__('Please select a status'));
241
+
242
+ }
243
+
244
+ $this->_redirect('*/*/edit', array('id' => $id));
245
+
246
+ return;
247
+
248
+ }
249
+
250
+
251
+
252
+
253
+
254
+ public function transrepAction() {
255
+
256
+ $id = $this->getRequest()->getParam('id');
257
+
258
+ $repId = $this->getRequest()->getParam('reps');
259
+
260
+ $alert = $this->getRequest()->getParam('rep_alert');
261
+
262
+ if($repId){
263
+
264
+ $ticket = new Ticket();
265
+
266
+ $ticket->transRepTicket($id, $repId, $alert);
267
+
268
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('ticketsystem')->__('Represantative was successfully assigned'));
269
+
270
+ }else{
271
+
272
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('ticketsystem')->__('Please select a represantative'));
273
+
274
+ }
275
+
276
+ $this->_redirect('*/*/edit', array('id' => $id));
277
+
278
+ return;
279
+
280
+ }
281
+
282
+
283
+
284
+
285
+
286
+ public function transcatAction() {
287
+
288
+ $id = $this->getRequest()->getParam('id');
289
+
290
+ $catId = $this->getRequest()->getParam('cats');
291
+
292
+ $cat_message = $this->getRequest()->getParam('message');
293
+
294
+ $alert = $this->getRequest()->getParam('cat_alert');
295
+
296
+
297
+
298
+ $ticket = new Ticket();
299
+
300
+ $ticket->transCatTicket($id, $catId, $cat_message, $alert);
301
+
302
+
303
+
304
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('ticketsystem')->__('Ticket is transfered to department successfully'));
305
+
306
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
307
+
308
+ return;
309
+
310
+ }
311
+
312
+
313
+
314
+ public function newAction() {
315
+
316
+ $this->_forward('edit');
317
+
318
+ }
319
+
320
+
321
+
322
+ public function saveAction() {
323
+
324
+
325
+
326
+ $id=$this->getRequest()->getParam('id');
327
+
328
+ $data = $this->getRequest()->getPost();
329
+
330
+
331
+
332
+ $is_new=false;
333
+
334
+ if ($id == 0)
335
+
336
+ $is_new=true;
337
+
338
+ try {
339
+
340
+ // *********************************************
341
+
342
+ // New Ticket
343
+
344
+ if ($is_new){
345
+
346
+ if (empty($data['name'])==false && empty($data['email'])==false && empty($data['subject'])==false && empty($data['message'])==false)
347
+
348
+ $id=Mage::helper('ticketsystem')->getTicketID();
349
+
350
+ else {
351
+
352
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('ticketsystem')->__('Please enter all required fields'));
353
+
354
+ $this->_redirect('*/*/new', array('id' => $this->getRequest()->getParam('id')));
355
+
356
+ return;
357
+
358
+ }
359
+
360
+ }
361
+
362
+ // Existing Ticket
363
+
364
+ else if(is_array($data) && empty($data['answer'])){
365
+
366
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('ticketsystem')->__('Please enter the new message'));
367
+
368
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
369
+
370
+ return;
371
+
372
+ }
373
+
374
+
375
+
376
+ // *********************************************
377
+
378
+ $ticket = new Ticket();
379
+
380
+ $ticket->id=$id;
381
+
382
+ $ticket->message=$data['message'];
383
+
384
+ $ticket->timestamp=now();
385
+
386
+ if ($is_new){
387
+
388
+ $ticket->subject=$data['subject'];
389
+
390
+ $ticket->name=$data['name'];
391
+
392
+ $ticket->email=$data['email'];
393
+
394
+ $ticket->priority=$data['priority'];
395
+
396
+ $ticket->category=$data['cat'];
397
+
398
+ $ticket->ip=$_SERVER['REMOTE_ADDR'];
399
+
400
+ $ticket->phone=$data['phone'];
401
+
402
+ $ticket->orders=$data['orders'];
403
+
404
+
405
+
406
+ if(!$ticket->create(true)){
407
+
408
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('ticketsystem')->__('Ticket could not be saved. Check all fields.'));
409
+
410
+ return;
411
+
412
+ }else{
413
+
414
+ // Do not notify user for the message post
415
+
416
+ $ticket->postMessage($id, $ticket->message, '', false, 'new');
417
+
418
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('ticketsystem')->__('Ticket was successfully saved'));
419
+
420
+ }
421
+
422
+ }else if (is_array($data) && empty($data['answer'])==false && empty($data['priority'])==false && empty($data['cat'])==false) {
423
+
424
+
425
+
426
+ $answer=$data['answer'];
427
+
428
+ if (!empty($answer)) {
429
+
430
+ $user = Mage::getSingleton('admin/session')->getData('user');
431
+
432
+ $username= $user->getData('username');
433
+
434
+ if ($username){
435
+
436
+ $ticket->postAnswer($answer, '', '', $ticket->id, 'awaitingcustomer');
437
+
438
+ }
439
+
440
+ }
441
+
442
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('ticketsystem')->__('Ticket was successfully saved'));
443
+
444
+ }else{
445
+
446
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('ticketsystem')->__('Ticket could not be saved. Check all fields.'));
447
+
448
+ }
449
+
450
+ // *********************************************
451
+
452
+
453
+
454
+ if ($is_new)
455
+
456
+ $this->_redirect('*/*/', array('id' => $id));
457
+
458
+ else
459
+
460
+ $this->_redirect('*/*/edit', array('id' => $id));
461
+
462
+
463
+
464
+ } catch (Exception $e) {
465
+
466
+ //Mage::log('Save exception:'.$e);
467
+
468
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
469
+
470
+ Mage::getSingleton('adminhtml/session')->setFormData($data);
471
+
472
+ $this->_redirect('*/*/', array('id' => $id));
473
+
474
+ }
475
+
476
+ }
477
+
478
+
479
+
480
+ public function deleteAction() {
481
+
482
+ $id=$this->getRequest()->getParam('id');
483
+
484
+ if( $id > 0 ) {
485
+
486
+ try {
487
+
488
+ $ticket = new Ticket();
489
+
490
+ $ticket->delete($id);
491
+
492
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('ticketsystem')->__('Ticket was successfully deleted'));
493
+
494
+ $this->_redirect('*/*/');
495
+
496
+ } catch (Exception $e) {
497
+
498
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
499
+
500
+ $this->_redirect('*/*/edit', array('id' => $id));
501
+
502
+ }
503
+
504
+ }
505
+
506
+ $this->_redirect('*/*/');
507
+
508
+ }
509
+
510
+
511
+
512
+ public function massDeleteAction() {
513
+
514
+ $softicketIds = $this->getRequest()->getParam('ticketsystem');
515
+
516
+ if(!is_array($softicketIds)) {
517
+
518
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('ticketsystem')->__('Please select ticket(s)'));
519
+
520
+ } else {
521
+
522
+ try {
523
+
524
+ foreach ($softicketIds as $softicketId) {
525
+
526
+ $ticket = new Ticket();
527
+
528
+ $ticket->delete($softicketId);
529
+
530
+ }
531
+
532
+ Mage::getSingleton('adminhtml/session')->addSuccess(
533
+
534
+ Mage::helper('ticketsystem')->__('Total of %d record(s) were successfully deleted', count($softicketIds)));
535
+
536
+ } catch (Exception $e) {
537
+
538
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
539
+
540
+ }
541
+
542
+ }
543
+
544
+ $this->_redirect('*/*/index');
545
+
546
+ }
547
+
548
+
549
+
550
+ public function massStatusAction()
551
+
552
+ {
553
+
554
+ $softicketIds = $this->getRequest()->getParam('ticketsystem');
555
+
556
+ $status = $this->getRequest()->getParam('status');
557
+
558
+ if(!is_array($softicketIds)) {
559
+
560
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('ticketsystem')->__('Please select ticket(s)'));
561
+
562
+ } else {
563
+
564
+ try {
565
+
566
+ foreach ($softicketIds as $softicketId) {
567
+
568
+ if ($softicketId >0){
569
+
570
+ $ticket = new Ticket();
571
+
572
+ $ticket->changeStatus($softicketId, $status);
573
+
574
+ }else{
575
+
576
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('ticketsystem')->__('Please select ticket(s)'));
577
+
578
+ $this->_redirect('*/*/index');
579
+
580
+ return;
581
+
582
+ }
583
+
584
+ }
585
+
586
+ $this->_getSession()->addSuccess(Mage::helper('ticketsystem')->__('Total of %d record(s) were successfully updated', count($softicketIds)));
587
+
588
+ } catch (Exception $e) {
589
+
590
+ $this->_getSession()->addError($e->getMessage());
591
+
592
+ }
593
+
594
+ }
595
+
596
+ $this->_redirect('*/*/index');
597
+
598
+ }
599
+
600
+
601
+
602
+ public function exportCsvAction()
603
+
604
+ {
605
+
606
+ $fileName = 'ticketsystem.csv';
607
+
608
+ $content = $this->getLayout()->createBlock('ticketsystem/adminhtml_softicket_grid')
609
+
610
+ ->getCsv();
611
+
612
+
613
+
614
+ $this->_sendUploadResponse($fileName, $content);
615
+
616
+ }
617
+
618
+
619
+
620
+ public function exportXmlAction()
621
+
622
+ {
623
+
624
+ $fileName = 'ticketsystem.xml';
625
+
626
+ $content = $this->getLayout()->createBlock('ticketsystem/adminhtml_softicket_grid')
627
+
628
+ ->getXml();
629
+
630
+
631
+
632
+ $this->_sendUploadResponse($fileName, $content);
633
+
634
+ }
635
+
636
+
637
+
638
+ protected function _sendUploadResponse($fileName, $content, $contentType='application/octet-stream')
639
+
640
+ {
641
+
642
+ $response = $this->getResponse();
643
+
644
+ $response->setHeader('HTTP/1.1 200 OK','');
645
+
646
+ $response->setHeader('Pragma', 'public', true);
647
+
648
+ $response->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true);
649
+
650
+ $response->setHeader('Content-Disposition', 'attachment; filename='.$fileName);
651
+
652
+ $response->setHeader('Last-Modified', date('r'));
653
+
654
+ $response->setHeader('Accept-Ranges', 'bytes');
655
+
656
+ $response->setHeader('Content-Length', strlen($content));
657
+
658
+ $response->setHeader('Content-type', $contentType);
659
+
660
+ $response->setBody($content);
661
+
662
+ $response->sendResponse();
663
+
664
+ die;
665
+
666
+ }
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+
675
+
676
+ }
app/code/community/MageTracking/TicketSystem/controllers/IndexController.php ADDED
@@ -0,0 +1,371 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+
5
+ * Sofhere SofTicket Magento Component
6
+
7
+ *
8
+
9
+ * NOTICE OF LICENSE
10
+
11
+ *
12
+
13
+ * This source file is subject to the GNU (3.0)
14
+
15
+ * that is bundled with this package in the file LICENSE.txt.
16
+
17
+ * It is also available through the world-wide-web at this URL:
18
+
19
+ * http://opensource.org/licenses/gpl-3.0.html
20
+
21
+ * If you did not receive a copy of the license and are unable to
22
+
23
+ * obtain it through the world-wide-web, please send an email
24
+
25
+ * to license@sofhere.com so we can send you a copy immediately.
26
+
27
+ *
28
+
29
+ * @category design_default
30
+
31
+ * @author sofhere.com
32
+
33
+ * @package Sofhere_SofTicket
34
+
35
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
36
+
37
+ * @version 0.5 beta
38
+
39
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
40
+
41
+ */
42
+
43
+
44
+
45
+ require 'MageTracking/TicketSystem/Helper/Ticket.php';
46
+
47
+
48
+
49
+ class MageTracking_TicketSystem_IndexController extends Mage_Core_Controller_Front_Action
50
+
51
+ {
52
+
53
+
54
+
55
+ protected function _getSession()
56
+
57
+ {
58
+
59
+ return Mage::getSingleton('customer/session');
60
+
61
+ }
62
+
63
+
64
+
65
+ public function preDispatch()
66
+
67
+ {
68
+
69
+ parent::preDispatch();
70
+
71
+
72
+
73
+ if (Mage::getSingleton('customer/session')->isLoggedIn()) {
74
+
75
+ if (! $this->_getSession()->authenticate($this)) {
76
+
77
+ $this->setFlag('', 'no-dispatch', true);
78
+
79
+ }
80
+
81
+ }
82
+
83
+ }
84
+
85
+
86
+
87
+ public function indexAction()
88
+
89
+ {
90
+
91
+ $ticketsystemModel = Mage::getModel('ticketsystem/ticketsystem');
92
+
93
+ $customerId= $this->_getSession()->getCustomerId();
94
+
95
+ $ticketsystem= $ticketsystemModel->getAllTickets($customerId);
96
+
97
+ Mage::register('ticketsystem_all', $ticketsystem, true);
98
+
99
+
100
+
101
+ if ((is_null($ticketsystem) == false) && (empty($ticketsystem) == false) ) {
102
+
103
+ $this->loadLayout();
104
+
105
+ $this->_initLayoutMessages('customer/session');
106
+
107
+ $this->renderLayout();
108
+
109
+ }
110
+
111
+ else {
112
+
113
+ $this->getResponse()->setRedirect(Mage::getUrl('*/*/add'));
114
+
115
+ }
116
+
117
+ }
118
+
119
+
120
+
121
+ public function addAction()
122
+
123
+ {
124
+
125
+ $this->loadLayout();
126
+
127
+ $this->_initLayoutMessages('customer/session');
128
+ if ($navigationBlock = $this->getLayout()->getBlock('customer_account_navigation')) {
129
+
130
+ $navigationBlock->setActive('ticketsystem');
131
+
132
+ }
133
+
134
+ $this->renderLayout();
135
+
136
+ }
137
+
138
+
139
+
140
+ public function editAction()
141
+
142
+ {
143
+
144
+ $this->loadLayout();
145
+
146
+ $this->_initLayoutMessages('customer/session');
147
+
148
+ if ($navigationBlock = $this->getLayout()->getBlock('customer_account_navigation')) {
149
+
150
+ $navigationBlock->setActive('ticketsystem');
151
+
152
+ }
153
+
154
+
155
+
156
+ $this->renderLayout();
157
+
158
+ }
159
+
160
+
161
+
162
+ public function editPostAction()
163
+
164
+ {
165
+
166
+ $data= $this->getRequest()->getPost();
167
+
168
+ //print_r($data);die();
169
+
170
+ if ($data && $data['ID'] && $data['ID'] >0 ) {
171
+
172
+ try {
173
+
174
+ //$repid=$data['rep'];
175
+
176
+ $id=$data['ID'];
177
+
178
+ $answer=$data['answer'];
179
+
180
+ $rep_name='';
181
+
182
+
183
+
184
+
185
+
186
+ $ticket = new Ticket();
187
+
188
+ $ticket->postAnswer($answer, '','', $id, 'custreplied');
189
+
190
+ if (Mage::getSingleton('customer/session')->isLoggedIn()) {
191
+
192
+ $this->_getSession()->addSuccess($this->__('Ticket was successfully updated'));
193
+
194
+ }
195
+
196
+ else
197
+
198
+ {
199
+
200
+ Mage::getSingleton('core/session')->addSuccess($this->__('Ticket was successfully updated'));
201
+
202
+ }
203
+
204
+ $this->_redirectSuccess(Mage::getUrl('*/*/', array('_secure'=>true, 'id'=>$id)));
205
+
206
+ return;
207
+
208
+ }
209
+
210
+ catch (Mage_Core_Exception $e) {
211
+
212
+ $this->_getSession()->setticketsystemFormData($this->getRequest()->getPost())
213
+
214
+ ->addException($e, $e->getMessage());
215
+
216
+ }
217
+
218
+ catch (Exception $e) {
219
+
220
+ $this->_getSession()->setticketsystemFormData($this->getRequest()->getPost())
221
+
222
+ ->addException($e, $this->__('Ticket cannot be saved'));
223
+
224
+ }
225
+
226
+ }
227
+
228
+ if (Mage::getSingleton('customer/session')->isLoggedIn()) {
229
+
230
+ $this->_getSession()->addError($this->__('Ticket cannot be saved'));
231
+
232
+ } else {
233
+
234
+ Mage::getSingleton('core/session')->addError($this->__('Ticket cannot be saved'));
235
+
236
+ }
237
+
238
+ $this->_redirectError(Mage::getUrl('*/*/'));
239
+
240
+ }
241
+
242
+
243
+
244
+
245
+
246
+ public function addPostAction()
247
+
248
+ {
249
+
250
+ $data= $this->getRequest()->getPost();
251
+ //print_r($data);die();
252
+ $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
253
+ //$select = "SELECT * from ticket_tickets where status NOT LIKE 'CLOSED' AND email = '".$data['email']."' ";
254
+ $select = "SELECT * from mticketing_tickets where status NOT LIKE 'CLOSED' AND email = '".$data['email']."' ";
255
+ $rowArray = $connection->fetchAll($select); //return row
256
+ $ticket_id = $rowArray[0]['ID'];
257
+ $ticket_count = count($rowArray);
258
+ //print_r($data['email']);die();
259
+ //if ($data && $ticket_count==0) {
260
+
261
+ try {
262
+
263
+ $ticket = new Ticket();
264
+ //echo "look";die();
265
+ $id=Mage::helper('ticketsystem')->getTicketID();
266
+
267
+ $ticket->id=$id;
268
+
269
+ $ticket->message=$data['message'];
270
+
271
+ $ticket->timestamp=now();
272
+
273
+ $ticket->subject=$data['subject'];
274
+
275
+ $ticket->name=$data['name'];
276
+
277
+ $ticket->email=$data['email'];
278
+
279
+ $ticket->priority=$data['priority'];
280
+
281
+ $ticket->category=$data['cat'];
282
+
283
+ $ticket->ip=$_SERVER['REMOTE_ADDR'];
284
+
285
+ $ticket->phone=$data['phone'];
286
+ if ($data['orders']=='Select Order') {
287
+ $ticket->orders= '';
288
+ } else {
289
+ $ticket->orders=$data['orders'];
290
+ }
291
+
292
+ if(!$ticket->create(true)){
293
+
294
+ $this->_getSession()->addError($this->__('Ticket cannot be saved'));
295
+
296
+ $this->_redirectError(Mage::getUrl('*/*/'));
297
+
298
+ return;
299
+
300
+ }else{
301
+
302
+ $ticket->postMessage($id, $ticket->message, '', true, 'new');
303
+
304
+ if (Mage::getSingleton('customer/session')->isLoggedIn()) {
305
+
306
+ $this->_getSession()->addSuccess($this->__('Ticket was successfully saved'));
307
+
308
+ }
309
+
310
+ else {
311
+
312
+ Mage::getSingleton('core/session')->addSuccess($this->__('Ticket was successfully saved'));
313
+
314
+ }
315
+
316
+ $this->_redirectSuccess(Mage::getUrl('*/*/', array('_secure'=>true)));
317
+
318
+ return;
319
+
320
+ }
321
+
322
+ }
323
+
324
+ catch (Mage_Core_Exception $e) {
325
+
326
+ $this->_getSession()->setticketsystemFormData($this->getRequest()->getPost())
327
+
328
+ ->addException($e, $e->getMessage());
329
+
330
+ }
331
+
332
+ catch (Exception $e) {
333
+
334
+ $this->_getSession()->setticketsystemFormData($this->getRequest()->getPost())
335
+
336
+ ->addException($e, $this->__('Ticket cannot be saved'));
337
+
338
+ }
339
+
340
+ // }
341
+ /*
342
+ else
343
+ {
344
+ // To get the refrence ID
345
+ $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
346
+ $select_message_id = "SELECT id from ticket_messages where ticket = '".$ticket_id."'";
347
+ $rowArray_message = $connection->fetchRow($select_message_id); //return row
348
+
349
+ $connection = Mage::getSingleton('core/resource')->getConnection('core_write');
350
+ $connection->beginTransaction();
351
+ $fields = array();
352
+ $fields['ticket']= $ticket_id;
353
+ $fields['message']= $data['message'];
354
+ $fields['reference']= $rowArray_message['id'];
355
+
356
+ $connection->insert('ticket_answers', $fields);
357
+ $connection->commit();
358
+
359
+ Mage::getSingleton('core/session')->addSuccess('Ticket was successfully saved');
360
+ $this->_redirectSuccess(Mage::getUrl('*//*/index', array('_secure'=>true)));
361
+ return;
362
+
363
+ }*/
364
+
365
+ $this->_redirectError(Mage::getUrl('*/*/edit', array('id'=>$id)));
366
+
367
+ }
368
+
369
+
370
+
371
+ }
app/code/community/MageTracking/TicketSystem/etc/config.xml ADDED
@@ -0,0 +1,191 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <MageTracking_TicketSystem>
5
+ <version>1.2.1</version>
6
+ </MageTracking_TicketSystem>
7
+ </modules>
8
+ <frontend>
9
+ <routers>
10
+ <ticketsystem>
11
+ <use>standard</use>
12
+ <args>
13
+ <module>MageTracking_TicketSystem</module>
14
+ <frontName>ticketsystem</frontName>
15
+ </args>
16
+ </ticketsystem>
17
+ </routers>
18
+ <translate>
19
+ <modules>
20
+ <MageTracking_TicketSystem>
21
+ <files>
22
+ <default>MageTracking_TicketSystem.csv</default>
23
+ </files>
24
+ </MageTracking_TicketSystem>
25
+ </modules>
26
+ </translate>
27
+ <layout>
28
+ <updates>
29
+ <ticketsystem>
30
+ <file>ticketsystem.xml</file>
31
+ </ticketsystem>
32
+ </updates>
33
+ </layout>
34
+ </frontend>
35
+ <admin>
36
+ <routers>
37
+ <ticketsystem>
38
+ <use>admin</use>
39
+ <args>
40
+ <module>MageTracking_TicketSystem</module>
41
+ <frontName>ticketsystem</frontName>
42
+ </args>
43
+ </ticketsystem>
44
+ </routers>
45
+ </admin>
46
+ <adminhtml>
47
+ <menu>
48
+ <ticketsystem translate="title" module="ticketsystem">
49
+ <title>Ticketing System</title>
50
+ <sort_order>71</sort_order>
51
+ <children>
52
+ <ticket translate="title" module="ticketsystem">
53
+ <title>View Tickets</title>
54
+ <sort_order>0</sort_order>
55
+ <action>ticketsystem/adminhtml_ticketsystem</action>
56
+ </ticket>
57
+ <mail translate="title" module="ticketsystem">
58
+ <title>Mail Responses</title>
59
+ <sort_order>1</sort_order>
60
+ <action>ticketsystem/adminhtml_mail</action>
61
+ </mail>
62
+ <cat translate="title" module="ticketsystem">
63
+ <title>Departments</title>
64
+ <sort_order>2</sort_order>
65
+ <action>ticketsystem/adminhtml_cat</action>
66
+ </cat>
67
+ <setting translate="title" module="ticketsystem">
68
+ <title>Settings</title>
69
+ <sort_order>4</sort_order>
70
+ <action>ticketsystem/adminhtml_setting</action>
71
+ </setting>
72
+ </children>
73
+ </ticketsystem>
74
+ </menu>
75
+ <acl>
76
+ <resources>
77
+ <admin>
78
+ <children>
79
+ <ticketsystem>
80
+ <title>TicketSystem</title>
81
+ <sort_order>30</sort_order>
82
+ <children>
83
+ <ticket translate="title">
84
+ <title>View Tickets</title>
85
+ </ticket>
86
+ <mail translate="title">
87
+ <title>Mail Responses</title>
88
+ </mail>
89
+ <cat translate="title">
90
+ <title>Departments</title>
91
+ </cat>
92
+ <setting translate="title">
93
+ <title>Settings</title>
94
+ </setting>
95
+ </children>
96
+ </ticketsystem>
97
+ </children>
98
+ </admin>
99
+ </resources>
100
+ </acl>
101
+ <translate>
102
+ <modules>
103
+ <MageTracking_TicketSystem>
104
+ <files>
105
+ <default>MageTracking_TicketSystem.csv</default>
106
+ </files>
107
+ </MageTracking_TicketSystem>
108
+ </modules>
109
+ </translate>
110
+ <layout>
111
+ <updates>
112
+ <ticketsystem>
113
+ <file>ticketsystem.xml</file>
114
+ </ticketsystem>
115
+ </updates>
116
+ </layout>
117
+ </adminhtml>
118
+ <global>
119
+ <models>
120
+ <ticketsystem>
121
+ <class>MageTracking_TicketSystem_Model</class>
122
+ <resourceModel>ticketsystem_mysql4</resourceModel>
123
+ </ticketsystem>
124
+ <ticketsystem_mysql4>
125
+ <class>MageTracking_TicketSystem_Model_Mysql4</class>
126
+ <entities>
127
+ <ticketsystem>
128
+ <table>mticketing_tickets</table>
129
+ </ticketsystem>
130
+ <mail>
131
+ <table>mticketing_settings</table>
132
+ </mail>
133
+ <cats>
134
+ <table>mticketing_categories</table>
135
+ </cats>
136
+ <messages>
137
+ <table>mticketing_messages</table>
138
+ </messages>
139
+ <answers>
140
+ <table>mticketing_answers</table>
141
+ </answers>
142
+ <!--<groups>
143
+ <table>mticketing_groups</table>
144
+ </groups>-->
145
+ <settings>
146
+ <table>mticketing_settings</table>
147
+ </settings>
148
+ </entities>
149
+ </ticketsystem_mysql4>
150
+ </models>
151
+ <resources>
152
+ <ticketsystem_setup>
153
+ <setup>
154
+ <module>MageTracking_TicketSystem</module>
155
+ </setup>
156
+ <connection>
157
+ <use>core_setup</use>
158
+ </connection>
159
+ </ticketsystem_setup>
160
+ <ticketsystem_write>
161
+ <connection>
162
+ <use>core_write</use>
163
+ </connection>
164
+ </ticketsystem_write>
165
+ <ticketsystem_read>
166
+ <connection>
167
+ <use>core_read</use>
168
+ </connection>
169
+ </ticketsystem_read>
170
+ </resources>
171
+
172
+ <blocks>
173
+ <customer>
174
+ <rewrite>
175
+ <account_navigation>MageTracking_TicketSystem_Block_Ticketsystem_Navigation</account_navigation>
176
+ <ticketsystem_view>MageTracking_TicketSystem_Block_Ticketsystem_View</ticketsystem_view>
177
+ <ticketsystem_edit>MageTracking_TicketSystem_Block_Ticketsystem_Edit</ticketsystem_edit>
178
+ </rewrite>
179
+ </customer>
180
+ <ticketsystem>
181
+ <class>MageTracking_TicketSystem_Block</class>
182
+ </ticketsystem>
183
+ </blocks>
184
+
185
+ <helpers>
186
+ <ticketsystem>
187
+ <class>MageTracking_TicketSystem_Helper</class>
188
+ </ticketsystem>
189
+ </helpers>
190
+ </global>
191
+ </config>
app/code/community/MageTracking/TicketSystem/sql/ticketsystem_setup/mysql4-install-1.2.1.php ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+
7
+ $installer->run("
8
+
9
+ DROP TABLE IF EXISTS {$this->getTable('mticketing_answers')};
10
+ CREATE TABLE IF NOT EXISTS {$this->getTable('mticketing_answers')} (
11
+ `ID` int(7) NOT NULL auto_increment,
12
+ `ticket` int(6) default '0',
13
+ `message` text collate utf8_turkish_ci,
14
+ `rep` int(5) NOT NULL default '0',
15
+ `reference` int(7) default NULL,
16
+ `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
17
+ PRIMARY KEY (`ID`),
18
+ KEY `ticket` (`ticket`),
19
+ KEY `timestamp` (`timestamp`)
20
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci COMMENT='1.7.3' AUTO_INCREMENT=1 ;
21
+
22
+ DROP TABLE IF EXISTS {$this->getTable('mticketing_attachments')};
23
+ CREATE TABLE IF NOT EXISTS {$this->getTable('mticketing_attachments')} (
24
+ `ID` int(7) NOT NULL auto_increment,
25
+ `ticket` int(6) NOT NULL default '0',
26
+ `ref` int(7) NOT NULL default '0',
27
+ `filename` varchar(100) collate utf8_turkish_ci NOT NULL default '',
28
+ `type` varchar(15) collate utf8_turkish_ci NOT NULL default '',
29
+ PRIMARY KEY (`ID`),
30
+ KEY `ticket` (`ticket`)
31
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci COMMENT='1.7.3' AUTO_INCREMENT=1 ;
32
+
33
+
34
+ DROP TABLE IF EXISTS {$this->getTable('mticketing_categories')};
35
+ CREATE TABLE IF NOT EXISTS {$this->getTable('mticketing_categories')} (
36
+ `ID` int(5) NOT NULL auto_increment,
37
+ `name` varchar(100) collate utf8_turkish_ci NOT NULL default '',
38
+ `email` varchar(200) collate utf8_turkish_ci NOT NULL default '',
39
+ `signature` text collate utf8_turkish_ci NOT NULL,
40
+ `hidden` int(1) NOT NULL default '0',
41
+ `reply_method` varchar(7) collate utf8_turkish_ci NOT NULL default 'url',
42
+ PRIMARY KEY (`ID`)
43
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci COMMENT='1.7.3' AUTO_INCREMENT=7 ;
44
+
45
+
46
+ INSERT INTO {$this->getTable('mticketing_categories')} (`ID`, `name`, `email`, `signature`, `hidden`, `reply_method`) VALUES
47
+ (1, 'Support', 'localhost', '', 0, 'url');
48
+
49
+
50
+ DROP TABLE IF EXISTS {$this->getTable('mticketing_messages')};
51
+ CREATE TABLE IF NOT EXISTS {$this->getTable('mticketing_messages')} (
52
+ `ID` int(7) NOT NULL auto_increment,
53
+ `ticket` int(6) NOT NULL default '0',
54
+ `message` text collate utf8_turkish_ci,
55
+ `headers` text collate utf8_turkish_ci,
56
+ `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
57
+ PRIMARY KEY (`ID`),
58
+ KEY `ticket` (`ticket`)
59
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci COMMENT='1.7.3' AUTO_INCREMENT=1 ;
60
+
61
+ DROP TABLE IF EXISTS {$this->getTable('mticketing_settings')};
62
+ CREATE TABLE IF NOT EXISTS {$this->getTable('mticketing_settings')} (
63
+ `ID` int(5) NOT NULL auto_increment,
64
+ `group` varchar(255) collate utf8_turkish_ci default NULL,
65
+ `key` varchar(255) collate utf8_turkish_ci NOT NULL,
66
+ `value` text collate utf8_turkish_ci NOT NULL,
67
+ PRIMARY KEY (`ID`),
68
+ KEY `GROUP` (`group`),
69
+ KEY `VALUE` (`key`)
70
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci COMMENT='1.7.3' AUTO_INCREMENT=85 ;
71
+
72
+
73
+ INSERT INTO {$this->getTable('mticketing_settings')} (`ID`, `group`, `key`, `value`) VALUES
74
+ (1, NULL, 'theme', 'eticket'),
75
+ (2, NULL, 'site_title', ''),
76
+ (3, NULL, 'charset', 'UTF-8'),
77
+ (4, NULL, 'presig', '\n\n'),
78
+ (5, NULL, 'short_date_format', 'm/d/Y'),
79
+ (6, NULL, 'answer_subj', '[#%ticket] %subject'),
80
+ (7, NULL, 'answer_msg', '%answer'),
81
+ (8, 'pri', '0', '1'),
82
+ (9, 'pri', '1', '2'),
83
+ (10, 'pri', '2', '3'),
84
+ (11, 'pri_text', '0', 'Low'),
85
+ (12, 'pri_text', '1', 'Normal'),
86
+ (13, 'pri_text', '2', 'High'),
87
+ (14, 'pri_style', '0', 'class=\"priLow\"'),
88
+ (15, 'pri_style', '1', 'class=\"priNormal\"'),
89
+ (16, 'pri_style', '2', 'class=\"priHigh\"'),
90
+ (17, NULL, 'rep_trans_response', '1'),
91
+ (18, NULL, 'rep_trans_subj', '[#%ticket] Representative Transfer'),
92
+ (19, NULL, 'rep_trans_msg', 'Ticket was transferred to representative %rep_name.'),
93
+ (20, NULL, 'nosubject', '[No Subject]'),
94
+ (21, NULL, 'ticket_format', '\\[#([0-9]{6})\\]'),
95
+ (22, NULL, 'subject_re', 'Re|Antw'),
96
+ (23, NULL, 'spamword', '[SPAM]'),
97
+ (24, NULL, 'flood_msg_rate', '10'),
98
+ (25, NULL, 'antispam_magicword', 'ANTI_SPAM_MAGICWORD'),
99
+ (26, NULL, 'antispam_subj', 'Ticked Rejected: Mail detected as SPAM'),
100
+ (27, NULL, 'antispam_msg', 'Your email was detected as spam and has been rejected. If your email was not spam, please re-send your email, including the word \"{MAGICWORD}\" in the body of the email.'),
101
+ (28, NULL, 'antispam_email', ''),
102
+ (29, NULL, 'accept_attachments', '0'),
103
+ (30, NULL, 'attachment_size', '1048576'),
104
+ (31, NULL, 'attachment_dir', ''),
105
+ (32, NULL, 'attachment_url', 'attachments.php'),
106
+ (33, NULL, 'search_disp', '1'),
107
+ (34, NULL, 'save_headers', '1'),
108
+ (35, NULL, 'time_format', 'l, F j Y g:ia'),
109
+ (36, NULL, 'min_interval', '60'),
110
+ (37, NULL, 'ticket_max', '10'),
111
+ (38, NULL, 'remove_original', '1'),
112
+ (39, NULL, 'remove_tag', '--please do not reply below this line--'),
113
+ (40, NULL, 'ticket_response', '1'),
114
+ (41, NULL, 'ticket_msg', 'A support ticket has been created (#%ticket). We will get back to you shortly.\r\n\r\nYou can view this ticket progress online here: %url/edit/id/%ticket\r\n\r\nNOTE: If you wish to send additional information regarding this ticket, please do not send another email. Instead, reply to this ticket.'),
115
+ (42, NULL, 'ticket_subj', '[#%ticket] Support Ticket Opened'),
116
+ (43, NULL, 'limit_response', '1'),
117
+ (44, NULL, 'limit_email', ''),
118
+ (45, NULL, 'limit_subj', 'Ticket Denied'),
119
+ (46, NULL, 'limit_msg', 'Ticket was not created for the email sent to %local_email from %user_email because there is a limit of %ticket_max open tickets per email address at any one time.\r\n\r\nTo be able to open another ticket, you must close one of your previous tickets first here:\r\n%url'),
120
+ (47, NULL, 'alert_new', '0'),
121
+ (48, NULL, 'alert_email', ''),
122
+ (49, NULL, 'alert_user', ''),
123
+ (50, NULL, 'alert_subj', '[#%ticket] New Message Alert'),
124
+ (51, NULL, 'alert_msg', 'There is a new message for ticket %ticket\r\n\r\nFrom: %email\r\n\r\n%url/edit/id/%ticket'),
125
+ (52, NULL, 'message_response', '1'),
126
+ (53, NULL, 'message_subj', '[#%ticket] Message Added'),
127
+ (54, NULL, 'message_msg', 'Your reply to support ticket #%ticket has been noted.\r\n\r\nYou can view this ticket progress online here: %url/edit/id/%ticket'),
128
+ (55, NULL, 'trans_response', '1'),
129
+ (56, NULL, 'trans_subj', '[#%ticket] Department Transfer'),
130
+ (57, NULL, 'trans_msg', 'Your ticket was transferred to the %cat_name department for further review.\r\n\r\n%trans_msg'),
131
+ (58, NULL, 'timezone', '0'),
132
+ (59, NULL, 'tickets_per_page', '10'),
133
+ (60, NULL, 'root_url', 'http://www.yourwebsitename.com/index.php/ticketsystem/index'),
134
+ (61, NULL, 'filetypes', '.jpg;.gif;.png;.pdf;.xls;.txt;.doc;.eml;.zip;.mp3;'),
135
+ (62, NULL, 'captcha_file', 'captcha.php'),
136
+ (63, NULL, 'accept_captcha', '0'),
137
+ (64, NULL, 'force_category', '0'),
138
+ (65, NULL, 'default_category', '1'),
139
+ (66, NULL, 'mail_method', 'mail'),
140
+ (67, NULL, 'smtp_host', 'localhost'),
141
+ (68, NULL, 'smtp_port', '25'),
142
+ (69, NULL, 'smtp_auth', '0'),
143
+ (70, NULL, 'smtp_user', 'user'),
144
+ (71, NULL, 'smtp_pass', 'pass'),
145
+ (72, NULL, 'show_badge', '1'),
146
+ (73, NULL, 'upgrade_check', '0'),
147
+ (74, NULL, 'last_check', '2009-01-01'),
148
+ (75, NULL, 'last_result', ''),
149
+ (76, NULL, 'activation_key', ''),
150
+ (77, NULL, 'sendmail_path', '/usr/sbin/sendmail'),
151
+ (78, NULL, '', ''),
152
+ (79, NULL, '', ''),
153
+ (80, NULL, '', ''),
154
+ (81, NULL, '', ''),
155
+ (82, NULL, '', ''),
156
+ (83, NULL, '', ''),
157
+ (84, NULL, '', '');
158
+
159
+ DROP TABLE IF EXISTS {$this->getTable('mticketing_tickets')};
160
+ CREATE TABLE IF NOT EXISTS {$this->getTable('mticketing_tickets')} (
161
+ `subject` varchar(255) collate utf8_turkish_ci NOT NULL default '[No Subject]',
162
+ `name` varchar(255) collate utf8_turkish_ci NOT NULL default '',
163
+ `email` varchar(255) collate utf8_turkish_ci NOT NULL default '',
164
+ `orders` varchar(255) collate utf8_turkish_ci default NULL,
165
+ `phone` varchar(20) collate utf8_turkish_ci default NULL,
166
+ `status` enum('new','onhold','custreplied','awaitingcustomer','reopened','closed') collate utf8_turkish_ci NOT NULL default 'new',
167
+ `ID` int(6) NOT NULL default '0',
168
+ `cat` int(5) NOT NULL default '0',
169
+ `priority` tinyint(1) NOT NULL default '2',
170
+ `ip` varchar(255) collate utf8_turkish_ci NOT NULL default '',
171
+ `trans_msg` varchar(255) collate utf8_turkish_ci NOT NULL default '',
172
+ `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
173
+ PRIMARY KEY (`ID`),
174
+ KEY `timestamp` (`timestamp`)
175
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci COMMENT='1.7.3';
176
+
177
+
178
+ ");
179
+
180
+ $installer->endSetup();
181
+
app/design/adminhtml/default/default/layout/ticketsystem.xml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <ticketsystem_adminhtml_ticketsystem_index>
4
+ <reference name="content">
5
+ <block type="ticketsystem/adminhtml_ticketsystem" name="ticketsystem" />
6
+ </reference>
7
+ </ticketsystem_adminhtml_ticketsystem_index>
8
+
9
+ <ticketsystem_adminhtml_cat_index>
10
+ <reference name="content">
11
+ <block type="ticketsystem/adminhtml_cat" name="cat" />
12
+ </reference>
13
+ </ticketsystem_adminhtml_cat_index>
14
+
15
+
16
+ <ticketsystem_adminhtml_rep_index>
17
+ <reference name="content">
18
+ <block type="ticketsystem/adminhtml_rep" name="rep" />
19
+ </reference>
20
+ </ticketsystem_adminhtml_rep_index>
21
+ </layout>
app/design/frontend/base/default/layout/ticketsystem.xml ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout>
3
+
4
+ <default>
5
+ <reference name="content">
6
+ <block type="customer/ticketsystem_view" name="magetracking_ticketsystem_view" module="ticketsystem" template="ticketsystem/view.phtml"/>
7
+ </reference>
8
+ <reference name="left">
9
+ <block type="customer/account_navigation" name="magetracking_ticketsystem_navigation" before="-" template="ticketsystem/navigation.phtml">
10
+ <action method="addLink" translate="label" module="ticketsystem"><name>ticketsystem</name><path>ticketsystem/</path><label>Ticketing System</label></action>
11
+ </block>
12
+ </reference>
13
+ </default>
14
+
15
+ <ticketsystem_index_index>
16
+ <update handle="customer_account"/>
17
+ </ticketsystem_index_index>
18
+
19
+ <ticketsystem_index_edit>
20
+
21
+ <reference name="content">
22
+ <block type="customer/ticketsystem_edit" name="magetracking_ticketsystem_edit" template="ticketsystem/edit.phtml"/>
23
+ </reference>
24
+ </ticketsystem_index_edit>
25
+ <ticketsystem_index_add>
26
+
27
+ <reference name="content">
28
+ <block type="customer/ticketsystem_edit" name="magetracking_ticketsystem_add" template="ticketsystem/add.phtml"/>
29
+ </reference>
30
+
31
+ </ticketsystem_index_add>
32
+
33
+ <customer_logged_in>
34
+ <!--<update handle="customer_account"/>-->
35
+
36
+ </customer_logged_in>
37
+
38
+
39
+
40
+ </layout>
41
+
42
+
app/design/frontend/base/default/template/ticketsystem/add.phtml ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 1.0
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+ ?>
23
+ <?php
24
+
25
+
26
+ $customer_id = Mage::getSingleton('customer/session')->getCustomer()->getId();
27
+ $orderCollection = Mage::getModel('sales/order')->getCollection()
28
+ ->addFieldToFilter('customer_id', array('eq' => array($customer_id)));
29
+ $final_order = array();
30
+ $order_ids = array();
31
+ array_push($final_order, "Select Order");
32
+ foreach($orderCollection AS $order_row){
33
+ $order = $order_row->getData();
34
+ $order_data = "Order # ".$order['increment_id']." - Placed on ".$order['created_at']." for $".$order['subtotal_incl_tax'];
35
+
36
+ array_push($final_order, $order_data);
37
+ array_push($order_ids, $order['entity_id']);
38
+ }
39
+ ?>
40
+ <div class="padder">
41
+ <?php if($this->getTitle(null)): ?>
42
+
43
+ <div class="head-alt2">
44
+ <h2 class="title"><?php echo $this->getTitle(null) ?></h2>
45
+ </div>
46
+ <div class="input-text">
47
+ <h5 ><?php echo $this->__('Ticket Add Instruction') ?></h5>
48
+ </div>
49
+
50
+ <br>
51
+
52
+ <?php endif;?>
53
+
54
+ <?php echo $this->getMessagesBlock()->getGroupedHtml() ?>
55
+ <form action="<?php echo $this->getSaveUrl(0) ?>" method="post" id="form-validate">
56
+ <fieldset class="group-select">
57
+ <input type="hidden" name="success_url" value="<?php echo $this->getSuccessUrl() ?>" />
58
+ <input type="hidden" name="error_url" value="<?php echo $this->getErrorUrl() ?>" />
59
+
60
+ <ul>
61
+ <li>
62
+ <div class="input-box">
63
+ <label for="name"><?php echo $this->__('Name') ?> <span class="required"></span></label><br />
64
+ <input type="text" name="name" value="<?php echo $this->getName() ?>" title="<?php echo $this->__('Name') ?>" class="required-entry input-text" id="name" />
65
+ </div>
66
+ </li>
67
+ <li>
68
+ <div class="input-box">
69
+ <label for="email"><?php echo Mage::helper('ticketsystem')->__('Email') ?> <span class="required"></span></label><br />
70
+ <input type="text" name="email" value="<?php echo $this->getEmail() ?>" title="<?php echo $this->__('Email') ?>" <?php if ($this->getEmail()<>'') { ?> readonly <?php } ?>class="required-entry input-text" id="email" />
71
+ </div>
72
+ </li>
73
+ <li>
74
+ <div class="input-box">
75
+ <label for="phone"><?php echo Mage::helper('ticketsystem')->__('Phone') ?> </label><br />
76
+ <input type="text" name="phone" value="" title="<?php echo $this->__('Phone') ?>" class="input-text" id="phone" />
77
+ </div>
78
+ </li>
79
+ <li>
80
+ <div class="box">
81
+ <label><?php echo Mage::helper('ticketsystem')->__('Select Department') ?></label><br/>
82
+ <select name="cat">
83
+ <?php foreach ($this->getDepartments() as $_code => $_name): ?>
84
+ <option value="<?php echo $_code ?>" >
85
+ <?php echo $_name->getName() ?>
86
+ </option>
87
+ <?php endforeach; ?>
88
+ </select>
89
+ </div>
90
+ </li>
91
+ <li>
92
+ <div style="width:350px;">
93
+ <label for="ordername">Select Order</label><br />
94
+ <input type="hidden" id="orderid">
95
+ <?php
96
+
97
+ $dropdown = '<select name="orders" onchange="document.getElementById(\'orderid\').value = this.value;">'."\n";
98
+
99
+ $selected = "";
100
+ /*** loop over the options ***/
101
+ foreach( $final_order as $key=>$option )
102
+ {
103
+ /*** assign a selected value ***/
104
+ $select = $selected==$key ? ' selected' : null;
105
+
106
+ /*** add each option to the dropdown ***/
107
+ $dropdown .= '<option value="'.$option.'"'.$select.'>'.$option.'</option>'."\n";
108
+ }
109
+
110
+ /*** close the select ***/
111
+ $dropdown .= '</select>'."\n";
112
+
113
+ ?>
114
+ <?php echo $dropdown;?><br/>
115
+ </div>
116
+ </li>
117
+ <li>
118
+ <div style="width:350px;">
119
+ <label for="subject"><?php echo Mage::helper('ticketsystem')->__('Subject') ?> <span class="required"></span></label><br />
120
+ <input type="text" name="subject" value="" title="<?php echo Mage::helper('ticketsystem')->__('Subject') ?>" class="required-entry input-text" id="subject" />
121
+ </div>
122
+ </li>
123
+
124
+ <li>
125
+ <div class="input-box">
126
+ <label for="message"><?php echo Mage::helper('ticketsystem')->__('Message') ?> <span class="required"></span></label><br />
127
+ <textarea name="message" id="message" title="<?php echo $this->__('Message') ?>" class="required-entry" style="height:150px;width:525px;" cols="50" rows="5"></textarea>
128
+ </div>
129
+ </li>
130
+ <li>
131
+ <div class="box">
132
+ <label><?php echo Mage::helper('ticketsystem')->__('Priority') ?><span class="required"></span></label><br/>
133
+ <select name="priority">
134
+ <?php foreach ($this->getPriorities() as $_code => $_name): ?>
135
+ <option value="<?php echo $_code ?>" >
136
+ <?php echo $_name ?>
137
+ </option>
138
+ <?php endforeach; ?>
139
+ </select>
140
+ </div>
141
+ </li>
142
+ </ul>
143
+ </fieldset>
144
+
145
+ <div class="button-set">
146
+ <p class="required"><?php echo Mage::helper('ticketsystem')->__('* Required Fields') ?></p>
147
+ <a href="<?php echo $this->getBackUrl() ?>" class="f-left">&laquo; <?php echo $this->__('Back') ?></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
148
+ <button class="form-button" type="submit"><span><?php echo $this->__('Save Ticket') ?></span></button>
149
+ </div>
150
+ </form>
151
+
152
+ <script type="text/javascript">
153
+ var contactForm = new VarienForm('form-validate', true);
154
+ </script>
155
+ </div>
app/design/frontend/base/default/template/ticketsystem/edit.phtml ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 1.0
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+ ?>
23
+
24
+ <?php $id= $this->getRequest()->getParam('id'); ?>
25
+
26
+ <div class="padder">
27
+ <?php if($this->getTitle($id)): ?>
28
+
29
+ <div class="head-alt2">
30
+ <h2 class="title"><?php echo $this->getTitle($id) ?></h2>
31
+ </div>
32
+ <div class="input-text">
33
+ <h5 ><?php echo $this->__('Ticket Edit Instruction') ?></h5>
34
+ </div>
35
+
36
+ <?php endif; ?>
37
+
38
+ <?php echo $this->getMessagesBlock()->getGroupedHtml() ?>
39
+
40
+ <br>
41
+
42
+ <form action="<?php echo $this->getSaveUrl($id) ?>" method="post" id="form-validate">
43
+ <fieldset class="group-select">
44
+ <input type="hidden" name="success_url" value="<?php echo $this->getSuccessUrl() ?>" />
45
+ <input type="hidden" name="error_url" value="<?php echo $this->getErrorUrl() ?>" />
46
+ <input type="hidden" name="rep" value="<?php echo $this->getTicket($id)->getRep() ?>" />
47
+ <input type="hidden" name="ID" value="<?php echo $id ?>" />
48
+
49
+ <ul>
50
+ <li>
51
+ <div class="input-text">
52
+ <label for="name"><?php echo $this->__('Name') ?> : </label><?php echo $this->htmlEscape($this->getTicket($id)->getName()) ?>
53
+ </div>
54
+ </li>
55
+ <li>
56
+ <div class="input-text">
57
+ <label for="email"><?php echo Mage::helper('ticketsystem')->__('Email') ?> : </label><?php echo $this->htmlEscape($this->getTicket($id)->getEmail()) ?>
58
+ </div>
59
+ </li>
60
+ <li>
61
+ <div class="input-text">
62
+ <label for="phone"><?php echo Mage::helper('ticketsystem')->__('Phone') ?> : </label><?php echo $this->htmlEscape($this->getTicket($id)->getPhone()) ?>
63
+ </div>
64
+ </li>
65
+ <li>
66
+ <div class="input-text">
67
+ <label for="phone"><?php echo Mage::helper('ticketsystem')->__('Department') ?> : </label><?php echo $this->htmlEscape($this->getDepartment($this->getTicket($id)->getCat()) ) ?>
68
+ </div>
69
+ </li>
70
+ <li>
71
+ <div class="input-text">
72
+ <label for="orders"><?php echo Mage::helper('ticketsystem')->__('Orders') ?> : </label><?php echo $this->htmlEscape($this->getTicket($id)->getOrders()) ?>
73
+ </div>
74
+ </li>
75
+ <li>
76
+ <div class="input-text">
77
+ <label for="subject"><?php echo Mage::helper('ticketsystem')->__('Subject') ?> : </label><?php echo $this->htmlEscape($this->getTicket($id)->getSubject()) ?>
78
+ </div>
79
+ </li>
80
+ <li>
81
+ <div class="input-text">
82
+ <label for="message"><?php echo Mage::helper('ticketsystem')->__('Message') ?> : </label><?php echo $this->getMessage($this->getTicket($id)->getId()) ?>
83
+ </div>
84
+ </li>
85
+ <li>
86
+ <div class="input-text">
87
+ <label for="priority"><?php echo Mage::helper('ticketsystem')->__('Priority') ?> : </label><?php echo $this->htmlEscape($this->getPriority($this->getTicket($id)->getPriority())) ?>
88
+ </div>
89
+ </li>
90
+ <li>
91
+ <div class="input-box">
92
+ <label for="answer"><?php echo Mage::helper('ticketsystem')->__('Customer Answer') ?> <span class="required"></span></label><br />
93
+ <textarea name="answer" id="answer" title="<?php echo $this->__('Answer') ?>" class="required-entry" style="height:150px;width:525px;" cols="50" rows="5"></textarea>
94
+ </div>
95
+ </li>
96
+
97
+ </ul>
98
+ </fieldset>
99
+
100
+ <div class="button-set">
101
+ <p class="required"><?php echo Mage::helper('ticketsystem')->__('* Required Fields') ?></p>
102
+ <a href="<?php echo $this->getBackUrl() ?>" class="f-left">&laquo; <?php echo $this->__('Back') ?></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
103
+ <button class="form-button" type="submit"><span><?php echo $this->__('Update Ticket') ?></span></button>
104
+ </div>
105
+ </form>
106
+ <script type="text/javascript">
107
+ var contactForm = new VarienForm('form-validate', true);
108
+ </script>
109
+ </div>
app/design/frontend/base/default/template/ticketsystem/navigation.phtml ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design_default
22
+ * @package Mage
23
+ * @copyright Copyright (c) 2008 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ ?>
27
+ <div class="block block-list block-compare">
28
+ <div class="block-title">
29
+ <?php $_links = $this->getLinks(); ?>
30
+ <?php $_index = 1; ?>
31
+ <?php $_count = count($_links); ?>
32
+ <?php foreach ($_links as $_link):?>
33
+ <?php $_last = ($_index++ >= $_count); ?>
34
+ <?php if ($this->isActive($_link)): ?>
35
+ <strong><span class="on<?php echo ($_last ? ' last' : '') ?>"><?php echo $_link->getLabel() ?></span></strong>
36
+ <?php else: ?>
37
+ <strong><a href="<?php echo $_link->getUrl() ?>"><?php echo $_link->getLabel() ?></a></strong>
38
+ <?php endif; ?>
39
+ <?php endforeach; ?>
40
+ </div>
41
+
42
+ </div>
app/design/frontend/base/default/template/ticketsystem/view.phtml ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Sofhere SofTicket Magento Component
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the GNU (3.0)
8
+ * that is bundled with this package in the file LICENSE.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/gpl-3.0.html
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@sofhere.com so we can send you a copy immediately.
14
+ *
15
+ * @category design_default
16
+ * @author sofhere.com
17
+ * @package Sofhere_SofTicket
18
+ * @copyright Copyright (c) 2008-2009 Sofhere IT Solutions.(http://www.sofhere.com)
19
+ * @version 1.0
20
+ * @license http://opensource.org/licenses/gpl-3.0.html GNU GENERAL PUBLIC LICENSE (GNU 3.0)
21
+ */
22
+ ?>
23
+
24
+ <?php $_ticketsystems = $this->getTickets(); ?>
25
+ <?php if (is_null($_ticketsystems)) return; ?>
26
+
27
+ <div class="head-alt2">
28
+ <h2 class="title"><?php echo Mage::helper('ticketsystem')->__('Available Tickets') ?></h2>
29
+ </div>
30
+ <div class="input-text">
31
+ <h5 ><?php echo $this->__('Ticket View Instruction') ?></h5>
32
+ </div>
33
+
34
+ <br>
35
+
36
+ <?php echo $this->getMessagesBlock()->getGroupedHtml() ?>
37
+
38
+ <table cellspacing="0" width="80%" class="data-table" id="my-softickets-table">
39
+ <thead>
40
+ <tr>
41
+ <th class="a-left"><?php echo Mage::helper('ticketsystem')->__('Date') ?></th>
42
+ <th><?php echo Mage::helper('ticketsystem')->__('Ticket ID') ?></th>
43
+ <th class="a-left"><?php echo Mage::helper('ticketsystem')->__('Subject') ?></th>
44
+ <!--<th class="a-left"><?php echo Mage::helper('ticketsystem')->__('Department') ?></th>-->
45
+ <th class="a-left"><?php echo Mage::helper('ticketsystem')->__('Priority') ?></th>
46
+ <th class="a-left"><?php echo Mage::helper('ticketsystem')->__('Status') ?></th>
47
+ </tr>
48
+ </thead>
49
+ <tbody>
50
+ <?php foreach($_ticketsystems as $_item): ?>
51
+ <?php
52
+ $id=$_item['ID'];
53
+ $timestamp=$_item['timestamp'];
54
+ $subject=$_item['subject'];
55
+ if (strlen($subject)>30)
56
+ $subject = substr($subject,0,30).'...';
57
+ $catId=$_item['cat'];
58
+ $priority=$_item['priority'];
59
+ $status=$_item['status'];
60
+ ?>
61
+ <tr>
62
+ <td class="a-left"><?php echo $timestamp ?></td>
63
+ <td><a href="<?php echo $this->getUrl('ticketsystem/index/edit/id/'.$id) ?>" class="f-left"><?php echo $id ?></a></td>
64
+ <td class="a-left"><?php echo $subject ?></td>
65
+ <!-- <td class="a-left"><?php echo $this->getDepartment($catId) ?></td>-->
66
+ <td class="a-left"><?php echo $this->getPriority($priority) ?></td>
67
+ <td class="a-left"><?php echo $this->getStatus($status) ?></td>
68
+ </tr>
69
+ <?php endforeach ?>
70
+ </tbody>
71
+ </table>
72
+
73
+ <div class="button-set">
74
+ <input type="button" onclick="window.location='<?php echo $this->getUrl('ticketsystem/index/add') ?>';" value="<?php echo Mage::helper('ticketsystem')->__('New Ticket') ?>" class="input-button">
75
+ </div>
app/etc/modules/MageTracking_TicketSystem.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <MageTracking_TicketSystem>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ </MageTracking_TicketSystem>
8
+ </modules>
9
+ </config>
package.xml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>MageTracking_TicketSystem</name>
4
+ <version>1.2.1</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Allow customers to post their queries and concerns to admin.</summary>
10
+ <description>Order specific queries with efficient tracking and resolution system.</description>
11
+ <notes>First stable release 1.2.1</notes>
12
+ <authors><author><name>Manmeet Kaur</name><user>Clariontech</user><email>manmeetkaur.g@gmail.com</email></author></authors>
13
+ <date>2014-11-14</date>
14
+ <time>13:49:47</time>
15
+ <contents><target name="magecommunity"><dir name="MageTracking"><dir name="TicketSystem"><dir name="Block"><dir name="Adminhtml"><dir name="Cat"><file name="Cat.php" hash="586ba24b494352c2737f22444bb638fa"/><dir name="Edit"><file name="Form.php" hash="861a68ea410999d32205b56f869a2a0f"/><dir name="Tab"><file name="Form.php" hash="5ec9f8d2876a5b58ca632b78cb5ac152"/></dir><file name="Tabs.php" hash="4d7209a7d28f9f20fb6bd98652b7205a"/></dir><file name="Edit.php" hash="e04ee92f311571a6d0265833ac031c6f"/><file name="Grid.php" hash="5483324f04a45e8957b4d8bab15e9922"/></dir><file name="Cat.php" hash="6dc062e14609b2a3b763e9acc35fd6d2"/><dir name="Ticketsystem"><file name="Cat.php" hash="d45801a7c486f4df18ce1437ccde99e7"/><dir name="Edit"><file name="Form.php" hash="1f25f0333e481386cbcf5099c75fce43"/><file name="Newtabs.php" hash="46859b6191b44d2d508e5aa9a003b9ea"/><dir name="Tab"><file name="Form.php" hash="306caf6d3f2233dfce2226c85b3984a6"/><file name="Newform.php" hash="7d4cd6fb556ad0e4eea547d01603b60d"/></dir><file name="Tabs.php" hash="48c2bf68216b0ed06d8f73e66e3e1b05"/></dir><file name="Edit.php" hash="e38c8d8508240643c8c0649f1484c9f7"/><file name="Grid.php" hash="8e8a60f02618cbbe352019622d1fc9de"/><dir name="Mail"><file name="Form.php" hash="552147ea897b1f67c051f21c87db9c6f"/><dir name="Tab"><file name="Form.php" hash="c9f47b6a6f0749edfcee4184ee807bcd"/></dir><file name="Tabs.php" hash="cffc874837322729d18e0b2b55c9b4c2"/></dir><file name="Mail.php" hash="190acdad8799ea58c31784161596a51e"/><dir name="Setting"><file name="Form.php" hash="1cb9e541849d113916e6df8e7bda61bc"/><dir name="Tab"><file name="Form.php" hash="37cb541a3529f976161bc375261ff55d"/></dir><file name="Tabs.php" hash="7613b1ffd3e799f5ec0c64d15661b83c"/></dir><file name="Setting.php" hash="2b7845ced26a4359d31a2e8f74fff0bf"/></dir><file name="Ticketsystem.php" hash="e0dff574e88b1c88dfbecdadfc71552b"/></dir><file name="Cat.php" hash="82fa5c45eaa95a788e901a427ada99bd"/><dir name="Ticketsystem"><file name="Edit.php" hash="df8493197ade6b63b3da3ffaf735c223"/><file name="Navigation.php" hash="896d3c3e58467d3d35074260d85fb132"/><file name="View.php" hash="24d4cb2ec28a0485fdb01ffbc18a5b41"/></dir><file name="Ticketsystem.php" hash="877ec3cc25b5f4ed2f9945bcbc2a5b31"/></dir><dir name="Helper"><file name="Data.php" hash="55b634f3d5a2c7f192c5168856c4f31b"/><file name="Mail.php" hash="220e4e5191fc921e2d23d92bf4b3895c"/><file name="Mail_data.php" hash="d2639f1d0261ed766ccb6b44f6a221d2"/><file name="Phpmailer.php" hash="e80be7c6ad4edb2e31ef1252dae15164"/><file name="Smtp.php" hash="6b0ec32d145256df4b66e5f2f7baf355"/><file name="Ticket.php" hash="99828c0d2923c9d254998b60868723b0"/><file name="TicketFunctions.php" hash="66c9f5a9b82f133b27976ff2aa16479c"/><file name="email-example.html" hash="0db129d8958122d7b810793854e5fcc8"/></dir><dir name="Model"><file name="Answers.php" hash="6f918accfcd61009b054ce3e0c24fb28"/><file name="Cats.php" hash="3f0f1eb082e9c34b76e6db1e21f4e62f"/><file name="Groups.php" hash="ab1d418cfaf79a2da169d3ba7b33616f"/><file name="Mail.php" hash="d89c7d8cb549d877b9d0bebf93f31342"/><file name="Messages.php" hash="0befbd31c3f7dbab2158edcc14e4384d"/><dir name="Mysql4"><dir name="Answers"><file name="Collection.php" hash="cb71f90b2f9de9f16fc57eb2dc128f81"/></dir><file name="Answers.php" hash="cfafe1e43c93aea3f1d4de417c7b489a"/><dir name="Cats"><file name="Collection.php" hash="3d23bbdf2fa7f0137254f9cf5511813a"/></dir><file name="Cats.php" hash="fe3b00699c4d444f04a17dfd62b76e96"/><dir name="Groups"><file name="Collection.php" hash="2c805c01e413e44efe02828cb99d372c"/></dir><file name="Groups.php" hash="0fe54100d79f5fb91a88c7adf33c1de8"/><dir name="Mail"><file name="Collection.php" hash="0d455617b65f4163ad09d7aa16a688a5"/></dir><file name="Mail.php" hash="e1bed2c92e78bc8deb8706b100ac3846"/><file name="Messages.php" hash="95cf65b8a0e92a017a0917351a2b0130"/><dir name="Settings"><file name="Collection.php" hash="96f7e25a40958a4d1564a7ad179b8e02"/></dir><file name="Settings.php" hash="b202494080f477e11d48f18db29748da"/><dir name="Ticketsystem"><file name="Collection.php" hash="8af813dd7b207e844b151768024bc8dc"/></dir><file name="Ticketsystem.php" hash="fa19accedb52af3079c063899802f28a"/></dir><file name="Settings.php" hash="9f22a8dd293607d416d7b6c292f4982c"/><file name="Status.php" hash="1159148e85bec724c63eb309fb352c0d"/><file name="Ticketsystem.php" hash="07b956d364180b97a570acd60959b0d7"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="CatController.php" hash="2fd02626293bb581afc8418d9912ebee"/><file name="MailController.php" hash="4a5f3d437bc504a7cc082b2d47b69440"/><file name="SettingController.php" hash="acdb0434338a7bf537396aabf0e53486"/><file name="TicketsystemController.php" hash="831e567a03e28196b773ae6d59b3451e"/></dir><file name="IndexController.php" hash="6e065b1c6fd0e1e22f0cd298c3b8d070"/></dir><dir name="etc"><file name="config.xml" hash="d625b4091612a46e64317b8e5c2495f1"/></dir><dir name="sql"><dir name="ticketsystem_setup"><file name="mysql4-install-1.2.1.php" hash="576484a23552cce0a5155964170d5b53"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="ticketsystem.xml" hash="70ed75f80e1995356ad21caba5b8d590"/></dir><dir name="template"><dir name="ticketsystem"><file name="add.phtml" hash="03e0a35d9643fa556f3891ed1fa8722d"/><file name="edit.phtml" hash="cb2cd583027a179e9f8608a02dc1668a"/><file name="navigation.phtml" hash="1d77768501241b35557699d7c4d6eaf9"/><file name="view.phtml" hash="afbeb160eca02d464df9c88d4c5ea38d"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="ticketsystem.xml" hash="40713c5bc7867dd30a9a3966578d9217"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="MageTracking_TicketSystem.xml" hash="e7a0b88c04733e250385479c79a29f8b"/></dir></target></contents>
16
+ <compatible/>
17
+ <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
18
+ </package>