1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
26:
27: 28: 29: 30: 31:
32: abstract class Mage_Core_Helper_Abstract
33: {
34: 35: 36: 37: 38:
39: protected $_moduleName;
40:
41: 42: 43: 44: 45:
46: protected $_request;
47:
48: 49: 50: 51: 52:
53: protected $_layout;
54:
55: 56: 57: 58: 59:
60: protected function _getRequest()
61: {
62: if (!$this->_request) {
63: $this->_request = Mage::app()->getRequest();
64: }
65: return $this->_request;
66: }
67:
68: 69: 70: 71: 72: 73:
74: protected function _loadCache($id)
75: {
76: return Mage::app()->loadCache($id);
77: }
78:
79: 80: 81: 82: 83: 84: 85: 86:
87: protected function _saveCache($data, $id, $tags=array(), $lifeTime=false)
88: {
89: Mage::app()->saveCache($data, $id, $tags, $lifeTime);
90: return $this;
91: }
92:
93: 94: 95: 96: 97: 98:
99: protected function _removeCache($id)
100: {
101: Mage::app()->removeCache($id);
102: return $this;
103: }
104:
105: 106: 107: 108: 109: 110:
111: protected function _cleanCache($tags=array())
112: {
113: Mage::app()->cleanCache($tags);
114: return $this;
115: }
116:
117: 118: 119: 120: 121:
122: protected function _getModuleName()
123: {
124: if (!$this->_moduleName) {
125: $class = get_class($this);
126: $this->_moduleName = substr($class, 0, strpos($class, '_Helper'));
127: }
128: return $this->_moduleName;
129: }
130:
131: 132: 133: 134: 135: 136:
137: public function isModuleOutputEnabled($moduleName = null)
138: {
139: if ($moduleName === null) {
140: $moduleName = $this->_getModuleName();
141: }
142:
143: if (!$this->isModuleEnabled($moduleName)) {
144: return false;
145: }
146:
147: if (Mage::getStoreConfigFlag('advanced/modules_disable_output/' . $moduleName)) {
148: return false;
149: }
150: return true;
151: }
152:
153: 154: 155: 156: 157: 158:
159: public function isModuleEnabled($moduleName = null)
160: {
161: if ($moduleName === null) {
162: $moduleName = $this->_getModuleName();
163: }
164:
165: if (!Mage::getConfig()->getNode('modules/' . $moduleName)) {
166: return false;
167: }
168:
169: $isActive = Mage::getConfig()->getNode('modules/' . $moduleName . '/active');
170: if (!$isActive || !in_array((string)$isActive, array('true', '1'))) {
171: return false;
172: }
173: return true;
174: }
175:
176: 177: 178: 179: 180:
181: public function __()
182: {
183: $args = func_get_args();
184: $expr = new Mage_Core_Model_Translate_Expr(array_shift($args), $this->_getModuleName());
185: array_unshift($args, $expr);
186: return Mage::app()->getTranslator()->translate($args);
187: }
188:
189: 190: 191: 192:
193: public function htmlEscape($data, $allowedTags = null)
194: {
195: return $this->escapeHtml($data, $allowedTags);
196: }
197:
198: 199: 200: 201: 202: 203: 204:
205: public function escapeHtml($data, $allowedTags = null)
206: {
207: if (is_array($data)) {
208: $result = array();
209: foreach ($data as $item) {
210: $result[] = $this->escapeHtml($item);
211: }
212: } else {
213:
214: if (strlen($data)) {
215: if (is_array($allowedTags) and !empty($allowedTags)) {
216: $allowed = implode('|', $allowedTags);
217: $result = preg_replace('/<([\/\s\r\n]*)(' . $allowed . ')([\/\s\r\n]*)>/si', '##$1$2$3##', $data);
218: $result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false);
219: $result = preg_replace('/##([\/\s\r\n]*)(' . $allowed . ')([\/\s\r\n]*)##/si', '<$1$2$3>', $result);
220: } else {
221: $result = htmlspecialchars($data, ENT_COMPAT, 'UTF-8', false);
222: }
223: } else {
224: $result = $data;
225: }
226: }
227: return $result;
228: }
229:
230: 231: 232: 233: 234: 235:
236: public function removeTags($html)
237: {
238: $html = preg_replace("# <(?![/a-z]) | (?<=\s)>(?![a-z]) #exi", "htmlentities('$0')", $html);
239: $html = strip_tags($html);
240: return htmlspecialchars_decode($html);
241: }
242:
243: 244: 245: 246: 247: 248: 249: 250:
251: public function stripTags($data, $allowableTags = null, $escape = false)
252: {
253: $result = strip_tags($data, $allowableTags);
254: return $escape ? $this->escapeHtml($result, $allowableTags) : $result;
255: }
256:
257: 258: 259: 260:
261: public function urlEscape($data)
262: {
263: return $this->escapeUrl($data);
264: }
265:
266: 267: 268: 269: 270: 271:
272: public function escapeUrl($data)
273: {
274: return htmlspecialchars($data);
275: }
276:
277: 278: 279: 280: 281: 282: 283:
284: public function jsQuoteEscape($data, $quote='\'')
285: {
286: if (is_array($data)) {
287: $result = array();
288: foreach ($data as $item) {
289: $result[] = str_replace($quote, '\\'.$quote, $item);
290: }
291: return $result;
292: }
293: return str_replace($quote, '\\'.$quote, $data);
294: }
295:
296: 297: 298: 299: 300: 301: 302: 303:
304: public function quoteEscape($data, $addSlashes = false)
305: {
306: if ($addSlashes === true) {
307: $data = addslashes($data);
308: }
309: return htmlspecialchars($data, ENT_QUOTES, null, false);
310: }
311:
312: 313: 314: 315: 316: 317: 318:
319: protected function _getUrl($route, $params = array())
320: {
321: return Mage::getUrl($route, $params);
322: }
323:
324: 325: 326: 327: 328: 329:
330: public function setLayout($layout)
331: {
332: $this->_layout = $layout;
333: return $this;
334: }
335:
336: 337: 338: 339: 340:
341: public function getLayout()
342: {
343: return $this->_layout;
344: }
345:
346: 347: 348: 349: 350: 351:
352: public function urlEncode($url)
353: {
354: return strtr(base64_encode($url), '+/=', '-_,');
355: }
356:
357: 358: 359: 360: 361: 362:
363: public function urlDecode($url)
364: {
365: $url = base64_decode(strtr($url, '-_,', '+/='));
366: return Mage::getSingleton('core/url')->sessionUrlVar($url);
367: }
368:
369: 370: 371: 372: 373: 374:
375: public function translateArray($arr = array())
376: {
377: foreach ($arr as $k => $v) {
378: if (is_array($v)) {
379: $v = self::translateArray($v);
380: } elseif ($k === 'label') {
381: $v = self::__($v);
382: }
383: $arr[$k] = $v;
384: }
385: return $arr;
386: }
387: }
388: