This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | namespace app\modules\seo; |
||
3 | |||
4 | use app\components\BaseModule; |
||
5 | use app\modules\seo\handlers\AnalyticsHandler; |
||
6 | use app\modules\seo\models\Counter; |
||
7 | use app\modules\seo\models\Meta; |
||
8 | use Yii; |
||
9 | use yii\base\BootstrapInterface; |
||
10 | use yii\web\Application; |
||
11 | use yii\web\Controller; |
||
12 | use yii\web\View; |
||
13 | |||
14 | class SeoModule extends BaseModule implements BootstrapInterface |
||
15 | { |
||
16 | const NO_REDIRECT = 0; |
||
17 | const FROM_WWW = 1; |
||
18 | const FROM_WITHOUT_WWW = 2; |
||
19 | public $cacheConfig = [ |
||
20 | 'metaCache' => [ |
||
21 | 'name' => 'metas', |
||
22 | 'expire' => 86400, |
||
23 | ], |
||
24 | 'counterCache' => [ |
||
25 | 'name' => 'counters', |
||
26 | 'expire' => 86400, |
||
27 | ], |
||
28 | 'robotsCache' => [ |
||
29 | 'name' => 'robots', |
||
30 | 'expire' => 86400, |
||
31 | ], |
||
32 | ]; |
||
33 | public $include = []; |
||
34 | public $mainPage = ''; |
||
35 | /** |
||
36 | * @var int type of redirect from WWW or without WWW |
||
37 | */ |
||
38 | public $redirectWWW = self::NO_REDIRECT; |
||
39 | /** |
||
40 | * @var bool if true redirect from url with trailing slash |
||
41 | */ |
||
42 | public $redirectTrailingSlash = false; |
||
43 | |||
44 | public $analytics = [ |
||
45 | 'ecGoogle' => [ |
||
46 | 'active' => 0, |
||
47 | 'currency' => AnalyticsHandler::CURRENCY_MAIN, |
||
48 | ], |
||
49 | 'ecYandex' => [ |
||
50 | 'active' => 0, |
||
51 | 'currency' => AnalyticsHandler::CURRENCY_MAIN, |
||
52 | ], |
||
53 | ]; |
||
54 | |||
55 | /** |
||
56 | * @inheritdoc |
||
57 | */ |
||
58 | public function bootstrap($app) |
||
59 | { |
||
60 | if (is_string($this->include)) { |
||
61 | $this->include = explode(',', $this->include); |
||
62 | } |
||
63 | $app->on( |
||
64 | Application::EVENT_BEFORE_REQUEST, |
||
65 | function () use ($app) { |
||
66 | if ($app->getModule('seo')->redirectWWW != self::NO_REDIRECT) { |
||
67 | self::redirectWWW(); |
||
68 | } |
||
69 | if ($app->getModule('seo')->redirectTrailingSlash == 1) { |
||
70 | self::redirectSlash(); |
||
71 | } |
||
72 | |||
73 | $app->getView()->on(View::EVENT_END_PAGE, [Counter::class, 'renderCountersAtHead'], $this->include); |
||
74 | $app->getView()->on(View::EVENT_BEGIN_BODY, [Counter::class, 'renderCountersAtBeginningOfBody'], $this->include); |
||
75 | $app->getView()->on(View::EVENT_END_BODY, [Counter::class, 'renderCountersAtEndOfBody'], $this->include); |
||
76 | } |
||
77 | ); |
||
78 | |||
79 | // Analytics |
||
80 | $app->on(Application::EVENT_BEFORE_ACTION, [AnalyticsHandler::className(), 'handleBeforeAction']); |
||
0 ignored issues
–
show
|
|||
81 | $app->on(Application::EVENT_BEFORE_ACTION, [Meta::className(), 'registrationMeta']); |
||
0 ignored issues
–
show
The method
yii\base\BaseObject::className() has been deprecated with message: since 2.0.14. On PHP >=5.5, use `::class` instead.
This method has been deprecated. The supplier of the class has supplied an explanatory message. The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead. ![]() |
|||
82 | } |
||
83 | |||
84 | /** |
||
85 | * @inheritdoc |
||
86 | */ |
||
87 | public function behaviors() |
||
88 | { |
||
89 | return [ |
||
90 | 'configurableModule' => [ |
||
91 | 'class' => 'app\modules\config\behaviors\ConfigurableModuleBehavior', |
||
92 | 'configurationView' => '@app/modules/seo/views/configurable/_config', |
||
93 | 'configurableModel' => 'app\modules\seo\models\ConfigConfigurationModel', |
||
94 | ] |
||
95 | ]; |
||
96 | } |
||
97 | |||
98 | /** |
||
99 | * @return array prepared to dropdown list in configurable |
||
0 ignored issues
–
show
|
|||
100 | */ |
||
101 | View Code Duplication | public static function getRedirectTypes() |
|
102 | { |
||
103 | return [ |
||
104 | self::NO_REDIRECT => Yii::t('app', 'No redirect'), |
||
105 | self::FROM_WWW => Yii::t('app', 'Redirect from WWW to without WWW'), |
||
106 | self::FROM_WITHOUT_WWW => Yii::t('app', 'Redirect from without WWW to WWW'), |
||
107 | ]; |
||
108 | } |
||
109 | |||
110 | /** |
||
111 | * If redirectWWW config make 301 redirect to www or not www domain |
||
112 | */ |
||
113 | public static function redirectWWW() |
||
114 | { |
||
115 | $type = Yii::$app->getModule('seo')->redirectWWW; |
||
116 | if ($type != self::NO_REDIRECT) { |
||
117 | $readirArr = [ |
||
118 | View Code Duplication | self::FROM_WITHOUT_WWW => function () { |
|
119 | if (preg_match('#^(http|https):\/\/www\.#i', Yii::$app->request->hostInfo) === 0) { |
||
120 | Yii::$app->response->redirect( |
||
121 | str_replace('://', '://www.', Yii::$app->request->absoluteUrl), |
||
122 | 301 |
||
123 | ); |
||
124 | Yii::$app->end(); |
||
125 | } |
||
126 | }, |
||
127 | View Code Duplication | self::FROM_WWW => function () { |
|
128 | if (preg_match('#^(http|https):\/\/www\.#i', Yii::$app->request->hostInfo) === 1) { |
||
129 | Yii::$app->response->redirect( |
||
130 | str_replace('://www.', '://', Yii::$app->request->absoluteUrl), |
||
131 | 301 |
||
132 | ); |
||
133 | Yii::$app->end(); |
||
134 | } |
||
135 | }, |
||
136 | ]; |
||
137 | $readirArr[$type](); |
||
138 | } |
||
139 | } |
||
140 | |||
141 | /** |
||
142 | * Make redirect from url with trailing slash |
||
143 | */ |
||
144 | public static function redirectSlash() |
||
145 | { |
||
146 | $redirUrl = preg_replace('#^(.*)/$#', '$1', Yii::$app->request->url); |
||
147 | if (!empty($redirUrl) && $redirUrl !== Yii::$app->request->url) { |
||
148 | Yii::$app->response->redirect($redirUrl, 301); |
||
149 | Yii::$app->end(); |
||
150 | } |
||
151 | } |
||
152 | } |
||
153 |
This method has been deprecated. The supplier of the class has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.