PageRenderTime 28ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/protected/modules/feedback/FeedbackModule.php

https://gitlab.com/RonLab1987/YupePlusClear
PHP | 409 lines | 266 code | 32 blank | 111 comment | 7 complexity | 5cf129cd742c1b1678bdd1eb5371ab53 MD5 | raw file
  1. <?php
  2. /**
  3. * FeedbackModule основной класс модуля feedback
  4. *
  5. * @author yupe team <team@yupe.ru>
  6. * @link http://yupe.ru
  7. * @copyright 2009-2013 amyLabs && Yupe! team
  8. * @package yupe.modules.feedback
  9. * @since 0.1
  10. *
  11. */
  12. use yupe\components\WebModule;
  13. /**
  14. * Class FeedbackModule
  15. */
  16. class FeedbackModule extends WebModule
  17. {
  18. /**
  19. *
  20. */
  21. const VERSION = '1.0';
  22. /**
  23. * @var array
  24. */
  25. public $backEnd = ['DbFeedbackSender', 'EmailFeedbackSender'];
  26. /**
  27. * @var
  28. */
  29. public $emails;
  30. /**
  31. * @var
  32. */
  33. public $types;
  34. /**
  35. * @var int
  36. */
  37. public $showCaptcha = 0;
  38. /**
  39. * @var
  40. */
  41. public $notifyEmailFrom;
  42. /**
  43. * @var int
  44. */
  45. public $sendConfirmation = 0;
  46. /**
  47. * @var
  48. */
  49. public $successPage;
  50. /**
  51. * @var int
  52. */
  53. public $cacheTime = 60;
  54. /**
  55. * @var int
  56. */
  57. public $minCaptchaLength = 3;
  58. /**
  59. * @var int
  60. */
  61. public $maxCaptchaLength = 6;
  62. /**
  63. *
  64. */
  65. const BACKEND_EMAIL = 'EmailFeedbackSender';
  66. /**
  67. *
  68. */
  69. const BACKEND_DB = 'DbFeedbackSender';
  70. /**
  71. * @return array
  72. */
  73. public function getDependencies()
  74. {
  75. return [
  76. 'category',
  77. 'user',
  78. 'mail',
  79. ];
  80. }
  81. /**
  82. * @return array
  83. */
  84. public function getParamsLabels()
  85. {
  86. return [
  87. 'showCaptcha' => Yii::t('FeedbackModule.feedback', 'Show captcha'),
  88. 'emails' => Yii::t('FeedbackModule.feedback', 'Message receivers (email, separated by comma)'),
  89. 'notifyEmailFrom' => Yii::t('FeedbackModule.feedback', 'Email message will be send from'),
  90. 'sendConfirmation' => Yii::t('FeedbackModule.feedback', 'Send notification'),
  91. 'successPage' => Yii::t('FeedbackModule.feedback', 'Page after form was sent'),
  92. 'cacheTime' => Yii::t('FeedbackModule.feedback', 'Counter caching time (seconds)'),
  93. 'mainCategory' => Yii::t('FeedbackModule.feedback', 'Main messages category'),
  94. 'minCaptchaLength' => Yii::t('FeedbackModule.feedback', 'Minimum captcha length'),
  95. 'maxCaptchaLength' => Yii::t('FeedbackModule.feedback', 'Maximum captcha length'),
  96. ];
  97. }
  98. /**
  99. * @return array
  100. */
  101. public function getEditableParams()
  102. {
  103. return [
  104. 'showCaptcha' => $this->getChoice(),
  105. 'sendConfirmation' => $this->getChoice(),
  106. 'notifyEmailFrom',
  107. 'emails',
  108. 'successPage',
  109. 'cacheTime',
  110. 'mainCategory' => CHtml::listData($this->getCategoryList(), 'id', 'name'),
  111. 'minCaptchaLength',
  112. 'maxCaptchaLength',
  113. ];
  114. }
  115. /**
  116. * @return array
  117. */
  118. public function getEditableParamsGroups()
  119. {
  120. return [
  121. 'main' => [
  122. 'label' => Yii::t('FeedbackModule.feedback', 'General module settings'),
  123. 'items' => [
  124. 'sendConfirmation',
  125. 'notifyEmailFrom',
  126. 'emails',
  127. 'successPage',
  128. 'cacheTime',
  129. 'mainCategory',
  130. ],
  131. ],
  132. 'captcha' => [
  133. 'label' => Yii::t('FeedbackModule.feedback', 'Captcha settings'),
  134. 'items' => [
  135. 'showCaptcha',
  136. 'minCaptchaLength',
  137. 'maxCaptchaLength',
  138. ],
  139. ],
  140. ];
  141. }
  142. /**
  143. * @return array|bool
  144. */
  145. public function checkSelf()
  146. {
  147. $messages = [];
  148. if (in_array(FeedbackModule::BACKEND_EMAIL, $this->backEnd) && (!$this->emails || !count(
  149. explode(',', $this->emails)
  150. ))
  151. ) {
  152. $messages[WebModule::CHECK_ERROR][] = [
  153. 'type' => WebModule::CHECK_ERROR,
  154. 'message' => Yii::t(
  155. 'FeedbackModule.feedback',
  156. 'Select feedback message email receivers (emails) {link}',
  157. [
  158. '{link}' => CHtml::link(
  159. Yii::t('FeedbackModule.feedback', 'Change module settings'),
  160. [
  161. '/yupe/backend/modulesettings/',
  162. 'module' => $this->id,
  163. ]
  164. ),
  165. ]
  166. ),
  167. ];
  168. }
  169. if (!$this->notifyEmailFrom) {
  170. $messages[WebModule::CHECK_ERROR][] = [
  171. 'type' => WebModule::CHECK_ERROR,
  172. 'message' => Yii::t(
  173. 'FeedbackModule.feedback',
  174. 'Select email which will be display in "From" field {link}',
  175. [
  176. '{link}' => CHtml::link(
  177. Yii::t('FeedbackModule.feedback', 'Change module settings'),
  178. [
  179. '/yupe/backend/modulesettings/',
  180. 'module' => $this->id,
  181. ]
  182. ),
  183. ]
  184. ),
  185. ];
  186. }
  187. $count = FeedBack::model()->new()->cache($this->cacheTime)->count();
  188. if ($count) {
  189. $messages[WebModule::CHECK_NOTICE][] = [
  190. 'type' => WebModule::CHECK_NOTICE,
  191. 'message' => Yii::t(
  192. 'FeedbackModule.feedback',
  193. 'You have {{count}} ',
  194. [
  195. '{{count}}' => $count,
  196. ]
  197. ).Yii::t(
  198. 'FeedbackModule.feedback',
  199. 'new message |new messages |new messages ',
  200. $count
  201. ).' '.CHtml::link(
  202. Yii::t('FeedbackModule.feedback', 'Show and reply?'),
  203. [
  204. '/feedback/feedbackBackend/index/',
  205. 'order' => 'status.asc',
  206. 'FeedbBack_sort' => 'status',
  207. ]
  208. ),
  209. ];
  210. }
  211. return (isset($messages[WebModule::CHECK_ERROR]) || isset($messages[WebModule::CHECK_NOTICE])) ? $messages : true;
  212. }
  213. /**
  214. * @return string
  215. */
  216. public function getAdminPageLink()
  217. {
  218. return '/feedback/feedbackBackend/index';
  219. }
  220. /**
  221. * @return array
  222. */
  223. public function getNavigation()
  224. {
  225. return [
  226. [
  227. 'icon' => 'fa fa-fw fa-list-alt',
  228. 'label' => Yii::t('FeedbackModule.feedback', 'Messages list'),
  229. 'url' => ['/feedback/feedbackBackend/index'],
  230. ],
  231. [
  232. 'icon' => 'fa fa-fw fa-plus-square',
  233. 'label' => Yii::t('FeedbackModule.feedback', 'Create message'),
  234. 'url' => ['/feedback/feedbackBackend/create'],
  235. ],
  236. [
  237. 'icon' => 'fa fa-fw fa-folder-open',
  238. 'label' => Yii::t('FeedbackModule.feedback', 'Messages categories'),
  239. 'url' => ['/category/categoryBackend/index', 'Category[parent_id]' => (int)$this->mainCategory],
  240. ],
  241. ];
  242. }
  243. /**
  244. * @return string
  245. */
  246. public function getName()
  247. {
  248. return Yii::t('FeedbackModule.feedback', 'Feedback');
  249. }
  250. /**
  251. * @return string
  252. */
  253. public function getCategory()
  254. {
  255. return Yii::t('FeedbackModule.feedback', 'Services');
  256. }
  257. /**
  258. * @return string
  259. */
  260. public function getDescription()
  261. {
  262. return Yii::t('FeedbackModule.feedback', 'Module for feedback management');
  263. }
  264. /**
  265. * @return string
  266. */
  267. public function getVersion()
  268. {
  269. return self::VERSION;
  270. }
  271. /**
  272. * @return string
  273. */
  274. public function getAuthor()
  275. {
  276. return Yii::t('FeedbackModule.feedback', 'yupe team');
  277. }
  278. /**
  279. * @return string
  280. */
  281. public function getAuthorEmail()
  282. {
  283. return Yii::t('FeedbackModule.feedback', 'team@yupe.ru');
  284. }
  285. /**
  286. * @return string
  287. */
  288. public function getUrl()
  289. {
  290. return Yii::t('FeedbackModule.feedback', 'http://yupe.ru');
  291. }
  292. /**
  293. * @return string
  294. */
  295. public function getIcon()
  296. {
  297. return 'fa fa-fw fa-retweet';
  298. }
  299. /**
  300. * Возвращаем статус, устанавливать ли галку для установки модуля в инсталяторе по умолчанию:
  301. *
  302. * @return bool
  303. **/
  304. public function getIsInstallDefault()
  305. {
  306. return true;
  307. }
  308. /**
  309. *
  310. */
  311. public function init()
  312. {
  313. parent::init();
  314. $this->setImport(
  315. [
  316. 'feedback.models.*',
  317. 'feedback.components.*',
  318. 'feedback.events.*',
  319. ]
  320. );
  321. if (!$this->emails) {
  322. $this->emails = Yii::app()->getModule('yupe')->email;
  323. }
  324. }
  325. /**
  326. * @return array
  327. */
  328. public function getTypes()
  329. {
  330. return is_array($this->types) ? $this->types : [];
  331. }
  332. /**
  333. * @return array
  334. */
  335. public function getAuthItems()
  336. {
  337. return [
  338. [
  339. 'name' => 'Feedback.FeedbackManager',
  340. 'description' => Yii::t('FeedbackModule.feedback', 'Manage feedback'),
  341. 'type' => AuthItem::TYPE_TASK,
  342. 'items' => [
  343. [
  344. 'type' => AuthItem::TYPE_OPERATION,
  345. 'name' => 'Feedback.FeedbackBackend.Create',
  346. 'description' => Yii::t('FeedbackModule.feedback', 'Creating feedback'),
  347. ],
  348. [
  349. 'type' => AuthItem::TYPE_OPERATION,
  350. 'name' => 'Feedback.FeedbackBackend.Delete',
  351. 'description' => Yii::t('FeedbackModule.feedback', 'Removing feedback'),
  352. ],
  353. [
  354. 'type' => AuthItem::TYPE_OPERATION,
  355. 'name' => 'Feedback.FeedbackBackend.Index',
  356. 'description' => Yii::t('FeedbackModule.feedback', 'List of feedback'),
  357. ],
  358. [
  359. 'type' => AuthItem::TYPE_OPERATION,
  360. 'name' => 'Feedback.FeedbackBackend.Update',
  361. 'description' => Yii::t('FeedbackModule.feedback', 'Editing feedback'),
  362. ],
  363. [
  364. 'type' => AuthItem::TYPE_OPERATION,
  365. 'name' => 'Feedback.FeedbackBackend.View',
  366. 'description' => Yii::t('FeedbackModule.feedback', 'Viewing feedback'),
  367. ],
  368. [
  369. 'type' => AuthItem::TYPE_OPERATION,
  370. 'name' => 'Feedback.FeedbackBackend.Answer',
  371. 'description' => Yii::t('FeedbackModule.feedback', 'Answer feedback'),
  372. ],
  373. ],
  374. ],
  375. ];
  376. }
  377. }