PageRenderTime 53ms CodeModel.GetById 28ms RepoModel.GetById 1ms app.codeStats 0ms

/user/models/Yum.php

https://github.com/ladzzzz123/yii-user-management
PHP | 201 lines | 139 code | 29 blank | 33 comment | 17 complexity | 371927661c8f450fb250c2bafefb9f6f MD5 | raw file
  1. <?
  2. /**
  3. * Helper class
  4. * @author tomasz.suchanek@gmail.com
  5. * @since 0.6
  6. * @package Yum.core
  7. *
  8. */
  9. class Yum
  10. {
  11. /** Register an asset file of Yum */
  12. public static function register($file)
  13. {
  14. $url = Yii::app()->getAssetManager()->publish(
  15. Yii::getPathOfAlias('application.modules.user.assets'));
  16. $path = $url . '/' . $file;
  17. if(strpos($file, 'js') !== false)
  18. return Yii::app()->clientScript->registerScriptFile($path);
  19. else if(strpos($file, 'css') !== false)
  20. return Yii::app()->clientScript->registerCssFile($path);
  21. return $path;
  22. }
  23. public static function hint($message)
  24. {
  25. return '<div class="hint">' . Yum::t($message) . '</div>';
  26. }
  27. public static function getAvailableLanguages () {
  28. $cache_id = 'yum_available_languages';
  29. $languages = false;
  30. if(Yii::app()->cache)
  31. $languages = Yii::app()->cache->get($cache_id);
  32. if($languages===false) {
  33. $translationTable = Yum::module()->translationTable;
  34. $sql = "select language from {$translationTable} group by language";
  35. $command=Yii::app()->db->createCommand($sql);
  36. $languages=array();
  37. foreach($command->queryAll() as $row)
  38. $languages[$row['language']]=$row['language'];
  39. if(Yii::app()->cache)
  40. Yii::app()->cache->set($cache_id, $languages);
  41. }
  42. return $languages;
  43. }
  44. /* set a flash message to display after the request is done */
  45. public static function setFlash($message, $delay = 5000)
  46. {
  47. $_SESSION['yum_message'] = Yum::t($message);
  48. $_SESSION['yum_delay'] = $delay;
  49. }
  50. public static function hasFlash()
  51. {
  52. return isset($_SESSION['yum_message']);
  53. }
  54. /* retrieve the flash message again */
  55. public static function getFlash() {
  56. if(Yum::hasFlash()) {
  57. $message = @$_SESSION['yum_message'];
  58. unset($_SESSION['yum_message']);
  59. return $message;
  60. }
  61. }
  62. /* A wrapper for the Yii::log function. If no category is given, we
  63. * use the YumController as a fallback value.
  64. * In addition to that, the message is being translated by Yum::t() */
  65. public static function log($message,
  66. $level = 'info',
  67. $category = 'application.modules.user.controllers.YumController') {
  68. if(Yum::module()->enableLogging)
  69. return Yii::log(Yum::t($message), $level, $category);
  70. }
  71. public static function renderFlash()
  72. {
  73. if(Yum::hasFlash()) {
  74. echo '<div class="info">';
  75. echo Yum::getFlash();
  76. echo '</div>';
  77. Yii::app()->clientScript->registerScript('fade',"
  78. setTimeout(function() { $('.info').fadeOut('slow'); },
  79. {$_SESSION['yum_delay']});
  80. ");
  81. }
  82. }
  83. public static function p($string, $params = array()) {
  84. return '<p>' . Yum::t($string, $params) . '</p>';
  85. }
  86. /** Fetch the translation string from db and cache when necessary */
  87. public static function t($string, $params = array(), $category = 'yum')
  88. {
  89. $language = Yii::app()->language;
  90. $cache_id = sprintf('yum_translations_%s_%s', $language, $category);
  91. $messages = false;
  92. if(Yii::app()->cache)
  93. $messages = Yii::app()->cache->get($cache_id);
  94. if($messages===false) {
  95. if(Yum::module()->avoidSql) {
  96. $translations = YumTranslation::model()->findAll('category = :category and language = :language', array(
  97. 'category' => $category,
  98. 'language' => $language,
  99. ));
  100. $messages=array();
  101. foreach($translations as $row)
  102. $messages[$row['message']]=$row->translation;
  103. } else {
  104. $translationTable = Yum::module()->translationTable;
  105. $sql = "select message, translation from {$translationTable} where language = :language and category = :category";
  106. $command=Yii::app()->db->createCommand($sql);
  107. $command->bindValue(':category',$category);
  108. $command->bindValue(':language',$language);
  109. $messages=array();
  110. foreach($command->queryAll() as $row)
  111. $messages[$row['message']]=$row['translation'];
  112. }
  113. if(Yii::app()->cache)
  114. Yii::app()->cache->set($cache_id, $messages);
  115. }
  116. if(isset($messages[$string]))
  117. return strtr($messages[$string], $params);
  118. else
  119. return strtr($string, $params);
  120. }
  121. // returns the Yii User Management module. Frequently used for accessing
  122. // options by calling Yum::module()->option
  123. public static function module($module = 'user') {
  124. return Yii::app()->getModule($module);
  125. }
  126. public static function hasModule($module) {
  127. return array_key_exists($module, Yii::app()->modules);
  128. }
  129. /**
  130. * Parses url for predefined symbols and returns real routes
  131. * Following symbols are allowed:
  132. * - {yum} - points to base path of Yum
  133. * - {users} - points to user controller
  134. * - {messsages} - points to base messages module
  135. * - {roles} - points to base roles module
  136. * - {profiles} - points to base profile module
  137. * @param string $url
  138. * @since 0.6
  139. * @return string
  140. */
  141. public static function route($url)
  142. {
  143. $yumBaseRoute=Yum::module()->yumBaseRoute;
  144. $tr=array();
  145. $tr['{yum}']=$yumBaseRoute;
  146. $tr['{messages}']=$yumBaseRoute.'/messages';
  147. $tr['{roles}']=$yumBaseRoute.'/role';
  148. $tr['{profiles}']=$yumBaseRoute.'/profiles';
  149. $tr['{user}']=$yumBaseRoute.'/user';
  150. if(is_array($url))
  151. {
  152. $ret=array();
  153. foreach($url as $k=>$entry)
  154. $ret[$k]=strtr($entry,$tr);
  155. return $ret;
  156. }
  157. else
  158. return strtr($url,$tr);
  159. }
  160. /**
  161. * Produces note: "Field with * are required"
  162. * @since 0.6
  163. * @return string
  164. */
  165. public static function requiredFieldNote()
  166. {
  167. return CHtml::tag('p',array('class'=>'note'),Yum::t(
  168. 'Fields with <span class="required">*</span> are required.'
  169. ),true);
  170. }
  171. }
  172. ?>