Osc_Mage_Admin - Version 2.0.0

Version Notes

Release with latest version

Download this release

Release Info

Developer Satish Mantri
Extension Osc_Mage_Admin
Version 2.0.0
Comparing to
See all releases


Version 2.0.0

app/code/community/Oscprofessionals/Magemobapp/Block/Order/Totals.php ADDED
@@ -0,0 +1,300 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @category Oscprofessionals
5
+ * @package Oscprofessionals_Magemobapp
6
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
7
+ */
8
+ class Oscprofessionals_Magemobapp_Block_Order_Totals extends Mage_Sales_Block_Order_Totals {
9
+ /**
10
+ * important can't delete
11
+ */
12
+ protected $_totals;
13
+ protected $_order = null;
14
+
15
+ /**
16
+ * Initialize self totals and children blocks totals before html building
17
+ *
18
+ * @return Mage_Sales_Block_Order_Totals
19
+ */
20
+ protected function _beforeToHtml()
21
+ {
22
+ $this->_initTotals();
23
+ foreach ($this->getChild() as $child) {
24
+ if (method_exists($child, 'initTotals')) {
25
+ $child->initTotals();
26
+ }
27
+ }
28
+ return parent::_beforeToHtml();
29
+ }
30
+
31
+ /**
32
+ * Get order object
33
+ *
34
+ * @return Mage_Sales_Model_Order
35
+ */
36
+ public function getOrder()
37
+ {
38
+ if ($this->_order === null) {
39
+ if ($this->hasData('order')) {
40
+ $this->_order = $this->_getData('order');
41
+ } elseif (Mage::registry('current_order')) {
42
+ $this->_order = Mage::registry('current_order');
43
+ } elseif ($this->getParentBlock()->getOrder()) {
44
+ $this->_order = $this->getParentBlock()->getOrder();
45
+ }
46
+ }
47
+ return $this->_order;
48
+ }
49
+
50
+ public function setOrder($order)
51
+ {
52
+ $this->_order = $order;
53
+ return $this;
54
+ }
55
+
56
+ /**
57
+ * Get totals source object
58
+ *
59
+ * @return Mage_Sales_Model_Order
60
+ */
61
+ public function getSource()
62
+ {
63
+ return $this->getOrder();
64
+ }
65
+
66
+ /**
67
+ * Initialize order totals array
68
+ *
69
+ * @return Mage_Sales_Block_Order_Totals
70
+ */
71
+ public function initTotals()
72
+ {
73
+ $source = $this->getSource();
74
+
75
+ $this->_totals = array();
76
+ $this->_totals['subtotal'] = new Varien_Object(array(
77
+ 'code' => 'sub total',
78
+ 'value' => $source->getSubtotal(),
79
+ 'label' => $this->__('Subtotal')
80
+ ));
81
+
82
+
83
+ /**
84
+ * Add shipping
85
+ */
86
+ if (!$source->getIsVirtual() && ((float) $source->getShippingAmount() || $source->getShippingDescription()))
87
+ {
88
+ $this->_totals['shipping'] = new Varien_Object(array(
89
+ 'code' => 'shipping',
90
+ 'field' => 'shipping_amount',
91
+ 'value' => $this->getSource()->getShippingAmount(),
92
+ 'label' => $this->__('Shipping & Handling')
93
+ ));
94
+ }
95
+
96
+ /**
97
+ * Add discount
98
+ */
99
+ if (((float)$this->getSource()->getDiscountAmount()) != 0) {
100
+ if ($this->getSource()->getDiscountDescription()) {
101
+ $discountLabel = $this->__('Discount (%s)', $source->getDiscountDescription());
102
+ } else {
103
+ $discountLabel = $this->__('Discount');
104
+ }
105
+ $this->_totals['discount'] = new Varien_Object(array(
106
+ 'code' => 'discount',
107
+ 'field' => 'discount_amount',
108
+ 'value' => $source->getDiscountAmount(),
109
+ 'label' => $discountLabel
110
+ ));
111
+ }
112
+
113
+ /**
114
+ * Add Tax
115
+ */
116
+ if (((float)$this->getSource()->getTaxAmount()) != 0) {
117
+
118
+ $this->_totals['tax'] = new Varien_Object(array(
119
+ 'code' => 'tax',
120
+ 'field' => 'tax_amount',
121
+ 'value' => $source->getTaxAmount(),
122
+ 'label' => 'Tax'
123
+ ));
124
+ }
125
+
126
+ $this->_totals['grand_total'] = new Varien_Object(array(
127
+ 'code' => 'grand total',
128
+ 'field' => 'grand_total',
129
+ 'strong'=> true,
130
+ 'value' => $source->getGrandTotal(),
131
+ 'label' => $this->__('Grand Total')
132
+ ));
133
+
134
+ /**
135
+ * Base grandtotal
136
+ */
137
+ if ($this->getOrder()->isCurrencyDifferent()) {
138
+ $this->_totals['base_grandtotal'] = new Varien_Object(array(
139
+ 'code' => 'base_grandtotal',
140
+ 'value' => $this->getOrder()->formatBasePrice($source->get()),
141
+ 'label' => $this->__('Grand Total to be Charged'),
142
+ 'is_formated' => true,
143
+ ));
144
+ }
145
+ return $this;
146
+ }
147
+
148
+ /**
149
+ * Add new total to totals array after specific total or before last total by default
150
+ *
151
+ * @param Varien_Object $total
152
+ * @param null|string|last|first $after
153
+ * @return Mage_Sales_Block_Order_Totals
154
+ */
155
+ public function addTotal(Varien_Object $total, $after=null)
156
+ {
157
+ if ($after !== null && $after != 'last' && $after != 'first') {
158
+ $totals = array();
159
+ $added = false;
160
+ foreach ($this->_totals as $code => $item) {
161
+ $totals[$code] = $item;
162
+ if ($code == $after) {
163
+ $added = true;
164
+ $totals[$total->getCode()] = $total;
165
+ }
166
+ }
167
+ if (!$added) {
168
+ $last = array_pop($totals);
169
+ $totals[$total->getCode()] = $total;
170
+ $totals[$last->getCode()] = $last;
171
+ }
172
+ $this->_totals = $totals;
173
+ } elseif ($after=='last') {
174
+ $this->_totals[$total->getCode()] = $total;
175
+ } elseif ($after=='first') {
176
+ $totals = array($total->getCode()=>$total);
177
+ $this->_totals = array_merge($totals, $this->_totals);
178
+ } else {
179
+ $last = array_pop($this->_totals);
180
+ $this->_totals[$total->getCode()] = $total;
181
+ $this->_totals[$last->getCode()] = $last;
182
+ }
183
+ return $this;
184
+ }
185
+
186
+ /**
187
+ * Add new total to totals array before specific total or after first total by default
188
+ *
189
+ * @param Varien_Object $total
190
+ * @param null|string $after
191
+ * @return Mage_Sales_Block_Order_Totals
192
+ */
193
+ public function addTotalBefore(Varien_Object $total, $before=null)
194
+ {
195
+ if ($before !== null) {
196
+ if (!is_array($before)) {
197
+ $before = array($before);
198
+ }
199
+ foreach ($before as $beforeTotals) {
200
+ if (isset($this->_totals[$beforeTotals])) {
201
+ $totals = array();
202
+ foreach ($this->_totals as $code => $item) {
203
+ if ($code == $beforeTotals) {
204
+ $totals[$total->getCode()] = $total;
205
+ }
206
+ $totals[$code] = $item;
207
+ }
208
+ $this->_totals = $totals;
209
+ return $this;
210
+ }
211
+ }
212
+ }
213
+ $totals = array();
214
+ $first = array_shift($this->_totals);
215
+ $totals[$first->getCode()] = $first;
216
+ $totals[$total->getCode()] = $total;
217
+ foreach ($this->_totals as $code => $item) {
218
+ $totals[$code] = $item;
219
+ }
220
+ $this->_totals = $totals;
221
+ return $this;
222
+ }
223
+
224
+ /**
225
+ * Get Total object by code
226
+ *
227
+ * @@return Varien_Object
228
+ */
229
+ public function getTotal($code)
230
+ {
231
+ if (isset($this->_totals[$code])) {
232
+ return $this->_totals[$code];
233
+ }
234
+ return false;
235
+ }
236
+
237
+ /**
238
+ * Delete total by specific
239
+ *
240
+ * @param string $code
241
+ * @return Mage_Sales_Block_Order_Totals
242
+ */
243
+ public function removeTotal($code)
244
+ {
245
+ unset($this->_totals[$code]);
246
+ return $this;
247
+ }
248
+
249
+ /**
250
+ * Apply sort orders to totals array.
251
+ * Array should have next structure
252
+ * array(
253
+ * $totalCode => $totalSortOrder
254
+ * )
255
+ *
256
+ *
257
+ * @param array $order
258
+ * @return Mage_Sales_Block_Order_Totals
259
+ */
260
+ public function applySortOrder($order)
261
+ {
262
+ return $this;
263
+ }
264
+
265
+ /**
266
+ * get totals array for visualization
267
+ *
268
+ * @return array
269
+ */
270
+ public function getTotals($area=null)
271
+ {
272
+ $totals = array();
273
+ if ($area === null) {
274
+ $totals = $this->_totals;
275
+ } else {
276
+ $area = (string)$area;
277
+ foreach ($this->_totals as $total) {
278
+ $totalArea = (string) $total->getArea();
279
+ if ($totalArea == $area) {
280
+ $totals[] = $total;
281
+ }
282
+ }
283
+ }
284
+ return $totals;
285
+ }
286
+
287
+ /**
288
+ * Format total value based on order currency
289
+ *
290
+ * @param Varien_Object $total
291
+ * @return string
292
+ */
293
+ public function formatValue($total)
294
+ {
295
+ if (!$total->getIsFormated()) {
296
+ return $this->getOrder()->formatPrice($total->getValue());
297
+ }
298
+ return $total->getValue();
299
+ }
300
+ }
app/code/community/Oscprofessionals/Magemobapp/Block/Osc.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @category Oscprofessionals
5
+ * @package Oscprofessionals_Magemobapp
6
+ * @author : Oscprofessionals Team <oscpteam@oscprofessionals.com>
7
+ */
8
+
9
+ //osc block class for call model class file according to action.
10
+ class Oscprofessionals_Magemobapp_Block_Osc extends Mage_Core_Block_Template {
11
+
12
+ }
app/code/community/Oscprofessionals/Magemobapp/Helper/Data.php ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @category Oscprofessionals
5
+ * @package Oscprofessionals_Magemobapp
6
+ * @author : Oscprofessionals Team <oscpteam@oscprofessionals.com>
7
+ */
8
+ class Oscprofessionals_Magemobapp_Helper_Data extends Mage_Core_Helper_Abstract
9
+ {
10
+
11
+ //Data reporting days limit from admin setting
12
+ const REPORTING_DAYS = 'magemobapp/settings/reporting_days';
13
+
14
+ /**
15
+ * get from day with date Filter
16
+ * @param type $filter
17
+ * @return type
18
+ */
19
+ public function getTodaysDate($daysFilter = null)
20
+ {
21
+
22
+ $fromDate = Mage::app()->getLocale()->date();
23
+ $fromDate->subDate(0);
24
+ $date = gmdate("Y-m-d", $fromDate->getTimestamp());
25
+ return $date;
26
+
27
+ }
28
+
29
+
30
+ /**
31
+ * get last day with date Filter
32
+ * @param type $filter
33
+ * @return type
34
+ */
35
+ public function getLastWeekDate($daysFilter = null)
36
+ {
37
+
38
+ $fromDate = Mage::app()->getLocale()->date();
39
+ $fromDate->subDate(7);
40
+ $date = gmdate("Y-m-d", $fromDate->getTimestamp());
41
+ return $date;
42
+
43
+ }
44
+
45
+
46
+ /**
47
+ * get 1 month Back date for filter
48
+ * @param type $filter
49
+ * @return type
50
+ */
51
+ public function getMonthBackDate()
52
+ {
53
+
54
+ $currentDate = Mage::app()->getLocale()->date();
55
+ $currentDate->subMonth(1);
56
+ $fromDate = date('Y-m-d H:i:s', strtotime($currentDate));
57
+
58
+ return $fromDate;
59
+ }
60
+
61
+ /**
62
+ * get back date with admin reporting days.
63
+ * @param type $filter
64
+ * @return type
65
+ */
66
+ public function getReportingDate()
67
+ {
68
+ $reportingDays = Mage::getStoreConfig(self::REPORTING_DAYS);
69
+ $fromDate = Mage::app()->getLocale()->date();
70
+
71
+ if(($reportingDays > 30) || empty($reportingDays)){
72
+ $reportingDays = 30;
73
+ }
74
+ $date = gmdate("Y-m-d", $fromDate->getTimestamp());
75
+ // minus from current date to reporting date
76
+ if($reportingDays > 0){
77
+ $reportingDays = ($reportingDays - 1);
78
+ }else{
79
+ $reportingDays;
80
+ }
81
+ $beforeDate = "-".$reportingDays.'days';
82
+ $date = date('Y-m-d', strtotime($beforeDate, strtotime($date)));
83
+ return $date;
84
+ }
85
+ }
app/code/community/Oscprofessionals/Magemobapp/Model/Customers.php ADDED
@@ -0,0 +1,355 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @category Oscprofessionals
5
+ * @package Oscprofessionals_Magemobapp
6
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
7
+ */
8
+ class Oscprofessionals_Magemobapp_Model_Customers extends Mage_Core_Model_Abstract
9
+ {
10
+ protected $_dataArray;
11
+ public $days = '';
12
+
13
+ /**
14
+ * @return json array
15
+ * @return customers info (array)
16
+ */
17
+ public function oscIndex($params)
18
+ {
19
+
20
+ return $this->getCustomerInfo($params['customer_id']);
21
+ }
22
+
23
+ /**
24
+ * Get store customer Count
25
+ * @return (string) count
26
+ */
27
+ public function customerCount($days = '')
28
+ {
29
+
30
+ switch ($days) {
31
+ case "today":
32
+ //get Todays Date
33
+ $fromDate = Mage::helper('magemobapp')->getTodaysDate();
34
+ break;
35
+ case "lastWeek":
36
+ //get 1 week Back date
37
+ $fromDate = Mage::helper('magemobapp')->getLastWeekDate();
38
+ break;
39
+ case "lastMonth":
40
+ //get 1 month Back date
41
+ $fromDate = Mage::helper('magemobapp')->getMonthBackDate();
42
+ break;
43
+ default:
44
+ //get reporting date
45
+ $fromDate = Mage::helper('magemobapp')->getReportingDate();
46
+
47
+ }
48
+
49
+ //store Id
50
+ $storeId = Mage::getModel('magemobapp/storeinfo')->getStoreId();
51
+
52
+ $customersCollection = Mage::getModel('customer/customer')->getCollection()->addAttributeToFilter('created_at', array(
53
+ 'from' => $fromDate
54
+ ));
55
+
56
+ $customersCount = 0;
57
+ if ($storeId != 0) {
58
+ $customersCollection->addAttributeToFilter('store_id', $storeId);
59
+ }
60
+ $customersCount = $customersCollection->count(); //customers count
61
+
62
+ return $customersCount;
63
+
64
+ }
65
+
66
+
67
+ /**
68
+ * Get order info
69
+ * @return customers info (array)
70
+ */
71
+ public function getCustomerList()
72
+ {
73
+
74
+ //get store ID
75
+ $storeId = Mage::getModel('magemobapp/storeinfo')->getStoreId();
76
+
77
+ //reporting date
78
+ $fromDate = Mage::helper('magemobapp')->getReportingDate();
79
+
80
+ $customerCollection = Mage::getModel('customer/customer')->getCollection()->addAttributeToFilter('created_at', array(
81
+ 'from' => $fromDate
82
+ ))->addAttributeToSort('created_at', 'desc');
83
+ $customerCollection->addAttributeToSelect(array(
84
+ 'firstname',
85
+ 'lastname'
86
+ ));
87
+
88
+ if ($storeId != 0) {
89
+ $customerCollection->addAttributeToFilter('store_id', $storeId); //fill store
90
+ }
91
+
92
+ foreach ($customerCollection as $_customer) {
93
+ $customer = Mage::getModel('customer/customer')->load($_customer->getId()); //insert cust ID
94
+ foreach ($customer->getAddresses() as $address) {
95
+ $telephone = $address->getTelephone();
96
+ $countryCode = $address->getCountryId();
97
+ $countryName = Mage::app()->getLocale()->getCountryTranslation($countryCode);
98
+ }
99
+
100
+ //get order commection with customer ID
101
+ $orderCount = $this->getCustomerTotalOrder($_customer->getId());
102
+
103
+ $this->_dataArray[] = array(
104
+ 'customer_id' => $_customer->getId(),
105
+ 'customer_name' => $_customer->getName(),
106
+ 'customer_email' => $_customer->getEmail(),
107
+ 'customer_total_order' => $orderCount,
108
+ 'customer_phone_no' => $telephone,
109
+ 'customer_location' => $countryName,
110
+ 'customer_registration_date' => $_customer->getCreatedAt()
111
+ );
112
+ }
113
+ return $this->_dataArray;
114
+
115
+ }
116
+
117
+
118
+ /**
119
+ * Get customer info
120
+ * @return customer info (array)
121
+ */
122
+ public function getCustomerInfo($customerId = null)
123
+ {
124
+ $telephone = '';
125
+ $countryName = '';
126
+
127
+ $customer = Mage::getModel('customer/customer')->load($customerId); //insert cust ID
128
+ $customerData = $customer->getData();
129
+
130
+ //get order commection with customer ID
131
+ $orderCount = $this->getCustomerTotalOrder($customer->getId());
132
+
133
+ //get customer created_date
134
+ $createdAt = $customer->getCreatedAt();
135
+ $createdAt = Mage::helper('core')->formatDate($createdAt, Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM, true);
136
+
137
+ //get customer total sales
138
+ $customerTotalsSale = $this->getLifetimeSales($customer->getId());
139
+
140
+ $customerOrderData = $this->getCustomersOrders($customer->getId());
141
+
142
+ //customer address object
143
+ $addressData = Mage::getModel('customer/address')->load($customer->getDefaultBilling());
144
+
145
+ // "long" country name
146
+ $country_id = $addressData->getCountryId();
147
+ $address = $addressData['street'] . ",";
148
+ $address .= $addressData->getCity() . ",";
149
+ $region = $addressData->getRegion();
150
+
151
+ if (!empty($region)) {
152
+ $address .= $region . ",";
153
+ }
154
+
155
+ $address .= $addressData->getPostcode() . ",";
156
+ $address .= Mage::app()->getLocale()->getCountryTranslation($country_id);
157
+
158
+ foreach ($customer->getAddresses() as $customerAddress) {
159
+ $telephone = $customerAddress->getTelephone();
160
+ $countryCode = $customerAddress->getCountryId();
161
+ $countryName = Mage::app()->getLocale()->getCountryTranslation($countryCode);
162
+ }
163
+
164
+ $this->_dataArray = array(
165
+ 'customer_id' => $customer->getId(),
166
+ 'customer_name' => $customer->getName(),
167
+ 'customer_email' => $customer->getEmail(),
168
+ 'customer_total_order' => $orderCount,
169
+ 'customer_phone_no' => $telephone,
170
+ 'customer_location' => $countryName,
171
+ 'customer_registration_date' => $createdAt,
172
+ 'customer_billing_address' => $address,
173
+ 'customer_total_sale' => Mage::helper('core')->currency($customerTotalsSale, true, false), //customer sales with currency;
174
+ 'customer_orders' => $customerOrderData
175
+ );
176
+ //return customer info data
177
+ return $this->_dataArray;
178
+
179
+ }
180
+
181
+ /**
182
+ * get customer total order count
183
+ * @param type $customer_id
184
+ * @return customer order count
185
+ */
186
+ public function getCustomerTotalOrder($customerId)
187
+ {
188
+
189
+ //get store ID
190
+ $storeId = Mage::getModel('magemobapp/storeinfo')->getStoreId();
191
+
192
+ $orders = Mage::getModel('sales/order')->getCollection()->addFieldToFilter('customer_id', $customerId);
193
+
194
+ if ($storeId != 0) {
195
+ $orders->addAttributeToFilter('store_id', $storeId); //fill store
196
+ }
197
+
198
+ $orderCount = $orders->count(); //orders count
199
+
200
+ return $orderCount;
201
+ }
202
+
203
+
204
+ /**
205
+ * get life time sales value of customer info
206
+ * @param type $customerId
207
+ * @return customer Life Time sale
208
+ */
209
+ public function getLifetimeSales($customerId)
210
+ {
211
+
212
+ $collection = Mage::getResourceModel('sales/order_collection');
213
+
214
+ $collection->addAttributeToFilter('customer_id', $customerId);
215
+
216
+ //fetch data
217
+ $collection->getSelect()->reset(Zend_Db_Select::COLUMNS)->columns(array(
218
+ 'total' => 'SUM(base_grand_total)'
219
+ ))->group("{$this->mainTable}.customer_id");
220
+ $first_item = $collection->getFirstItem();
221
+
222
+ return $first_item->getData('total');
223
+ }
224
+
225
+
226
+ /**
227
+ * get orders details from customer ID
228
+ * @param type $customerId
229
+ * @return customer order Data
230
+ */
231
+ public function getCustomersOrders($customerId)
232
+ {
233
+ $dir = '';
234
+ $collection = Mage::getModel("sales/order")->getCollection()->addFieldToFilter('customer_id', $customerId);
235
+ $reverseDir = ($dir == 'DESC') ? 'ASC' : 'DESC';
236
+ $collection->getSelect()->order('created_at ' . $reverseDir);
237
+
238
+ foreach ($collection as $_customerData) {
239
+ $this->_dataArray[] = array(
240
+ 'order_id' => $_customerData->getId(),
241
+ 'increment_id' => $_customerData->getIncrementId(),
242
+ 'order_date' => $_customerData->getCreatedAt(),
243
+ 'order_status' => $_customerData->getStatus(),
244
+ 'order_total' => Mage::helper('core')->currency($_customerData->getGrandTotal(), true, false)
245
+ );
246
+ }
247
+
248
+ return $this->_dataArray;
249
+
250
+ }
251
+
252
+ /**
253
+ * Get Online visitors
254
+ * @return onlinevisitors (array)
255
+ */
256
+ public function getOnlineCustomers()
257
+ {
258
+
259
+ $params['store'] = Mage::getModel('magemobapp/storeinfo')->getStoreId();
260
+ $returning = 0;
261
+ $new = 0;
262
+ $total = 0;
263
+
264
+ $storeId = '';
265
+ if (isset($params['store']) && $params['store'] != '') {
266
+ $storeId = $params['store'];
267
+ }
268
+
269
+ $customers = Mage::getModel('log/visitor_online')->getCollection();
270
+ $read = Mage::getSingleton('core/resource')->getConnection('core_read');
271
+ $visitorTable = $read->getTableName('log_visitor');
272
+ $table = 'main_table';
273
+ $customers->getSelect()->joinInner(array(
274
+ 'lvt' => $visitorTable
275
+ ), "lvt.visitor_id = {$table}.visitor_id", array(
276
+ 'last_visit_at',
277
+ 'store_id'
278
+ ));
279
+
280
+ $customers->addFieldToFilter('store_id', $storeId);
281
+
282
+
283
+ $onlineStatus = array();
284
+ foreach ($customers as $val) {
285
+ $onlinestatus = $val->toArray();
286
+ if ($onlinestatus['visitor_type'] == 'c') {
287
+ $returning++;
288
+ }
289
+ if ($onlinestatus['visitor_type'] == 'v') {
290
+ $new++;
291
+ }
292
+ $total++;
293
+
294
+ }
295
+ $output = array(
296
+ 'new_customer' => $new,
297
+ 'returnig_customer' => $returning,
298
+ 'total_customer' => $total
299
+ );
300
+ return $output;
301
+
302
+
303
+ }
304
+ /**
305
+ * Get Abandoned Customers
306
+ * @return Abandoned Customers (array)
307
+ */
308
+ public function getAbandonedCustomersList($params)
309
+ {
310
+ $fromDate = Mage::helper('magemobapp')->getReportingDate();
311
+ $collection = Mage::getResourceModel('reports/quote_collection');
312
+
313
+
314
+ $storeIds = '';
315
+ $dir = '';
316
+ if (isset($params['store']) && $params['store'] != '') {
317
+ $storeIds = Mage::getModel('magemobapp/storeinfo')->getStoreIds($params['store']);
318
+ }
319
+
320
+ $reverseDir = ($dir == 'DESC') ? 'ASC' : 'DESC';
321
+ $collection->getSelect()->where('main_table.created_at>=?',$fromDate)->order('main_table.created_at ' . $reverseDir);
322
+
323
+ $collection->prepareForAbandonedReport($storeIds);
324
+
325
+ $cartCollection = $collection->load()->toArray();
326
+
327
+
328
+ $result = array();
329
+ foreach ($cartCollection['items'] as $key => $val) {
330
+ $result[$key]['entity_id'] = $cartCollection['items'][$key]['entity_id'];
331
+ $result[$key]['store_id'] = $cartCollection['items'][$key]['store_id'];
332
+ $result[$key]['created_at'] = $cartCollection['items'][$key]['created_at'];
333
+ $result[$key]['items_count'] = $cartCollection['items'][$key]['items_count'];
334
+ $result[$key]['customer_firstname'] = $cartCollection['items'][$key]['customer_firstname'];
335
+ $result[$key]['customer_lastname'] = $cartCollection['items'][$key]['customer_lastname'];
336
+ $result[$key]['customer_email'] = $cartCollection['items'][$key]['customer_email'];
337
+ $result[$key]['customer_is_guest'] = $cartCollection['items'][$key]['customer_is_guest'];
338
+ $result[$key]['grand_total'] = Mage::helper('core')->currency($cartCollection['items'][$key]['grand_total'], true, false);
339
+ $result[$key]['remote_ip'] = $cartCollection['items'][$key]['remote_ip'];
340
+ }
341
+
342
+ return $result;
343
+ }
344
+ /**
345
+ * Get count Abandoned Customers
346
+ * @return Abandoned Customers count
347
+ */
348
+ public function getCountAbandonedCustomers()
349
+ {
350
+ $params['store'] = Mage::getModel('magemobapp/storeinfo')->getStoreId();
351
+ $abandonedcart = $this->getAbandonedCustomersList($params);
352
+ $abandonedcartCount = count($abandonedcart);
353
+ return $abandonedcartCount;
354
+ }
355
+ }
app/code/community/Oscprofessionals/Magemobapp/Model/Dashboard.php ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @category Oscprofessionals
5
+ * @package Oscprofessionals_Magemobapp
6
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
7
+ */
8
+ class Oscprofessionals_Magemobapp_Model_Dashboard extends Mage_Core_Model_Abstract
9
+ {
10
+ protected $_dataArray;
11
+ public $days;
12
+
13
+ //Data reporting days limit from admin setting
14
+ const REPORTING_DAYS = 'magemobapp/settings/reporting_days';
15
+
16
+ /**
17
+ * @return json array
18
+ * @return dashboard info.
19
+ */
20
+ public function oscIndex()
21
+ {
22
+
23
+ return array(
24
+ 'last_update_time' => date('Y-m-d H:i:s'),
25
+ 'dashboard' => $this->getDashboardInfo()
26
+ );
27
+ }
28
+
29
+ /**
30
+ * Get dashboard info
31
+ * @return dashboard info (array)
32
+ */
33
+ function getDashboardInfo()
34
+ {
35
+
36
+
37
+ //get order Model
38
+ $order = Mage::getModel('magemobapp/orders');
39
+
40
+ //get customers Model
41
+ $customers = Mage::getModel('magemobapp/customers');
42
+
43
+ //Recent order count with date filter from order class
44
+ $newOrdercount = $order->orderCount('today');
45
+
46
+
47
+ //get all order count
48
+ $orderCount = $order->orderCount('');
49
+
50
+ //get customers count
51
+ $newCustomersCount = $customers->customerCount('today');
52
+
53
+ //get all customer count
54
+ $customerCount = $customers->customerCount();
55
+
56
+ //get count stock alert
57
+ $stockAlertCount = Mage::getModel('magemobapp/stock')->getCountStockAlert();
58
+
59
+ //get online customer(visitors) count
60
+ $onlinestatusCount = Mage::getModel('magemobapp/customers')->getOnlineCustomers();
61
+
62
+ //get abandoned cart customer count
63
+ $abandonedcartCount = Mage::getModel('magemobapp/customers')->getCountAbandonedCustomers();
64
+
65
+ //get store total sales
66
+ $salesTotal = $order->todaysSalesTotal();
67
+ $neworder_enabled = Mage::getStoreConfig('magemobapp/dashboard/neworder_enabled');
68
+ $allorder_enabled = Mage::getStoreConfig('magemobapp/dashboard/allorder_enabled');
69
+ $newcustomers_enabled = Mage::getStoreConfig('magemobapp/dashboard/newcustomers_enabled');
70
+ $allcustomers_enabled = Mage::getStoreConfig('magemobapp/dashboard/allcustomers_enabled');
71
+ $stockalert_enabled = Mage::getStoreConfig('magemobapp/dashboard/stockalert_enabled');
72
+ $todayssales_enabled = Mage::getStoreConfig('magemobapp/dashboard/todayssales_enabled');
73
+ $reportingdays_enabled = Mage::getStoreConfig('magemobapp/dashboard/reportingdays_enabled');
74
+ $online_enabled = Mage::getStoreConfig('magemobapp/dashboard/online_enabled');
75
+ $abandonedcart_enabled = Mage::getStoreConfig('magemobapp/dashboard/abandonedcart_enabled');
76
+
77
+ if ($neworder_enabled == 1) {
78
+ $finalArr['new_order'] = $newOrdercount;
79
+ }
80
+
81
+ if ($allorder_enabled == 1) {
82
+ $finalArr['all_orders'] = $orderCount;
83
+ }
84
+
85
+ if ($newcustomers_enabled == 1) {
86
+ $finalArr['new_customers'] = $newCustomersCount;
87
+ }
88
+ if ($allcustomers_enabled == 1) {
89
+ $finalArr['all_customers'] = $customerCount;
90
+ }
91
+ if ($stockalert_enabled == 1) {
92
+ $finalArr['stock_alert'] = $stockAlertCount;
93
+ }
94
+ if ($todayssales_enabled == 1) {
95
+ $finalArr['today_sales'] = $salesTotal;
96
+ }
97
+ if ($online_enabled == 1) {
98
+ $finalArr['online_customers'] = $onlinestatusCount;
99
+ }
100
+ if ($abandonedcart_enabled == 1) {
101
+ $finalArr['abandoned_cart'] = $abandonedcartCount;
102
+ }
103
+
104
+ $this->_dataArray = $finalArr;
105
+ return $this->_dataArray;
106
+ }
107
+
108
+ }
app/code/community/Oscprofessionals/Magemobapp/Model/Login.php ADDED
@@ -0,0 +1,271 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @category Oscprofessionals
5
+ * @package Oscprofessionals_Magemobapp
6
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
7
+ */
8
+ class Oscprofessionals_Magemobapp_Model_Login
9
+ {
10
+
11
+ protected $_helper;
12
+ protected $_dataArray;
13
+
14
+ public function __construct()
15
+ {
16
+ $this->_helper = Mage::helper('magemobapp');
17
+ }
18
+
19
+
20
+ /**
21
+ * login process
22
+ * @param usename and password
23
+ * @return sucess login Data
24
+ */
25
+ public function login($username, $password)
26
+ {
27
+ $username = base64_decode($username);
28
+ $password = base64_decode($password);
29
+
30
+ $tmpUser = '';
31
+ for ($i = 0; $i < strlen($username); $i++) {
32
+ if ($i % 2 == 0) {
33
+ $tmpUser .= $username[$i];
34
+ }
35
+ }
36
+
37
+ $username = $tmpUser;
38
+ $tmpPass = '';
39
+ for ($i = 0; $i < strlen($password); $i++) {
40
+ if ($i % 2 == 0) {
41
+ $tmpPass .= $password[$i];
42
+ }
43
+ }
44
+
45
+ $password = $tmpPass;
46
+ $session = Mage::getSingleton('admin/session');
47
+ $Login = false;
48
+
49
+ if ($this->isAuthenticate($username, $password)) {
50
+ if (empty($username) || empty($password)) {
51
+ return;
52
+ }
53
+ /** @var $user Mage_Admin_Model_User */
54
+ $user = Mage::getModel('admin/user');
55
+ $user->login($username, $password);
56
+ if ($user->getId()) {
57
+ if (method_exists($session, 'renewSession')) {
58
+ $session->renewSession();
59
+ }
60
+ $session->setIsFirstPageAfterLogin(true);
61
+ $session->setUser($user);
62
+ $session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
63
+
64
+ $Login = true;
65
+ }
66
+ }
67
+ if ($Login) {
68
+ $this->saveLogin();
69
+ //clear cache
70
+ Mage::app()->getCacheInstance()->cleanType("config");
71
+ $loginData = $this->loginDataProcess($username);
72
+ return $loginData;
73
+ }
74
+ throw new Exception($this->_helper->__('Login failed'), 6);
75
+ }
76
+
77
+
78
+ /**
79
+ * save config for earch admin time login
80
+ */
81
+ public function saveLogin()
82
+ {
83
+ $username = Mage::getSingleton('admin/session')->getUser()->getUsername();
84
+ $datetime = Mage::app()->getLocale()->date();
85
+ $datetime->setTimezone('Etc/UTC');
86
+ $last = $this->getLastLogin();
87
+ Mage::getSingleton('admin/session')->setLastLogin($last); // save into session
88
+ $this->saveSetting($datetime->toString(Varien_Date::DATETIME_INTERNAL_FORMAT), 'login_' . $username); //login time code is username of admin
89
+ }
90
+
91
+
92
+ /**
93
+ * get login date time
94
+ * @return string
95
+ */
96
+ public function getLastLogin()
97
+ {
98
+ $code = Mage::getSingleton('admin/session')->getUser()->getUsername();
99
+ $date = Mage::app()->getLocale()->date()->subDay(1)->setMinute(0)->setSecond(0); // get time from yestoday when never logout
100
+ $last_yesterday = gmdate("Y-m-d H:i:s", $date->getTimestamp()); //datetime mysql
101
+ if (($loginconfig = $this->getSetting('login_' . $code)) != '') {
102
+ return $loginconfig;
103
+ } else {
104
+ return $last_yesterday;
105
+ }
106
+ }
107
+
108
+ /**
109
+ * get setting
110
+ * @param type $code
111
+ * @return type
112
+ */
113
+ public function getSetting($code)
114
+ {
115
+ $setting_path = $code;
116
+ return Mage::getStoreConfig($setting_path);
117
+ }
118
+
119
+ /**
120
+ * save your config value
121
+ * @param type $value is value
122
+ * @param string $code is path or code
123
+ */
124
+ public function saveSetting($value, $code = '')
125
+ {
126
+ $setting_path = '';
127
+ if ($code == '') {
128
+ $setting_path = $value;
129
+ } else {
130
+ $setting_path = $code;
131
+ }
132
+ if (is_null($value))
133
+ $value = '';
134
+ Mage::getModel('core/config')->saveConfig($setting_path, $value);
135
+ }
136
+
137
+ /**
138
+ * check is loged in
139
+ * @return boolean
140
+ */
141
+ public function isCheckLogin()
142
+ {
143
+ $session = Mage::getSingleton('admin/session');
144
+
145
+ if ($session->isLoggedIn()) {
146
+ return true;
147
+ }
148
+ return false;
149
+ }
150
+
151
+ /**
152
+ * check ACL
153
+ */
154
+ public function isCheckRole()
155
+ {
156
+ // bind call name to controller name for check acl
157
+ $session = Mage::getSingleton('admin/session');
158
+ if (!$session->isAllowed('magemobapp/api')) {
159
+ return false;
160
+ }
161
+ return true;
162
+ }
163
+
164
+
165
+ /**
166
+ * API authenticate
167
+ * @param type $username
168
+ * @param type $password
169
+ * @return boolean
170
+ * @throws Mage_Core_Exception
171
+ */
172
+ protected function isAuthenticate($username, $password)
173
+ {
174
+ $config = Mage::getStoreConfigFlag('admin/security/use_case_sensitive_login');
175
+ $result = false;
176
+ $user = Mage::getModel('admin/user')->loadByUsername($username);
177
+ try {
178
+ $sensitive = ($config) ? $username == $user->getUsername() : true;
179
+ if ($sensitive && $user->getId() && Mage::helper('core')->validateHash($password, $user->getPassword())) {
180
+
181
+ if ($user->getIsActive() != '1') {
182
+ Mage::throwException(Mage::helper('magemobapp')->__('This account is inactive.'));
183
+ }
184
+ if (!$user->hasAssigned2Role($user->getId())) {
185
+ $result = false;
186
+ } else {
187
+ $result = true;
188
+ }
189
+ }
190
+ }
191
+ catch (Mage_Core_Exception $e) {
192
+ $user->unsetData();
193
+ throw $e;
194
+ }
195
+ return $result;
196
+ }
197
+
198
+
199
+ /**
200
+ * Process Login Data from multipal class as per requirement.
201
+ * @param login username
202
+ * @return process array
203
+ */
204
+ public function loginDataProcess($username = null)
205
+ {
206
+
207
+ //get session id
208
+ $session = Mage::getSingleton('admin/session');
209
+ $sessionId = $session->getSessionId();
210
+
211
+ //store Data from storeinfo class
212
+ $subStoreData = Mage::getModel('magemobapp/storeinfo')->getWebsite();
213
+
214
+ $defaultStoreName = $_SERVER['HTTP_HOST'];
215
+
216
+ $subStore = array();
217
+
218
+ foreach ($subStoreData as $subStoreEach) {
219
+ $subStore[] = ($subStoreEach['name'] . '=' . $subStoreEach['default_store_id']);
220
+ }
221
+
222
+ $defaultStore = explode('=', $subStore[0]);
223
+
224
+ $subStoreArray = implode("||", $subStore);
225
+
226
+ $params['store'] = Mage::getModel('magemobapp/storeinfo')->getStoreId();
227
+ $store_id = '';
228
+ if (isset($params['store']) && $params['store'] != '') {
229
+ $store_id = $params['store'];
230
+ }
231
+
232
+ $path = Mage::getStoreConfig('design/header/logo_src', $store_id);
233
+ //get skin path
234
+ $skinBase = Mage::getDesign()->getSkinBaseDir() . DS . $path;
235
+
236
+ $path = Mage::getDesign()->getSkinUrl($path);
237
+
238
+ if (!file_exists($skinBase)) {
239
+ $storeLogo = '';
240
+
241
+ } else {
242
+ $data = file_get_contents($path);
243
+ $datapath = explode('.', $path);
244
+ $modifypath = end($datapath);
245
+ $extension = strtolower($modifypath);
246
+ $storeLogo = base64_encode($data);
247
+ $storeLogo = 'data:image/' . $extension . ';base64,' . $storeLogo;
248
+ }
249
+
250
+ $reportingDays = Mage::getStoreConfig('magemobapp/settings/reporting_days');
251
+ $notification_enabled = Mage::getStoreConfig('magemobapp/settings/notification_enabled');
252
+ $update_frequency = Mage::getStoreConfig('magemobapp/settings/update_frequency');
253
+ $last_update_time = date('Y-m-d H:i:s');
254
+
255
+ $this->_dataArray = array(
256
+ 'session_id' => $sessionId,
257
+ 'store_info' => array(
258
+ 'store_user_name' => $username,
259
+ 'store_label' => 'Demo Store',
260
+ 'sub_stores' => $subStoreArray,
261
+ 'default_store' => $defaultStore[1],
262
+ 'store_logo' => $storeLogo,
263
+ 'reporting_days' => $reportingDays,
264
+ 'notification' => $notification_enabled,
265
+ 'update_frequency' => $update_frequency,
266
+ 'last_update_time' => $last_update_time
267
+ )
268
+ );
269
+ return $this->_dataArray;
270
+ }
271
+ }
app/code/community/Oscprofessionals/Magemobapp/Model/Logoff.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @category Oscprofessionals
5
+ * @package Oscprofessionals_Magemobapp
6
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
7
+ */
8
+ class Oscprofessionals_Magemobapp_Model_Logoff
9
+ {
10
+
11
+ public function __construct()
12
+ {
13
+ $this->_helper = Mage::helper('magemobapp');
14
+ }
15
+
16
+ /**
17
+ * logoff process
18
+ */
19
+ public function logoff()
20
+ {
21
+ //set time before logout
22
+ if(Mage::getSingleton('admin/session', array('name' => 'adminhtml'))->isLoggedIn()){
23
+ $this->saveLogout();
24
+ }
25
+ //clear all datas
26
+ Mage::getSingleton('admin/session', array('name' => 'adminhtml'))
27
+ ->getCookie()->delete(
28
+ Mage::getSingleton('admin/session', array('name' => 'adminhtml'))
29
+ ->getSessionName());
30
+ Mage::getSingleton('admin/session', array('name' => 'adminhtml'))->unsetAll();
31
+ Mage::getSingleton('adminhtml/session')->unsetAll();
32
+
33
+ }
34
+
35
+ /**
36
+ * save config for earch admin time logged out
37
+ */
38
+ public function saveLogout(){
39
+ $username = Mage::getSingleton('admin/session')->getUser()->getUsername();
40
+ $date = Mage::getModel('core/date')->gmtDate(); //get GMT date time
41
+ $this->saveSetting($date, 'logout_'.$username); //logout time code is username of admin
42
+ }
43
+ /**
44
+ * save your config value
45
+ * @param type $value is value
46
+ * @param string $code is path or code
47
+ */
48
+ public function saveSetting($value, $code = ''){
49
+ $setting_path = '';
50
+ if($code == ''){
51
+ $setting_path = $value;
52
+ }else{
53
+ $setting_path = $code;
54
+ }
55
+ if(is_null($value)) $value = '';
56
+ Mage::getModel('core/config')->saveConfig($setting_path, $value);
57
+ }
58
+
59
+ }
app/code/community/Oscprofessionals/Magemobapp/Model/Notification.php ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @category Oscprofessionals
5
+ * @package Oscprofessionals_Magemobapp
6
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
7
+ */
8
+ class Oscprofessionals_Magemobapp_Model_Notification extends Mage_Core_Model_Abstract
9
+ {
10
+ protected $_dataArray;
11
+
12
+ //Data reporting days limit from admin setting
13
+ const REPORTING_DAYS = 'magemobapp/settings/reporting_days';
14
+
15
+ /**
16
+ * @return json array
17
+ * @return Notification info.
18
+ */
19
+ public function oscIndex($params)
20
+ {
21
+ return $this->getNotification($params);
22
+ }
23
+
24
+ /**
25
+ * Get Notification info
26
+ * @return Notification (array)
27
+ */
28
+ function getNotification($params)
29
+ {
30
+ $finalNotificationArr = array();
31
+ $orderNotification = '';
32
+ $healthNotification = '';
33
+ $orderNotification = $this->orderNotification($params);
34
+
35
+ $healthNotification = $this->healthNotification();
36
+ $websiteNotification = $this->websiteNotification();
37
+
38
+ $finalNotificationArr['notification'] = array();
39
+
40
+ if ($orderNotification != '') {
41
+ $order = Mage::getModel('magemobapp/orders');
42
+ $newOrdercount = $order->orderCount('today');
43
+ $finalNotificationArr['notification']['order'] = array(
44
+ 'badge' => '1',
45
+ 'label' => 'New Order received',
46
+ 'totalTodaysOrder' => $newOrdercount,
47
+ 'description' => $orderNotification
48
+ );
49
+ }
50
+
51
+ if (sizeof($healthNotification) > 0) {
52
+ $finalNotificationArr['notification']['sitehealth'] = array(
53
+ 'badge' => '2',
54
+ 'label' => 'Site Health Monitor',
55
+ 'description' => $healthNotification
56
+ );
57
+ }
58
+
59
+ if (sizeof($websiteNotification) > 0) {
60
+ $finalNotificationArr['notification']['webpage'] = array(
61
+ 'badge' => '3',
62
+ 'label' => 'Web Page Monitor',
63
+ 'description' => $websiteNotification
64
+ );
65
+ }
66
+
67
+ $finalNotificationArr['last_update_time'] = date('Y-m-d H:i:s');
68
+
69
+ $this->_dataArray = $finalNotificationArr;
70
+ return $this->_dataArray;
71
+ }
72
+ function orderNotification($params)
73
+ {
74
+ $ordernotify = Mage::getModel('magemobapp/orders')->getOrderNotificationList($params);
75
+ if ($ordernotify) {
76
+ $ordernotify = 'You have received ' . $ordernotify . ' new order.';
77
+ return $ordernotify;
78
+ }
79
+
80
+ }
81
+ function websiteNotification()
82
+ {
83
+ $notification_enabled = Mage::getStoreConfig('magemobapp/settings/notification_enabled');
84
+ if ($notification_enabled == 1) {
85
+
86
+ $website_enabled = Mage::getStoreConfig('magemobapp/sitehealth/website_enabled');
87
+
88
+ if ($website_enabled == 1) {
89
+ $websiteNotification = Mage::getModel('magemobapp/storeinfo')->getWebsiteNotification();
90
+
91
+ if ($websiteNotification != '') {
92
+ $websiteNotification = substr($websiteNotification, 0, (sizeOF($websiteNotification) - 3));
93
+ $websiteNotification = explode('::', $websiteNotification);
94
+ return $websiteNotification;
95
+ }
96
+ }
97
+ }
98
+ else {
99
+ return array();
100
+ }
101
+ }
102
+ function healthNotification()
103
+ {
104
+ $notification_enabled = Mage::getStoreConfig('magemobapp/settings/notification_enabled');
105
+ $server_enabled = Mage::getStoreConfig('magemobapp/sitehealth/server_enabled');
106
+ $logtable_enabled = Mage::getStoreConfig('magemobapp/sitehealth/logtable_enabled');
107
+ $index_enabled = Mage::getStoreConfig('magemobapp/sitehealth/index_enabled');
108
+ $cpustatus = '';
109
+ $logNote = '';
110
+ $indexNote = '';
111
+
112
+ if ($notification_enabled == 1) {
113
+ if ($server_enabled == 1) {
114
+ $cpustatus = Mage::getModel('magemobapp/storeinfo')->getCPUMemoryUsageNotification();
115
+ }
116
+ if ($logtable_enabled == 1) {
117
+ $logNote = Mage::getModel('magemobapp/stock')->getLogTableNotification();
118
+ }
119
+ if ($index_enabled == 1) {
120
+ $indexNote = Mage::getModel('magemobapp/storeinfo')->getIndexingStatusNotification();
121
+ }
122
+ $notification = $logNote . $indexNote . $cpustatus;
123
+ $notification = substr($notification, 0, (sizeOF($notification) - 3));
124
+ $healthNotification = explode('::', $notification);
125
+
126
+ }
127
+ return $healthNotification;
128
+ }
129
+ }
app/code/community/Oscprofessionals/Magemobapp/Model/Orders.php ADDED
@@ -0,0 +1,304 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @category Oscprofessionals
5
+ * @package Oscprofessionals_Magemobapp
6
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
7
+ */
8
+ class Oscprofessionals_Magemobapp_Model_Orders extends Mage_Core_Model_Abstract
9
+ {
10
+ protected $_dataArray;
11
+
12
+ /**
13
+ * @return json array
14
+ * @return orders info (array)
15
+ */
16
+ public function oscIndex($params)
17
+ {
18
+
19
+ return $this->getOrderInfo($params['order_id']);
20
+ }
21
+
22
+ /**
23
+ * Get store Order Count
24
+ * @return (string) count
25
+ */
26
+ public function orderCount($days)
27
+ {
28
+
29
+ switch ($days) {
30
+
31
+ case "today":
32
+ //get Todays Date
33
+ $fromDate = Mage::helper('magemobapp')->getTodaysDate();
34
+ break;
35
+ case "lastWeek":
36
+ //get 1 week Back date
37
+ $fromDate = Mage::helper('magemobapp')->getLastWeekDate();
38
+ break;
39
+ case "lastMonth":
40
+ //get 1 month Back date
41
+ $fromDate = Mage::helper('magemobapp')->getMonthBackDate();
42
+ break;
43
+ default:
44
+ //get reporting date
45
+ $fromDate = Mage::helper('magemobapp')->getReportingDate();
46
+
47
+ }
48
+
49
+ $storeInfo = Mage::getModel('magemobapp/storeinfo');
50
+ // store id
51
+ $storeId = $storeInfo->getStoreId();
52
+ // store id array
53
+ $storeIds = $storeInfo->getStoreIds($storeId);
54
+
55
+ $orderCollection = Mage::getModel('sales/order')->getCollection();
56
+
57
+ if (isset($storeId) && $storeId != '') {
58
+ $orderCollection->addAttributeToFilter('store_id', array(
59
+ 'in' => $storeIds,
60
+ ));
61
+
62
+ }
63
+
64
+ $orderCollection->addAttributeToFilter('created_at', array(
65
+ 'from' => $fromDate
66
+ ));
67
+ $orderCount = $orderCollection->count(); //orders count
68
+
69
+ return $orderCount;
70
+ }
71
+
72
+
73
+ /**
74
+ * Get store Total sales with currency.
75
+ * @return (string) sales
76
+ */
77
+ public function todaysSalesTotal()
78
+ {
79
+
80
+ //get todays Date
81
+ $fromDate = Mage::helper('magemobapp')->getTodaysDate();
82
+
83
+ $storeId = Mage::getModel('magemobapp/storeinfo')->getStoreId();
84
+
85
+ $collection = Mage::getResourceModel('sales/order_collection')->addAttributeToFilter('created_at', array(
86
+ 'from' => $fromDate
87
+ ));
88
+
89
+ if ($storeId != 0) {
90
+ $collection->addAttributeToFilter('store_id', $storeId); //fill store
91
+ }
92
+ //$collection;
93
+
94
+ $collection->addAttributeToSelect('base_grand_total')->addAttributeToSelect('base_total_refunded')->addAttributeToSelect('base_total_paid');
95
+
96
+
97
+ $data = $collection->getData();
98
+ $total = 0;
99
+ foreach ($data as $eachData) {
100
+ if (isset($eachData['status']) && $eachData['status'] == 'complete') {
101
+ if ($eachData['base_total_refunded'] == '') {
102
+ $total += (float) $eachData['base_total_paid'];
103
+ } else {
104
+ $total += (float) $eachData['base_total_paid'] - (float) $eachData['base_total_refunded'];
105
+ }
106
+ } else {
107
+ $total += (float) $eachData['base_grand_total'];
108
+ }
109
+ }
110
+ return Mage::helper('core')->currency($total, true, false);
111
+ }
112
+
113
+
114
+ /**
115
+ * Get order list
116
+ * @return order list (array)
117
+ */
118
+ public function getOrderList()
119
+ {
120
+
121
+ // store id
122
+ $storeId = Mage::getModel('magemobapp/storeinfo')->getStoreId();
123
+
124
+ //get reporting date
125
+ $fromDate = Mage::helper('magemobapp')->getReportingDate();
126
+
127
+
128
+ $orderCollection = Mage::getModel('sales/order')->getCollection()->addAttributeToFilter('created_at', array(
129
+ 'from' => $fromDate
130
+ ))->addAttributeToSort('created_at', 'desc');
131
+
132
+
133
+ if ($storeId != 0) {
134
+ $orderCollection->addAttributeToFilter('store_id', $storeId);
135
+ }
136
+
137
+ foreach ($orderCollection as $_order) {
138
+ $orderTime = explode(" ", $_order->getCreatedAt());
139
+ $this->_dataArray[] = array(
140
+ 'order_id' => $_order->getId(),
141
+ 'increment_id' => $_order->getIncrementId(),
142
+ 'order_status' => $_order->getStatus(),
143
+ 'order_date' => $_order->getCreatedAt(),
144
+ 'order_time' => $orderTime[1],
145
+ 'customer_name' => $_order->getCustomerName(),
146
+ 'order_total' => Mage::helper('core')->currency($_order->getGrandTotal(), true, false), //order total with currency
147
+ 'order_total_value' => number_format($_order->getGrandTotal(), 2)
148
+ );
149
+ }
150
+ //Mage::log($this->_dataArray,null,'orderarray.log');
151
+ return array(
152
+ 'last_update_time' => date('Y-m-d H:i:s'),
153
+ 'orders' => $this->_dataArray
154
+ );
155
+ }
156
+ public function getOrderNotificationList($params)
157
+ {
158
+
159
+ $fromDate = $params['last_update_time'];
160
+ $storeId = $params['store'];
161
+
162
+ $orderCollection = Mage::getModel('sales/order')->getCollection();
163
+
164
+ if (isset($storeId) && $storeId != 0) {
165
+ $orderCollection->addAttributeToFilter('store_id', $storeId);
166
+ }
167
+ $orderCollection->addAttributeToFilter('created_at', array(
168
+ 'gt' => $fromDate
169
+ ));
170
+
171
+
172
+ $notification = '';
173
+ $notification = $orderCollection->count();
174
+
175
+ if ($notification > 0) {
176
+ return $notification;
177
+ }
178
+ }
179
+
180
+ /**
181
+ * Get order info
182
+ * @return order info (array)
183
+ */
184
+ public function getOrderInfo($orderId = null)
185
+ {
186
+
187
+ $orderCollection = Mage::getModel('sales/order')->load($orderId);
188
+ $_totalObject = Mage::getBlockSingleton('magemobapp/order_totals');
189
+ $_totalObject->setOrder($orderCollection);
190
+ $_totalObject->initTotals();
191
+ $totals = $_totalObject->getTotals();
192
+
193
+ //total info in array data
194
+ foreach ($totals as $_total) {
195
+
196
+ $totalArray[] = $_total->getCode() . "=" . Mage::helper('core')->currency($_total->getValue(), true, false);
197
+ //with currency
198
+ }
199
+
200
+ //arrange total Data
201
+ $totalData = implode("||", $totalArray);
202
+ $ordered_items = $orderCollection->getAllItems();
203
+
204
+ $orderedItems = array();
205
+ foreach ($ordered_items as $item) {
206
+
207
+ if ($item['parent_item_id'] == NULL) {
208
+
209
+ $orderedItems[] = array(
210
+ 'product_id' => $item->getItemId(),
211
+ 'product_name' => $item->getName(),
212
+ 'product_price' => Mage::helper('core')->currency($item->getPrice(), true, false),
213
+ 'product_qty' => number_format($item->getQtyOrdered())
214
+ );
215
+ }
216
+ }
217
+
218
+ // collect billing address
219
+ $billingAddress = '';
220
+ if (is_object($orderCollection->getBillingAddress())) {
221
+ $countryId = $orderCollection->getBillingAddress()->getCountryId();
222
+ $billingAddress = $orderCollection->getBillingAddress()->getData('street') . ",";
223
+ $billingAddress .= $orderCollection->getBillingAddress()->getCity() . ",";
224
+ $billingAddress .= $orderCollection->getBillingAddress()->getRegion() . ",";
225
+ $billingAddress .= $orderCollection->getBillingAddress()->getPostcode() . ",";
226
+ $billingAddress .= Mage::app()->getLocale()->getCountryTranslation($countryId);
227
+ }
228
+
229
+ // collect shipping address
230
+ $shippingAddress = '';
231
+ if (is_object($orderCollection->getShippingAddress())) {
232
+ $countryId = $orderCollection->getShippingAddress()->getCountryId();
233
+ $shippingAddress = $orderCollection->getShippingAddress()->getData('street') . ",";
234
+ $shippingAddress .= $orderCollection->getShippingAddress()->getCity() . ",";
235
+ $shippingAddress .= $orderCollection->getShippingAddress()->getRegion() . ",";
236
+ $shippingAddress .= $orderCollection->getShippingAddress()->getPostcode() . ",";
237
+ $shippingAddress .= Mage::app()->getLocale()->getCountryTranslation($countryId);
238
+ }
239
+
240
+
241
+ $orderTime = explode(" ", $orderCollection->getCreatedAt());
242
+ $this->_dataArray = array(
243
+ 'order_id' => $orderCollection->getId(),
244
+ 'increment_id' => $orderCollection->getIncrementId(),
245
+ 'order_status' => $orderCollection->getStatus(),
246
+ 'order_date' => $orderCollection->getCreatedAt(),
247
+ 'order_time' => $orderTime[1],
248
+ 'customer_name' => $orderCollection->getCustomerName(),
249
+ 'customer_phone_no' => $orderCollection->getBillingAddress()->getTelephone(),
250
+ 'billing_address' => $billingAddress,
251
+ 'shipping_address' => $shippingAddress,
252
+ 'order_total' => $totalData,
253
+ 'order_product' => $orderedItems
254
+ );
255
+
256
+ //return ordered info data
257
+ return $this->_dataArray;
258
+ }
259
+
260
+ /**
261
+ * Get Order List
262
+ * @return order List with date filter info (array)
263
+ */
264
+ public function getTodaysOrderList()
265
+ {
266
+ $dir = '';
267
+ $storeId = Mage::getModel('magemobapp/storeinfo')->getStoreId();
268
+ //get Todays Date from helper
269
+ $fromDate = Mage::helper('magemobapp')->getTodaysDate();
270
+
271
+ $orderCollection = Mage::getModel('sales/order')->getCollection();
272
+
273
+ $orderCollection->addAttributeToFilter('created_at', array(
274
+ 'from' => $fromDate
275
+ ));
276
+ $reverseDir = ($dir == 'DESC') ? 'ASC' : 'DESC';
277
+ $orderCollection->getSelect()->order('increment_id ' . $reverseDir);
278
+ if (isset($storeId) && $storeId != 0) {
279
+ $orderCollection->addAttributeToFilter('store_id', $storeId);
280
+ } /*else {
281
+ $orderCollection = Mage::getModel('sales/order')->getCollection();
282
+ }*/
283
+
284
+ foreach ($orderCollection as $_order) {
285
+ $orderTime = explode(" ", $_order->getCreatedAt());
286
+ $this->_dataArray[] = array(
287
+ 'order_id' => $_order->getId(),
288
+ 'increment_id' => $_order->getIncrementId(),
289
+ 'order_status' => $_order->getStatus(),
290
+ 'order_date' => $_order->getCreatedAt(),
291
+ 'order_time' => $orderTime[1],
292
+ 'customer_name' => $_order->getCustomerName(),
293
+ 'order_total' => Mage::helper('core')->currency($_order->getGrandTotal(), true, false), //order total with currency
294
+ 'order_total_value' => $_order->getGrandTotal()
295
+ );
296
+ }
297
+
298
+ return array(
299
+ 'last_update_time' => date('Y-m-d H:i:s'),
300
+ 'orders' => $this->_dataArray
301
+ );
302
+ }
303
+
304
+ }
app/code/community/Oscprofessionals/Magemobapp/Model/Osc.php ADDED
@@ -0,0 +1,191 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @category Oscprofessionals
5
+ * @package Oscprofessionals_Magemobapp
6
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
7
+ */
8
+
9
+ //osc block class for call model class file according to action.
10
+ class Oscprofessionals_Magemobapp_Model_Osc extends Mage_Core_Model_Abstract
11
+ {
12
+
13
+ /**
14
+ * @var Oscprofessionals_Magemobapp_Helper_Data
15
+ */
16
+ protected $_helper;
17
+
18
+ public function __construct()
19
+ {
20
+ $this->_helper = Mage::helper('magemobapp');
21
+ }
22
+
23
+ /**
24
+ * Run processRequest from controller
25
+ * @param array $data
26
+ * @return mixed
27
+ */
28
+ public function processRequest($data)
29
+ {
30
+
31
+ if (isset($data['action'])) {
32
+ try {
33
+ $result['message'] = '';
34
+ $result['error'] = 0;
35
+ $result['data'] = $this->processRequestRun($data);
36
+ }
37
+ catch (Exception $e) {
38
+ $result['error'] = 1;
39
+ $result['message'] = $e->getMessage();
40
+ }
41
+ }
42
+
43
+ return $result;
44
+
45
+ }
46
+
47
+ /**
48
+ * Run processRequestRun
49
+ * @param array $data
50
+ * @return mixed
51
+ */
52
+ public function processRequestRun($data)
53
+ {
54
+ if (empty($data['action'])) {
55
+ throw new Exception($this->_helper->__('No method is specified'));
56
+ }
57
+
58
+ // Check param input
59
+ if (!empty($data['params'])) {
60
+ $params = $data['params'];
61
+ }
62
+
63
+ $actionName = $data['action'];
64
+
65
+ if ($actionName == 'login') {
66
+
67
+ if (empty($params['username']) || empty($params['password'])) {
68
+
69
+ throw new Exception($this->_helper->__('Miss username or password to login'));
70
+
71
+ } else {
72
+
73
+ try {
74
+ return Mage::getModel('magemobapp/login')->login($params['username'], $params['password']);
75
+ }
76
+ catch (Exception $e) {
77
+ throw new Exception($this->_helper->__('Failed to login'));
78
+ }
79
+ }
80
+ }else if($actionName == 'logoff'){
81
+
82
+ try {
83
+ return Mage::getModel('magemobapp/logoff')->logoff();
84
+ }
85
+ catch (Exception $e) {
86
+ throw new Exception($this->_helper->__('Failed to logoff'));
87
+ }
88
+
89
+ }
90
+
91
+
92
+ if (Mage::getModel('magemobapp/login')->isCheckLogin()) {
93
+
94
+ if (!Mage::getModel('magemobapp/login')->isCheckRole()) { // if not role
95
+
96
+ throw new Exception($this->_helper->__('Access Denied.'));
97
+ }
98
+
99
+
100
+ if (empty($actionName)) {
101
+ throw new Exception($this->_helper->__('Invalid method.'));
102
+ }
103
+
104
+ // swich action for find class file and method
105
+ switch ($actionName) {
106
+
107
+ case "dashboard":
108
+ //call dashboard class
109
+ $className = 'dashboard';
110
+ $methodName = 'oscIndex';
111
+ break;
112
+
113
+ case "sitehealth":
114
+ //call sitehealth class
115
+ $className = 'sitehealth';
116
+ $methodName = 'oscIndex';
117
+ break;
118
+ case "notification":
119
+ //call notification class
120
+ $className = 'notification';
121
+ $methodName = 'oscIndex';
122
+ break;
123
+
124
+ case "orderslist":
125
+ //call order class
126
+ $className = 'orders';
127
+ $methodName = 'getOrderList';
128
+ break;
129
+
130
+ case "orderinfo":
131
+ $className = 'orders';
132
+ $methodName = 'oscIndex';
133
+ break;
134
+
135
+ case "todaysorderlist":
136
+ //call order class
137
+ $className = 'orders';
138
+ $methodName = 'getTodaysOrderList';
139
+ break;
140
+
141
+ case "customerslist":
142
+ //call customers class
143
+ $className = 'customers';
144
+ $methodName = 'getCustomerList';
145
+ break;
146
+
147
+ case "customerinfo":
148
+ //call customers class
149
+ $className = 'customers';
150
+ $methodName = 'oscIndex';
151
+ break;
152
+
153
+ case "stockalert":
154
+ //call stock class
155
+ $className = 'stock';
156
+ $methodName = 'oscIndex';
157
+ break;
158
+
159
+
160
+ case "abandonedlist":
161
+ //call customers class
162
+ $className = 'customers';
163
+ $methodName = 'getAbandonedCustomersList';
164
+ break;
165
+
166
+ }
167
+
168
+
169
+ $model = Mage::getModel('magemobapp/' . $className);
170
+
171
+ if (!$model) {
172
+ throw new Exception($this->_helper->__('Method not exists.'));
173
+ }
174
+
175
+ if (is_callable(array(
176
+ &$model,
177
+ $methodName
178
+ ))) {
179
+ return call_user_func_array(array(
180
+ &$model,
181
+ $methodName
182
+ ), array(
183
+ $params
184
+ )); //($param1 = array())
185
+ }
186
+ throw new Exception($this->_helper->__('Resource cannot callable.'));
187
+ }
188
+ throw new Exception($this->_helper->__('Not login.'));
189
+ }
190
+
191
+ }
app/code/community/Oscprofessionals/Magemobapp/Model/Sitehealth.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @category Oscprofessionals
5
+ * @package Oscprofessionals_Magemobapp
6
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
7
+ */
8
+ class Oscprofessionals_Magemobapp_Model_Sitehealth extends Mage_Core_Model_Abstract
9
+ {
10
+ protected $_dataArray;
11
+ public $days;
12
+
13
+ //Data reporting days limit from admin setting
14
+ const REPORTING_DAYS = 'magemobapp/settings/reporting_days';
15
+
16
+ /**
17
+ * @return json array
18
+ * @return sitehealth info.
19
+ */
20
+ public function oscIndex()
21
+ {
22
+ try{
23
+ return $this->getSitehealthInfo();
24
+ }catch(Exception $e){
25
+ Mage::log($e->getMessage() , null, 'oscMageAdim.log');
26
+
27
+ }
28
+ }
29
+
30
+ function getSitehealthInfo()
31
+ {
32
+ $reportingDays = Mage::getStoreConfig(self::REPORTING_DAYS);
33
+
34
+ $finalArr = array();
35
+ $website_enabled = Mage::getStoreConfig('magemobapp/sitehealth/website_enabled');
36
+ $server_enabled = Mage::getStoreConfig('magemobapp/sitehealth/server_enabled');
37
+ $index_enabled = Mage::getStoreConfig('magemobapp/sitehealth/index_enabled');
38
+ $cronschedule_enabled = Mage::getStoreConfig('magemobapp/sitehealth/cronschedule_enabled');
39
+ $logtable_enabled = Mage::getStoreConfig('magemobapp/sitehealth/logtable_enabled');
40
+
41
+ if ($website_enabled == 1) {
42
+ $website_status = Mage::getModel('magemobapp/storeinfo')->getWebsiteRunningStatus();
43
+ $finalArr['website_status'] = $website_status;
44
+ }
45
+
46
+ if ($server_enabled == 1) { //Get CPU usage and Memory Usage
47
+ $server_load = Mage::getModel('magemobapp/storeinfo')->getCPUMemoryUsage();
48
+ $finalArr['server_load'] = $server_load;
49
+ }
50
+
51
+ if ($index_enabled == 1) { //get indexing status notification
52
+ $indexing_status = Mage::getModel('magemobapp/storeinfo')->getIndexingStatus();
53
+ $finalArr['indexing_status'] = $indexing_status;
54
+ }
55
+
56
+ if ($cronschedule_enabled == 1) { //get cron_schedule status notification
57
+ $cron_schedule = Mage::getModel('magemobapp/storeinfo')->getCronScheduleInfo();
58
+ $finalArr['cron_schedule'] = $cron_schedule;
59
+ }
60
+
61
+ if ($logtable_enabled == 1) { //get log table size increase notification
62
+ $log_info = Mage::getModel('magemobapp/stock')->getLogTableSizeAlert();
63
+ $finalArr['log_info'] = $log_info;
64
+ }
65
+ $this->_dataArray = $finalArr;
66
+ return $this->_dataArray;
67
+ }
68
+ }
app/code/community/Oscprofessionals/Magemobapp/Model/Stock.php ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @category Oscprofessionals
5
+ * @package Oscprofessionals_Magemobapp
6
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
7
+ */
8
+
9
+ // collect all stock related Data
10
+ class Oscprofessionals_Magemobapp_Model_Stock extends Mage_Core_Model_Abstract
11
+ {
12
+ protected $_productArray;
13
+ protected $_stockAlertCount;
14
+
15
+ //stock alert qty from admin setting
16
+ const STOCK_ALERT = 'magemobapp/settings/stock_critical_level';
17
+ const TABLE_SIZE = 'magemobapp/settings/log_table_size';
18
+
19
+ /**
20
+ * @return json array
21
+ * @return inventory info (string)
22
+ */
23
+ public function oscIndex($params)
24
+ {
25
+ return $this->getProductsStockAlert($params);
26
+
27
+ }
28
+
29
+ /**
30
+ * Get stock alert collection
31
+ * @Product array
32
+ */
33
+ public function getProductsStockAlert($params)
34
+ {
35
+ $storeId = $params['store'];
36
+ $orderby = $params['orderby'];
37
+ $sortby = $params['sortby'];
38
+
39
+ $dir = '';
40
+ $stockAlertQty = Mage::getStoreConfig(self::STOCK_ALERT);
41
+
42
+ $collection = Mage::getModel('catalog/product')->getCollection()->setStoreId($storeId)->addStoreFilter($storeId)->addAttributeToSelect('*'); // select all attributes
43
+
44
+
45
+ if (is_array($storeId) && !empty($storeId)) {
46
+ $collection->addFieldToFilter('store_id', array(
47
+ 'in' => $storeId
48
+ ));
49
+ }
50
+
51
+ if ($params['sortby'] == 'asc') {
52
+ if ($params['orderby'] == 'name') {
53
+ $collection->addAttributeToSort('name', 'ASC');
54
+ } else {
55
+ $collection->getSelect()->joinLeft(array(
56
+ '_inventory_table' => 'cataloginventory_stock_item'
57
+ ), "_inventory_table.product_id = e.entity_id ", array(
58
+ 'qty'
59
+ ))->order(array(
60
+ '_inventory_table.qty ASC'
61
+ ));
62
+ $reverseDir = ($dir == 'DESC') ? 'ASC' : 'DESC';
63
+ $collection->getSelect()->order('qty ' . $reverseDir);
64
+ }
65
+ } else {
66
+ if ($params['orderby'] == 'name') {
67
+ $collection->addAttributeToSort('name', 'DESC');
68
+ } else {
69
+ $collection->getSelect()->joinLeft(array(
70
+ '_inventory_table' => 'cataloginventory_stock_item'
71
+ ), "_inventory_table.product_id = e.entity_id ", array(
72
+ 'qty'
73
+ ))->order(array(
74
+ '_inventory_table.qty DESC'
75
+ ));
76
+ $reverseDir = ($dir == 'ASC') ? 'DESC' : 'ASC';
77
+ $collection->getSelect()->order('qty ' . $reverseDir);
78
+ }
79
+ }
80
+ $this->_stockAlertCount = 0;
81
+ foreach ($collection as $product) {
82
+ $stocklevel = (int) Mage::getModel('cataloginventory/stock_item')->loadByProduct($product)->getQty();
83
+
84
+ if ($stocklevel <= $stockAlertQty && $stocklevel >= 0) {
85
+ $this->_productArray[] = array(
86
+ 'product_id' => $product->getId(),
87
+ 'product_name' => $product->getName(),
88
+ 'product_qty' => $stocklevel
89
+ );
90
+ $this->_stockAlertCount++;
91
+ }
92
+ }
93
+
94
+ return $this->_productArray;
95
+
96
+ }
97
+ /*BOF by developer 127*/
98
+ /*
99
+ ** Get log table size alert
100
+ *
101
+ */
102
+ public function getLogTableSizeAlert()
103
+ {
104
+ $logTableSize = Mage::getStoreConfig('magemobapp/sitehealth/log_table_size');
105
+
106
+ $connection = Mage::getSingleton('core/resource')->getConnection('core_write');
107
+
108
+ $tables = array(
109
+ 'log_customer',
110
+ 'log_quote',
111
+ 'log_summary',
112
+ 'log_summary_type',
113
+ 'log_url',
114
+ 'log_url_info',
115
+ 'log_visitor',
116
+ 'log_visitor_info',
117
+ 'log_visitor_online'
118
+ );
119
+
120
+
121
+ $log_table_result = array();
122
+ $j = 0;
123
+ foreach ($tables as $table) {
124
+
125
+ if ($connection->isTableExists($table)) {
126
+ $select = $connection->select()->from($table);
127
+ $abc = $connection->fetchAll($select);
128
+ $size = count($abc);
129
+
130
+ }
131
+
132
+ if ($size >= $logTableSize) {
133
+ $msg = 'High';
134
+ } else {
135
+ $msg = 'Normal';
136
+ }
137
+
138
+ $log_table_result[$j]['tablename'] = $table;
139
+ $log_table_result[$j]['count'] = $size;
140
+ $log_table_result[$j]['status'] = $msg;
141
+ $j++;
142
+ }
143
+
144
+ return $log_table_result;
145
+
146
+ }
147
+ /*
148
+ ** Get log table size Notification
149
+ *
150
+ */
151
+ public function getLogTableNotification()
152
+ {
153
+ $notify = $this->getLogTableSizeAlert();
154
+
155
+ $notification = '';
156
+
157
+ $total = 0;
158
+ foreach ($notify as $statuskey => $statusval) {
159
+ $stval = $statusval['status'];
160
+
161
+ if ($stval == 'High') {
162
+ $total++;
163
+ }
164
+
165
+ }
166
+ if ($total) {
167
+ $notification = 'Currently ' . $total . ' log tables are on critical level.::';
168
+ }
169
+
170
+ return $notification;
171
+ }
172
+ /**
173
+ * Get count stock alert
174
+ * @return stock count
175
+ */
176
+ public function getCountStockAlert()
177
+ {
178
+ $params['store'] = Mage::getModel('magemobapp/storeinfo')->getStoreId();
179
+ $this->getProductsStockAlert($params['store']);
180
+ return $this->_stockAlertCount;
181
+ }
182
+ }
app/code/community/Oscprofessionals/Magemobapp/Model/Storeinfo.php ADDED
@@ -0,0 +1,405 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @category Oscprofessionals
5
+ * @package Oscprofessionals_Magemobapp
6
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
7
+ */
8
+
9
+ class Oscprofessionals_Magemobapp_Model_Storeinfo extends Mage_Core_Model_Abstract
10
+ {
11
+ protected $_storeList = '';
12
+ protected $_storeId = '';
13
+ protected $_storeIds = '';
14
+ /**
15
+ * @return json array
16
+ * @return inventory info (array)
17
+ */
18
+ public function oscIndex($params)
19
+ {
20
+ return $this->getSubStore();
21
+ }
22
+
23
+ /**
24
+ * Get sub store collection
25
+ * @return array
26
+ */
27
+ public function getSubStore()
28
+ {
29
+ $stores = Mage::app()->getStores(true);
30
+
31
+ foreach ($stores as $store) {
32
+ $name = $store->getName();
33
+ $id = (int) $store->getId();
34
+ $this->_storeList[] = array(
35
+ 'store_id' => $id,
36
+ 'store_name' => $name
37
+ );
38
+ }
39
+
40
+ return $this->_storeList;
41
+
42
+ }
43
+
44
+ /**
45
+ * Get store Id
46
+ * @return Store ID
47
+ */
48
+
49
+ public function getStoreId()
50
+ {
51
+ $params = Mage::app()->getRequest()->getPost('params');
52
+ if (isset($params['store']) && $params['store'] != '') {
53
+ $this->_storeId = $params['store']; //$storeId = $_POST;
54
+ return $this->_storeId;
55
+ }
56
+ }
57
+
58
+ /**
59
+ * Get website Id
60
+ * @return Website ID
61
+ */
62
+ public function getWebsite()
63
+ {
64
+ $visitors = Mage::getModel("core/store_group")->getCollection();
65
+ $result = array();
66
+ foreach ($visitors as $val) {
67
+ $result[] = $val->toArray();
68
+ }
69
+ return $result;
70
+ }
71
+
72
+ /**
73
+ * Get website Id
74
+ * @return Website ID
75
+ */
76
+ public function getStoreIds($storeId = null)
77
+ {
78
+ $websiteId = Mage::getModel('core/store')->load($storeId)->getWebsiteId();
79
+ $website = Mage::getModel('core/website')->load($websiteId);
80
+ $this->_storeIds = $website->getStoreIds();
81
+ return $this->_storeIds;
82
+ }
83
+ /**
84
+ * Get indexing status
85
+ * @return indexing status (array)
86
+ */
87
+ public function getIndexingStatus()
88
+ {
89
+ $resArr = array();
90
+ $collection = Mage::getResourceModel('index/process_collection');
91
+ foreach ($collection as $key => $item) {
92
+ if (!$item->getIndexer()->isVisible()) {
93
+ $collection->removeItemByKey($key);
94
+ continue;
95
+ }
96
+ $item->setName($item->getIndexer()->getName());
97
+ $item->setDescription($item->getIndexer()->getDescription());
98
+ $item->setUpdateRequired($item->getUnprocessedEventsCollection()->count() > 0 ? 1 : 0);
99
+ if ($item->isLocked()) {
100
+ $item->setStatus(Mage_Index_Model_Process::STATUS_RUNNING);
101
+ }
102
+ $resArr[] = $item->toArray();
103
+ }
104
+ return $resArr;
105
+ }
106
+
107
+ public function getIndexingStatusNotification()
108
+ {
109
+ $notify = $this->getIndexingStatus();
110
+ $notification = '';
111
+ $total = 0;
112
+ foreach ($notify as $statuskey => $statusval) {
113
+ $stval = $statusval['status'];
114
+
115
+ if ($stval == 'require_reindex') {
116
+ $total++;
117
+ }
118
+ }
119
+ if ($total) {
120
+ if($total >1){
121
+ $notification = 'Currently ' . $total . ' indexing are required.::';
122
+ }else{
123
+ $notification = 'Currently ' . $total . ' indexing is required.::';
124
+ }
125
+ }
126
+
127
+ return $notification;
128
+ }
129
+ /**
130
+ * Get Cron schedule info
131
+ * @return onlinevisitors (array)
132
+ */
133
+ public function getCronScheduleInfo()
134
+ {
135
+ $modelCollection = $this->getAllCodes();
136
+
137
+ $cronCollection = Mage::getModel('cron/schedule')->getCollection();
138
+ $cronCollection->getSelect()->group('job_code');
139
+
140
+ $result = array();
141
+ foreach ($cronCollection as $val) {
142
+ $modelCode = $val->toArray();
143
+ if (isset($modelCollection[$modelCode['job_code']]) && $modelCollection[$modelCode['job_code']] != '') {
144
+ $val['model'] = $modelCollection[$modelCode['job_code']];
145
+ $result[] = $val->toArray();
146
+ }
147
+ }
148
+
149
+ return $result;
150
+ }
151
+
152
+ public function getAllCodes()
153
+ {
154
+ $codes = array();
155
+ $config = Mage::getConfig()->getNode('crontab/jobs');
156
+
157
+ if ($config instanceof Mage_Core_Model_Config_Element) {
158
+ foreach ($config->children() as $jobcode => $tmp) {
159
+ $model = (array) $tmp->run;
160
+ $modelArray[$jobcode] = $model['model'];
161
+ }
162
+ return $modelArray;
163
+ }
164
+ }
165
+ protected function _visit($url)
166
+ {
167
+ $agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
168
+ $ch = curl_init();
169
+ curl_setopt($ch, CURLOPT_URL, $url);
170
+ curl_setopt($ch, CURLOPT_USERAGENT, $agent);
171
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
172
+ curl_setopt($ch, CURLOPT_VERBOSE, false);
173
+ curl_setopt($ch, CURLOPT_TIMEOUT, 5);
174
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
175
+ curl_setopt($ch, CURLOPT_SSLVERSION, 3);
176
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
177
+ $page = curl_exec($ch);
178
+
179
+ $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
180
+ curl_close($ch);
181
+
182
+ if ($httpcode >= 200 && $httpcode < 300)
183
+ return true;
184
+ else
185
+ return false;
186
+ }
187
+ protected function _checkParse($url)
188
+ {
189
+ $ch = curl_init();
190
+
191
+ curl_setopt($ch, CURLOPT_URL, $url);
192
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
193
+
194
+ $output = curl_exec($ch);
195
+
196
+ curl_close($ch);
197
+
198
+
199
+ $result = simplexml_load_string($output, 'SimpleXmlElement', LIBXML_NOERROR + LIBXML_ERR_FATAL + LIBXML_ERR_NONE);
200
+ if (false == $result)
201
+ return 'error';
202
+ }
203
+
204
+ public function getWebsiteRunningStatus()
205
+ {
206
+ $homepage = Mage::getBaseUrl();
207
+ $_productCollection = $this->_getSingleProductsCollection();
208
+ $productUrl = $_productCollection->getProductUrl();
209
+ $categoryIds = $_productCollection->getCategoryIds();
210
+ $categoryUrl = $this->_getCategoryUrl($categoryIds);
211
+ $urlArray = array(
212
+ 'homepage' => $homepage,
213
+ 'listingpage' => $categoryUrl,
214
+ 'productpage' => $productUrl
215
+ );
216
+
217
+ foreach ($urlArray as $key => $value) {
218
+
219
+ $visitUrl = $this->_visit($value);
220
+ $checkParseUrl = $this->_checkParse($value);
221
+ if ($visitUrl) {
222
+ $error = "Website OK" . "\n";
223
+ if ($checkParseUrl == 'error') {
224
+ $error = 3; //"Website Having Error"."\n";(parse error)
225
+ } else {
226
+ $error = 1; //"Website Okay"; (Running)
227
+ }
228
+ } else {
229
+ $error = 2; //"Website DOWN"; (Network error)
230
+ }
231
+
232
+ $newArray[$key] = array(
233
+ 'name' => $key,
234
+ 'value' => $error
235
+ );
236
+ }
237
+
238
+ return $newArray;
239
+
240
+ }
241
+
242
+ /*
243
+ ** Get Website Notification
244
+ *
245
+ */
246
+ public function getWebsiteNotification()
247
+ {
248
+
249
+ $notify = $this->getWebsiteRunningStatus();
250
+
251
+ foreach ($notify as $statuskey => $statusval) {
252
+ $stval = $statusval['value'];
253
+
254
+ $title = '';
255
+ if($statuskey == 'homepage'){
256
+ $title = 'Home page';
257
+ }elseif($statuskey == 'listingpage'){
258
+ $title = 'Listing page';
259
+ }elseif($statuskey == 'productpage'){
260
+ $title = 'Product page';
261
+ }
262
+
263
+ if ($stval == '2') {
264
+
265
+ $notification = "Seems Network error on " . $title . '.::';
266
+ }
267
+ if ($stval == '3') {
268
+
269
+ $notification .= "Seems Parse error on " . $title . '.::';
270
+ }
271
+
272
+ }
273
+ return $notification;
274
+ }
275
+ public function serverUptime()
276
+ {
277
+ $data = '';
278
+ $current_reading = @exec('uptime');
279
+ $uptime = explode(' up ', $current_reading);
280
+ $uptime = explode(',', $uptime[1]);
281
+ $uptime = $uptime[0] . ', ' . $uptime[1];
282
+ $data .= "$uptime";
283
+ return $data;
284
+ }
285
+
286
+ public function get_server_memory_usage()
287
+ {
288
+
289
+ $free = shell_exec('free');
290
+ $free = (string) trim($free);
291
+ $free_arr = explode("\n", $free);
292
+ $mem = explode(" ", $free_arr[1]);
293
+ $mem = array_filter($mem);
294
+ $mem = array_merge($mem);
295
+ $memory_usage = $mem[2] / $mem[1] * 100;
296
+
297
+ return $memory_usage;
298
+ }
299
+ public function loadServer()
300
+ {
301
+ $current_reading = @exec('uptime');
302
+ preg_match("/averages?: ([0-9\.]+),[\s]+([0-9\.]+),[\s]+([0-9\.]+)/", $current_reading, $averages);
303
+
304
+ $data = "$averages[1], $averages[2], $averages[3]\n";
305
+
306
+ return $data;
307
+ }
308
+ function get_server_cpu_usage()
309
+ {
310
+
311
+ $load = sys_getloadavg();
312
+ return $load[0];
313
+
314
+ }
315
+
316
+ /*Get CPU usage and Memory Usage*/
317
+ public function getCPUMemoryUsage()
318
+ {
319
+
320
+ $memory = $this->get_server_memory_usage();
321
+ $memory1 = round($memory, 2) . '%';
322
+ $cpu = $this->get_server_cpu_usage();
323
+ $cpu1 = round($cpu, 2) . '%';
324
+ $load = $this->loadServer();
325
+ $server = $this->serverUptime();
326
+
327
+ $server_load = Mage::getStoreConfig('magemobapp/sitehealth/server_load');
328
+ $memory_usage = Mage::getStoreConfig('magemobapp/sitehealth/memory_usage');
329
+ $cpu_usage = Mage::getStoreConfig('magemobapp/sitehealth/cpu_usage');
330
+ $load = explode(',', $load);
331
+ $loadStatus = 'ok';
332
+ $memory1Status = 'ok';
333
+ $cpu1Status = 'ok';
334
+ $loadtext = '';
335
+
336
+ for ($i = 0; $i < sizeof($load); $i++) {
337
+ if ($load[$i] >= $server_load) {
338
+ $loadStatus = 'critical';
339
+ }
340
+ $loadtext .= trim($load[$i]) . '%, ';
341
+ }
342
+
343
+ if ($memory1 >= 0.1) {
344
+ $memory1Status = 'critical';
345
+ }
346
+
347
+ if ($cpu1 >= $cpu_usage) {
348
+ $cpu1 = 'critical';
349
+ }
350
+ $cpu_memory_usage = array(
351
+ 'memory_usage' => array(
352
+ 'name' => 'Memory Usage',
353
+ 'value' => $memory1,
354
+ 'status' => $memory1Status
355
+ ),
356
+ 'cpu_usage' => array(
357
+ 'name' => 'CPU Usage',
358
+ 'value' => $cpu1,
359
+ 'status' => $cpu1Status
360
+ ),
361
+ 'load' => array(
362
+ 'name' => 'Load Average',
363
+ 'value' => $loadtext,
364
+ 'status' => $loadStatus
365
+ ),
366
+ 'server_uptime' => array(
367
+ 'name' => 'Server Uptime',
368
+ 'value' => $server
369
+ )
370
+ );
371
+
372
+
373
+ return $cpu_memory_usage;
374
+ }
375
+ public function getCPUMemoryUsageNotification()
376
+ {
377
+ $notification = '';
378
+ $notify = $this->getCPUMemoryUsage();
379
+ foreach ($notify as $statuskey => $statusval) {
380
+ if (isset($statusval['status']) && $statusval['status'] != '') {
381
+ $stval = $statusval['status'];
382
+ if ($stval == 'critical') {
383
+ $notification .= "Memory usage " . $statusval['value'] . '.::';
384
+ }
385
+ }
386
+ }
387
+ return $notification;
388
+
389
+ }
390
+
391
+ protected function _getSingleProductsCollection()
392
+ {
393
+ $collection = Mage::getResourceModel('catalog/product_collection');
394
+ $collection->addAttributeToSort('entity_id', 'DESC');
395
+ $collection->setPage(1,1); //set a limit to 1 so the query would be faster
396
+ return $collection->getFirstItem();
397
+ }
398
+
399
+ protected function _getCategoryUrl($ids)
400
+ {
401
+ $categoryId = (isset($ids[0]) ? $ids[0] : 0);
402
+ $collection = Mage::getModel('catalog/category')->load($categoryId);
403
+ return $collection->getUrl();
404
+ }
405
+ }
app/code/community/Oscprofessionals/Magemobapp/controllers/IndexController.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @category Oscprofessionals
5
+ * @package Oscprofessionals_Magemobapp
6
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
7
+ */
8
+
9
+ class Oscprofessionals_Magemobapp_IndexController extends Mage_Core_Controller_Front_Action
10
+ {
11
+
12
+ public function indexAction()
13
+ {
14
+
15
+ //set header
16
+ header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']);
17
+ header('Access-Control-Allow-Credentials: true');
18
+
19
+ //getStoreId($_POST);
20
+ $data = array();
21
+
22
+ //Store action from Post Data
23
+ $data['action'] = $this->getRequest()->getPost('action');
24
+
25
+ //Store Params from Post Data
26
+ $data['params'] = $this->getRequest()->getPost('params');
27
+
28
+ $oscModel = Mage::getModel('magemobapp/osc');
29
+
30
+ try {
31
+ $result = $oscModel->processRequest($data);
32
+ }
33
+ catch (Exception $e) {
34
+
35
+ $result['message'] = $e->getMessage();
36
+ Mage::log($result['message'] , null, 'oscMageAdim.log');
37
+ }
38
+
39
+ $this->getResponse()->setHeader('Content-type', 'application/json', true);
40
+ $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
41
+
42
+ return $this;
43
+
44
+ }
45
+ }
app/code/community/Oscprofessionals/Magemobapp/etc/adminhtml.xml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ *
5
+ * @category Oscprofessionals
6
+ * @package Oscprofessionals_Magemobapp
7
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
8
+ */
9
+ -->
10
+ <config>
11
+ <acl>
12
+ <resources>
13
+ <admin>
14
+ <children>
15
+ <system>
16
+ <children>
17
+ <config>
18
+ <children>
19
+ <magemobapp translate="title" module="magemobapp">
20
+ <title>Mage Mob App</title>
21
+ </magemobapp>
22
+ </children>
23
+ </config>
24
+ </children>
25
+ </system>
26
+ </children>
27
+ </admin>
28
+ </resources>
29
+ </acl>
30
+ </config>
app/code/community/Oscprofessionals/Magemobapp/etc/config.xml ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ /**
4
+ *
5
+ * @category Oscprofessionals
6
+ * @package Oscprofessionals_Magemobapp
7
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
8
+ */
9
+ -->
10
+ <config>
11
+ <modules>
12
+ <Oscprofessionals_Magemobapp>
13
+ <version>2.0.0</version>
14
+ </Oscprofessionals_Magemobapp>
15
+ </modules>
16
+ <frontend>
17
+ <routers>
18
+ <magemobapp>
19
+ <use>standard</use>
20
+ <args>
21
+ <module>Oscprofessionals_Magemobapp</module>
22
+ <frontName>magemobapp</frontName>
23
+ </args>
24
+ </magemobapp>
25
+ </routers>
26
+ </frontend>
27
+ <global>
28
+ <models>
29
+ <magemobapp>
30
+ <class>Oscprofessionals_Magemobapp_Model</class>
31
+ <resourceModel>magemobapp_mysql4</resourceModel>
32
+ </magemobapp>
33
+ </models>
34
+ <blocks>
35
+ <magemobapp>
36
+ <class>Oscprofessionals_Magemobapp_Block</class>
37
+ </magemobapp>
38
+ </blocks>
39
+ <helpers>
40
+ <magemobapp>
41
+ <class>Oscprofessionals_Magemobapp_Helper</class>
42
+ </magemobapp>
43
+ </helpers>
44
+ </global>
45
+ <default>
46
+ <magemobapp>
47
+ <settings>
48
+ <reporting_days>7</reporting_days>
49
+ <stock_critical_level>20</stock_critical_level>
50
+ <notification_enabled>1</notification_enabled>
51
+ <update_frequency>5</update_frequency>
52
+ </settings>
53
+ <sitehealth>
54
+ <website_enabled>1</website_enabled>
55
+ <server_enabled>1</server_enabled>
56
+ <server_load>15</server_load>
57
+ <memory_usage>80%</memory_usage>
58
+ <cpu_usage>60%</cpu_usage>
59
+ <cronschedule_enabled>1</cronschedule_enabled>
60
+ <index_enabled>1</index_enabled>
61
+ <logtable_enabled>1</logtable_enabled>
62
+ <log_table_size>5000</log_table_size>
63
+ </sitehealth>
64
+ <dashboard>
65
+ <neworder_enabled>1</neworder_enabled>
66
+ <allorder_enabled>1</allorder_enabled>
67
+ <allcustomers_enabled>1</allcustomers_enabled>
68
+ <stockalert_enabled>1</stockalert_enabled>
69
+ <todayssales_enabled>1</todayssales_enabled>
70
+ <online_enabled>1</online_enabled>
71
+ <abandonedcart_enabled>1</abandonedcart_enabled>
72
+ </dashboard>
73
+ </magemobapp>
74
+ </default>
75
+ </config>
app/code/community/Oscprofessionals/Magemobapp/etc/system.xml ADDED
@@ -0,0 +1,256 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ *
5
+ * @category Oscprofessionals
6
+ * @package Oscprofessionals_Magemobapp
7
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
8
+ */
9
+ -->
10
+ <config>
11
+ <tabs>
12
+ <magemobapp translate="label" module="magemobapp">
13
+ <label>Oscprofessionals</label>
14
+ <sort_order>1000</sort_order>
15
+ </magemobapp>
16
+ </tabs>
17
+ <sections>
18
+ <magemobapp translate="label" module="magemobapp">
19
+ <label>Mage Mob App</label>
20
+ <tab>magemobapp</tab>
21
+ <frontend_type>text</frontend_type>
22
+ <sort_order>100</sort_order>
23
+ <show_in_default>1</show_in_default>
24
+ <show_in_website>1</show_in_website>
25
+ <show_in_store>1</show_in_store>
26
+ <!-- < BOF of enabled flag> -->
27
+ <groups>
28
+ <settings translate="label">
29
+ <label>Mage Mob App setting</label>
30
+ <frontend_type>text</frontend_type>
31
+ <sort_order>10</sort_order>
32
+ <show_in_default>1</show_in_default>
33
+ <show_in_website>1</show_in_website>
34
+ <show_in_store>1</show_in_store>
35
+ <fields>
36
+ <reporting_days translate="label">
37
+ <label>Reporting Days</label>
38
+ <validate>required-entry validate-digits-range digits-range-7-30"</validate>
39
+ <comment>Enter Reporting Days(min 7 and max 30 days)</comment>
40
+ <frontend_type>text</frontend_type>
41
+ <sort_order>10</sort_order>
42
+ <show_in_default>1</show_in_default>
43
+ <show_in_website>1</show_in_website>
44
+ <show_in_store>1</show_in_store>
45
+ </reporting_days>
46
+ <stock_critical_level translate="label">
47
+ <label>Stock Critical Level</label>
48
+ <comment>Stock Critical level</comment>
49
+ <frontend_type>text</frontend_type>
50
+ <sort_order>20</sort_order>
51
+ <show_in_default>1</show_in_default>
52
+ <show_in_website>1</show_in_website>
53
+ <show_in_store>1</show_in_store>
54
+ </stock_critical_level>
55
+ <notification_enabled translate="label">
56
+ <label>Notification Status Enabled</label>
57
+ <frontend_type>select</frontend_type>
58
+ <source_model>adminhtml/system_config_source_yesno</source_model>
59
+ <sort_order>30</sort_order>
60
+ <show_in_default>1</show_in_default>
61
+ <show_in_website>1</show_in_website>
62
+ <show_in_store>1</show_in_store>
63
+ </notification_enabled>
64
+ <update_frequency translate="label">
65
+ <label>Update Frequency</label>
66
+ <comment>value should be in minute. for Example:5 min</comment>
67
+ <frontend_type>text</frontend_type>
68
+ <sort_order>40</sort_order>
69
+ <show_in_default>1</show_in_default>
70
+ <show_in_website>1</show_in_website>
71
+ <show_in_store>1</show_in_store>
72
+ <depends>
73
+ <notification_enabled>1</notification_enabled>
74
+ </depends>
75
+ </update_frequency>
76
+ </fields>
77
+ </settings>
78
+ <sitehealth translate="label" module="magemobapp">
79
+ <label>Site Health Monitor</label>
80
+ <show_in_default>1</show_in_default>
81
+ <show_in_website>1</show_in_website>
82
+ <show_in_store>1</show_in_store>
83
+ <sort_order>20</sort_order>
84
+ <fields>
85
+ <website_enabled translate="label">
86
+ <label>Webpage Status Enabled</label>
87
+ <frontend_type>select</frontend_type>
88
+ <source_model>adminhtml/system_config_source_yesno</source_model>
89
+ <sort_order>10</sort_order>
90
+ <show_in_default>1</show_in_default>
91
+ <show_in_website>1</show_in_website>
92
+ <show_in_store>1</show_in_store>
93
+ </website_enabled>
94
+ <server_enabled translate="label">
95
+ <label>Serverload Status Enabled</label>
96
+ <frontend_type>select</frontend_type>
97
+ <source_model>adminhtml/system_config_source_yesno</source_model>
98
+ <sort_order>20</sort_order>
99
+ <show_in_default>1</show_in_default>
100
+ <show_in_website>1</show_in_website>
101
+ <show_in_store>1</show_in_store>
102
+ </server_enabled>
103
+ <server_load translate="label">
104
+ <label>Server load Average</label>
105
+ <comment>limit for load average</comment>
106
+ <frontend_type>text</frontend_type>
107
+ <sort_order>30</sort_order>
108
+ <show_in_default>1</show_in_default>
109
+ <show_in_website>1</show_in_website>
110
+ <show_in_store>1</show_in_store>
111
+ <depends>
112
+ <server_enabled>1</server_enabled>
113
+ </depends>
114
+ </server_load>
115
+ <memory_usage translate="label">
116
+ <label>Memory Usage</label>
117
+ <comment>limit for Memory Usage</comment>
118
+ <frontend_type>text</frontend_type>
119
+ <sort_order>40</sort_order>
120
+ <show_in_default>1</show_in_default>
121
+ <show_in_website>1</show_in_website>
122
+ <show_in_store>1</show_in_store>
123
+ <depends>
124
+ <server_enabled>1</server_enabled>
125
+ </depends>
126
+ </memory_usage>
127
+ <cpu_usage translate="label">
128
+ <label>CPU Usage</label>
129
+ <comment>limit for CPU Usage</comment>
130
+ <frontend_type>text</frontend_type>
131
+ <sort_order>50</sort_order>
132
+ <show_in_default>1</show_in_default>
133
+ <show_in_website>1</show_in_website>
134
+ <show_in_store>1</show_in_store>
135
+ <depends>
136
+ <server_enabled>1</server_enabled>
137
+ </depends>
138
+ </cpu_usage>
139
+ <cronschedule_enabled translate="label">
140
+ <label>CronSchedule Status Enabled</label>
141
+ <frontend_type>select</frontend_type>
142
+ <source_model>adminhtml/system_config_source_yesno</source_model>
143
+ <sort_order>60</sort_order>
144
+ <show_in_default>1</show_in_default>
145
+ <show_in_website>1</show_in_website>
146
+ <show_in_store>1</show_in_store>
147
+ </cronschedule_enabled>
148
+ <index_enabled translate="label">
149
+ <label>Indexing Status Enabled</label>
150
+ <frontend_type>select</frontend_type>
151
+ <source_model>adminhtml/system_config_source_yesno</source_model>
152
+ <sort_order>70</sort_order>
153
+ <show_in_default>1</show_in_default>
154
+ <show_in_website>1</show_in_website>
155
+ <show_in_store>1</show_in_store>
156
+ </index_enabled>
157
+ <logtable_enabled translate="label">
158
+ <label>Log Table Size Enabled</label>
159
+ <frontend_type>select</frontend_type>
160
+ <source_model>adminhtml/system_config_source_yesno</source_model>
161
+ <sort_order>80</sort_order>
162
+ <show_in_default>1</show_in_default>
163
+ <show_in_website>1</show_in_website>
164
+ <show_in_store>1</show_in_store>
165
+ </logtable_enabled>
166
+ <log_table_size translate="label">
167
+ <label>Log Table Size</label>
168
+ <comment>limit for log table size</comment>
169
+ <frontend_type>text</frontend_type>
170
+ <sort_order>90</sort_order>
171
+ <show_in_default>1</show_in_default>
172
+ <show_in_website>1</show_in_website>
173
+ <show_in_store>1</show_in_store>
174
+ <depends>
175
+ <logtable_enabled>1</logtable_enabled>
176
+ </depends>
177
+ </log_table_size>
178
+ </fields>
179
+ </sitehealth>
180
+ <dashboard translate="label" module="magemobapp">
181
+ <label>Dashboard</label>
182
+ <show_in_default>1</show_in_default>
183
+ <show_in_website>1</show_in_website>
184
+ <show_in_store>1</show_in_store>
185
+ <sort_order>30</sort_order>
186
+ <fields>
187
+ <neworder_enabled translate="label">
188
+ <label>New Order Status Enabled</label>
189
+ <frontend_type>select</frontend_type>
190
+ <source_model>adminhtml/system_config_source_yesno</source_model>
191
+ <sort_order>10</sort_order>
192
+ <show_in_default>1</show_in_default>
193
+ <show_in_website>1</show_in_website>
194
+ <show_in_store>1</show_in_store>
195
+ </neworder_enabled>
196
+ <allorder_enabled translate="label">
197
+ <label>All Order Status Enabled</label>
198
+ <frontend_type>select</frontend_type>
199
+ <source_model>adminhtml/system_config_source_yesno</source_model>
200
+ <sort_order>20</sort_order>
201
+ <show_in_default>1</show_in_default>
202
+ <show_in_website>1</show_in_website>
203
+ <show_in_store>1</show_in_store>
204
+ </allorder_enabled>
205
+ <allcustomers_enabled translate="label">
206
+ <label>All Customers Status Enabled</label>
207
+ <frontend_type>select</frontend_type>
208
+ <source_model>adminhtml/system_config_source_yesno</source_model>
209
+ <sort_order>30</sort_order>
210
+ <show_in_default>1</show_in_default>
211
+ <show_in_website>1</show_in_website>
212
+ <show_in_store>1</show_in_store>
213
+ </allcustomers_enabled>
214
+ <stockalert_enabled translate="label">
215
+ <label>Stock Alert Status Enabled</label>
216
+ <frontend_type>select</frontend_type>
217
+ <source_model>adminhtml/system_config_source_yesno</source_model>
218
+ <sort_order>40</sort_order>
219
+ <show_in_default>1</show_in_default>
220
+ <show_in_website>1</show_in_website>
221
+ <show_in_store>1</show_in_store>
222
+ </stockalert_enabled>
223
+ <todayssales_enabled translate="label">
224
+ <label>Todays Sales Status Enabled</label>
225
+ <frontend_type>select</frontend_type>
226
+ <source_model>adminhtml/system_config_source_yesno</source_model>
227
+ <sort_order>50</sort_order>
228
+ <show_in_default>1</show_in_default>
229
+ <show_in_website>1</show_in_website>
230
+ <show_in_store>1</show_in_store>
231
+ </todayssales_enabled>
232
+ <online_enabled translate="label">
233
+ <label>Online Customer Status Enabled</label>
234
+ <frontend_type>select</frontend_type>
235
+ <source_model>adminhtml/system_config_source_yesno</source_model>
236
+ <sort_order>60</sort_order>
237
+ <show_in_default>1</show_in_default>
238
+ <show_in_website>1</show_in_website>
239
+ <show_in_store>1</show_in_store>
240
+ </online_enabled>
241
+ <abandonedcart_enabled translate="label">
242
+ <label>Abandoned Cart Status Enabled</label>
243
+ <frontend_type>select</frontend_type>
244
+ <source_model>adminhtml/system_config_source_yesno</source_model>
245
+ <sort_order>70</sort_order>
246
+ <show_in_default>1</show_in_default>
247
+ <show_in_website>1</show_in_website>
248
+ <show_in_store>1</show_in_store>
249
+ </abandonedcart_enabled>
250
+ </fields>
251
+ </dashboard>
252
+ <!-- < EOF of enabled flag> -->
253
+ </groups>
254
+ </magemobapp>
255
+ </sections>
256
+ </config>
app/etc/modules/Oscprofessionals_Magemobapp.xml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ *
5
+ * @category Oscprofessionals
6
+ * @package Oscprofessionals_Magemobapp
7
+ * @author Oscprofessionals Team <oscpteam@oscprofessionals.com>
8
+ */
9
+ -->
10
+ <config>
11
+ <modules>
12
+ <Oscprofessionals_Magemobapp>
13
+ <active>true</active>
14
+ <codePool>community</codePool>
15
+ <version>2.0.0</version>
16
+ </Oscprofessionals_Magemobapp>
17
+ </modules>
18
+ </config>
package.xml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Osc_Mage_Admin</name>
4
+ <version>2.0.0</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>E-store dashboard on Android, iOS mobile with Sales/order/customer/stock-alert report, site-health...</summary>
10
+ <description>Monitor your e-store on mobile anytime, anywhere!&#xD;
11
+ Android &amp; iOS App to view dashboard including Order report, Customer report, Sales report, Stock Alert report, Abandoned orders, Site health and many more.&#xD;
12
+ Access real-time analytic of your multi-store. </description>
13
+ <notes>Release with latest version</notes>
14
+ <authors><author><name>Satish Mantri</name><user>oscprof</user><email>satish@oscprofessionals.com</email></author></authors>
15
+ <date>2015-10-21</date>
16
+ <time>12:49:48</time>
17
+ <contents><target name="magecommunity"><dir name="Oscprofessionals"><dir name="Magemobapp"><dir name="Block"><dir name="Order"><file name="Totals.php" hash="d67bf0a949f2f543ccc10fff0a52fe7b"/></dir><file name="Osc.php" hash="d56e631c46d3878670922eafb9c4339c"/></dir><dir name="Helper"><file name="Data.php" hash="e2dc00a341a7000aba51990fb9e8259c"/></dir><dir name="Model"><file name="Customers.php" hash="0bb495f2143239c6f7a1af346eab6e50"/><file name="Dashboard.php" hash="a21fa48873cf3aff5f4d0f1ecf341995"/><file name="Login.php" hash="42c1c0856a26435fb0df48663848d328"/><file name="Logoff.php" hash="3c67d878906fac004434d49672a0d5c8"/><file name="Notification.php" hash="014b0bff2a499cbbb69c040c27174185"/><file name="Orders.php" hash="82782b2be3e8d0d95269407596644118"/><file name="Osc.php" hash="7a663e16bc2092aa6ca372480556c7cc"/><file name="Sitehealth.php" hash="070a4b8a7b353fa5552b20dd8481ca3b"/><file name="Stock.php" hash="c5325cf49327e0df4655612653de1028"/><file name="Storeinfo.php" hash="f14ae6b708ba0de0683834fe27a63e7f"/></dir><dir name="controllers"><file name="IndexController.php" hash="0cb9c4c434484266cecb238228c47938"/></dir><dir name="etc"><file name="adminhtml.xml" hash="3565c974e3b41d1ac2cafc60bc544389"/><file name="config.xml" hash="9331a90f90ad16bbf970b74bc84aa52d"/><file name="system.xml" hash="2d6c6bc10f626b310d0214e713265398"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Oscprofessionals_Magemobapp.xml" hash="60c3463c0b761390bf67fbb5b4b7a513"/></dir></target></contents>
18
+ <compatible/>
19
+ <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
20
+ </package>