AdController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: leo
  5. * Date: 2018/2/24
  6. * Time: 下午12:48
  7. */
  8. namespace backendApi\modules\v1\controllers;
  9. use backendApi\modules\v1\models\Admin;
  10. use backendApi\modules\v1\models\AdminCountry;
  11. use backendApi\modules\v1\models\lists\ad\AdIndexList;
  12. use common\helpers\Cache;
  13. use common\helpers\Form;
  14. use common\helpers\LoggerTool;
  15. use common\models\Ad;
  16. use common\models\AdLocation;
  17. use common\models\Article;
  18. use common\models\Countries;
  19. use common\models\forms\AdForm;
  20. use common\models\forms\UploadForm;
  21. use Yii;
  22. use yii\web\UploadedFile;
  23. class AdController extends BaseController
  24. {
  25. public $modelClass = Ad::class;
  26. public function actions() {
  27. return parent::actions(); // TODO: Change the autogenerated stub
  28. }
  29. /**
  30. * 广告位列表
  31. * @return mixed
  32. * @throws \yii\web\HttpException
  33. */
  34. public function actionLocation(){
  35. $condition = '';
  36. $params = [];
  37. $data = AdLocation::lists($condition, $params, [
  38. 'select' => 'ADL.*,ADMC.ADMIN_NAME CREATE_ADMIN_NAME,ADMU.ADMIN_NAME UPDATE_ADMIN_NAME',
  39. 'from' => AdLocation::tableName().' AS ADL',
  40. 'join' => [
  41. ['LEFT JOIN', Admin::tableName() . ' AS ADMC', 'ADMC.ID=ADL.CREATE_ADMIN'],
  42. ['LEFT JOIN', Admin::tableName() . ' AS ADMU', 'ADMU.ID=ADL.UPDATE_ADMIN'],
  43. ],
  44. 'orderBy' => 'ADL.CREATED_AT ASC',
  45. ]);
  46. return static::notice($data);
  47. }
  48. /**
  49. * 列表
  50. * @return mixed
  51. * @throws \yii\web\HttpException
  52. */
  53. public function actionList()
  54. {
  55. // 获取位置ID
  56. $lid = Yii::$app->request->get('lid', 0);
  57. if (empty($lid)) {
  58. throw new \yii\web\HttpException(400, Yii::t('ctx', 'paramError'));
  59. }
  60. // 如果admin不是超管,只允许查询自己关联的国家
  61. $admin = Admin::findOne(Yii::$app->user->id);
  62. $roleId = $admin->ROLE_ID;
  63. if ($roleId == \Yii::$app->params['superAdminRoleId']) {
  64. $countries = Countries::find()->asArray()->all();
  65. } else {
  66. // 关联国家
  67. $countries = Countries::find()
  68. ->select('COU.ID, COU.CODE, COU.NAME')
  69. ->from(['COU' => Countries::tableName()])
  70. ->join('INNER JOIN', AdminCountry::tableName() . ' AS ADL', 'ADL.COUNTRY_ID = COU.ID')
  71. ->where(['ADL.ADMIN_ID' => $admin->ID])
  72. ->asArray()
  73. ->all();
  74. }
  75. $filter = $this->filterCondition([
  76. 'TITLE' => 'AD.TITLE',
  77. 'COUNTRY_ID' => 'AD.COUNTRY_ID',
  78. 'STATUS' => 'AD.STATUS',
  79. ]);
  80. $condition = $filter['condition'];
  81. $params = $filter['params'];
  82. $condition .= ' AND AD.LID=:LID';
  83. $params[':LID'] = $lid;
  84. $countryIds = array_column($countries, 'ID');
  85. if (!empty($countryIds)) {
  86. $placeholders = [];
  87. foreach ($countryIds as $key => $id) {
  88. $paramName = ':countryId_' . $key;
  89. $placeholders[] = $paramName;
  90. $params[$paramName] = $id;
  91. }
  92. $condition .= ' AND AD.COUNTRY_ID IN (' . implode(',', $placeholders) . ')';
  93. }
  94. $obj = new AdIndexList();
  95. // 直接获取完整的数据,包括columnsShow和filterTypes
  96. $data = $obj->getList(['condition' => $condition, 'params' => $params]);
  97. // 添加额外数据
  98. $data['allLocation'] = AdLocation::getAllLocation();
  99. $data['countries'] = $countries;
  100. $data['allArticle'] = Article::find()
  101. ->from(['ART' => Article::tableName()])
  102. ->select('ART.ID,ART.TITLE')
  103. ->andFilterWhere(['ART.COUNTRY_ID' => array_column($countries, 'ID')])
  104. ->asArray()
  105. ->all();
  106. return static::notice($data);
  107. }
  108. /**
  109. * 添加
  110. * @return mixed
  111. * @throws \yii\web\HttpException
  112. */
  113. public function actionAdd(){
  114. if(Yii::$app->request->isPost) {
  115. return parent::edit(AdForm::class, Yii::t('ctx', 'AdAddedSuccessfully'), null, null, null, function($formModel, $result){
  116. // 添加操作日志
  117. // Log::adminHandle('添加广告:'.$result->TITLE);
  118. });
  119. }
  120. // 获取全部分类
  121. $allLocation = AdLocation::getAllLocation();
  122. // 管理员关联国家的文章
  123. $admin = Admin::findOne(Yii::$app->user->id);
  124. $roleId = $admin->ROLE_ID;
  125. if ($roleId == \Yii::$app->params['superAdminRoleId']) {
  126. $countries = Countries::find()->asArray()->all();
  127. } else {
  128. // 关联国家
  129. $countries = Countries::find()
  130. ->select('COU.ID, COU.CODE, COU.NAME')
  131. ->from(['COU' => Countries::tableName()])
  132. ->join('INNER JOIN', AdminCountry::tableName() . ' AS ADL', 'ADL.COUNTRY_ID = COU.ID')
  133. ->where(['ADL.ADMIN_ID' => $admin->ID])
  134. ->asArray()
  135. ->all();
  136. }
  137. // 关联文章,关联国家表
  138. $allArticle = Article::find()
  139. ->from(['ART' => Article::tableName()])
  140. ->leftJoin(['COU' => Countries::tableName()], 'COU.ID = ART.COUNTRY_ID')
  141. ->select('ART.ID,ART.TITLE,ART.COUNTRY_ID,COU.NAME AS COUNTRY_NAME')
  142. ->andFilterWhere(['ART.COUNTRY_ID' => array_column($countries, 'ID')])
  143. ->asArray()
  144. ->all();
  145. return static::notice([
  146. 'allLocation'=>$allLocation,
  147. 'allArticle' => $allArticle,
  148. 'countries' => $countries,
  149. ]);
  150. }
  151. /**
  152. * 编辑
  153. * @return mixed
  154. * @throws \yii\web\HttpException
  155. */
  156. public function actionEdit(){
  157. $id = Yii::$app->request->get('id');
  158. if(Yii::$app->request->isPost) {
  159. return parent::edit(AdForm::class, Yii::t('ctx', 'EditAdSuccessfully'), null, null, null, function($formModel, $result){
  160. // 添加操作日志
  161. // Log::adminHandle('编辑广告:'.$result->TITLE);
  162. });
  163. }
  164. $oneData = Ad::findOneAsArray(['ID'=>$id]);
  165. // 获取全部分类
  166. $allLocation = AdLocation::getAllLocation();
  167. // 管理员关联国家的文章
  168. $admin = Admin::findOne(Yii::$app->user->id);
  169. $roleId = $admin->ROLE_ID;
  170. if ($roleId == \Yii::$app->params['superAdminRoleId']) {
  171. $countries = Countries::find()->asArray()->all();
  172. } else {
  173. // 关联国家
  174. $countries = Countries::find()
  175. ->select('COU.ID, COU.CODE, COU.NAME')
  176. ->from(['COU' => Countries::tableName()])
  177. ->join('INNER JOIN', AdminCountry::tableName() . ' AS ADL', 'ADL.COUNTRY_ID = COU.ID')
  178. ->where(['ADL.ADMIN_ID' => $admin->ID])
  179. ->asArray()
  180. ->all();
  181. }
  182. // 关联文章,关联国家表
  183. $allArticle = Article::find()
  184. ->from(['ART' => Article::tableName()])
  185. ->leftJoin(['COU' => Countries::tableName()], 'COU.ID = ART.COUNTRY_ID')
  186. ->select('ART.ID,ART.TITLE,ART.COUNTRY_ID,COU.NAME AS COUNTRY_NAME')
  187. ->andFilterWhere(['ART.COUNTRY_ID' => array_column($countries, 'ID')])
  188. ->asArray()
  189. ->all();
  190. return static::notice([
  191. 'oneData' => $oneData,
  192. 'allLocation' => $allLocation,
  193. 'allArticle' => $allArticle,
  194. 'countries' => $countries,
  195. ]);
  196. }
  197. /**
  198. * 删除
  199. * @return mixed
  200. * @throws \yii\db\Exception
  201. * @throws \yii\web\HttpException
  202. */
  203. public function actionAdDelete(){
  204. $adForm = new AdForm();
  205. $result = static::delete(Ad::class, function ($selected) use ($adForm) {
  206. $adForm->beforeDelete($selected);
  207. }, function ($selected) use ($adForm) {
  208. $adForm->delete($selected);
  209. }, true);
  210. return $result;
  211. }
  212. /**
  213. * 隐藏
  214. * @return mixed
  215. * @throws \yii\db\Exception
  216. * @throws \yii\web\HttpException
  217. */
  218. public function actionAdHide(){
  219. $adForm = new AdForm();
  220. $result = static::hide(Ad::class, 'hide', function ($selected) use ($adForm) {
  221. }, function ($selected) use ($adForm) {
  222. }, true);
  223. return $result;
  224. }
  225. /**
  226. * 取消隐藏
  227. * @return mixed
  228. * @throws \yii\db\Exception
  229. * @throws \yii\web\HttpException
  230. */
  231. public function actionAdUnHide(){
  232. $adForm = new AdForm();
  233. $result = static::hide(Ad::class, 'un-hide', function ($selected) use ($adForm) {
  234. }, function ($selected) use ($adForm) {
  235. }, true);
  236. return $result;
  237. }
  238. /**
  239. * 排序
  240. * @return mixed
  241. * @throws \yii\web\HttpException
  242. */
  243. public function actionSort(){
  244. if(Yii::$app->request->get('id')){
  245. $formModel = new AdForm();
  246. $formModel->scenario = 'sort';
  247. if($formModel->load(Yii::$app->request->get(), '') && $formModel->sortTo()){
  248. return static::notice(Yii::t('ctx', 'successfully'));
  249. } else {
  250. return static::notice(Yii::t('ctx', 'failed'), 400);
  251. }
  252. }
  253. }
  254. /**
  255. * 状态
  256. * @return mixed
  257. * @throws \yii\web\HttpException
  258. */
  259. public function actionStatus(){
  260. if(Yii::$app->request->get('id')){
  261. $formModel = new AdForm();
  262. $formModel->scenario = 'status';
  263. if($formModel->load(Yii::$app->request->get(), '') && $formModel->statusTo()){
  264. return static::notice(Yii::t('ctx', 'successfully'));
  265. } else {
  266. return static::notice(Yii::t('ctx', 'failed'), 400);
  267. }
  268. }
  269. }
  270. /**
  271. * 上传图片
  272. * @return mixed
  273. * @throws \yii\base\Exception
  274. * @throws \yii\db\Exception
  275. * @throws \yii\web\HttpException
  276. */
  277. public function actionUpload(){
  278. if(\Yii::$app->request->isPost){
  279. $formModel = new UploadForm();
  280. $formModel->scenario = 'ad';
  281. $formModel->file = UploadedFile::getInstanceByName('file');
  282. $formModel->token = \Yii::$app->request->request('uploadToken');;
  283. if($formModel->file && $uploader = $formModel->upload()){
  284. return static::notice($uploader->URL);
  285. } else {
  286. return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
  287. }
  288. } else {
  289. $token = Cache::setUploadToken();
  290. return static::notice($token);
  291. }
  292. }
  293. public function actionCountry()
  294. {
  295. $admin = Admin::findOne(Yii::$app->user->id);
  296. $roleId = $admin->ROLE_ID;
  297. if ($roleId == \Yii::$app->params['superAdminRoleId']) {
  298. $countries = Countries::find()->asArray()->all();
  299. } else {
  300. // 关联国家
  301. $countries = Countries::find()
  302. ->select('COU.ID, COU.CODE, COU.NAME')
  303. ->from(['COU' => Countries::tableName()])
  304. ->join('INNER JOIN', AdminCountry::tableName() . ' AS ADL', 'ADL.COUNTRY_ID = COU.ID')
  305. ->where(['ADL.ADMIN_ID' => $admin->ID])
  306. ->asArray()
  307. ->all();
  308. }
  309. return static::notice($countries);
  310. }
  311. }