AdController.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  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 common\helpers\Cache;
  12. use common\helpers\Form;
  13. use common\helpers\Log;
  14. use common\models\Ad;
  15. use common\models\AdLocation;
  16. use common\models\Article;
  17. use common\models\Countries;
  18. use common\models\forms\AdForm;
  19. use common\models\forms\UploadForm;
  20. use Yii;
  21. use yii\web\UploadedFile;
  22. class AdController extends BaseController
  23. {
  24. public $modelClass = Ad::class;
  25. public function actions() {
  26. return parent::actions(); // TODO: Change the autogenerated stub
  27. }
  28. /**
  29. * 广告位列表
  30. * @return mixed
  31. * @throws \yii\web\HttpException
  32. */
  33. public function actionLocation(){
  34. $condition = '';
  35. $params = [];
  36. $data = AdLocation::lists($condition, $params, [
  37. 'select' => 'ADL.*,ADMC.ADMIN_NAME CREATE_ADMIN_NAME,ADMU.ADMIN_NAME UPDATE_ADMIN_NAME',
  38. 'from' => AdLocation::tableName().' AS ADL',
  39. 'join' => [
  40. ['LEFT JOIN', Admin::tableName() . ' AS ADMC', 'ADMC.ID=ADL.CREATE_ADMIN'],
  41. ['LEFT JOIN', Admin::tableName() . ' AS ADMU', 'ADMU.ID=ADL.UPDATE_ADMIN'],
  42. ],
  43. 'orderBy' => 'ADL.CREATED_AT ASC',
  44. ]);
  45. return static::notice($data);
  46. }
  47. /**
  48. * 列表
  49. * @return mixed
  50. * @throws \yii\web\HttpException
  51. */
  52. public function actionList()
  53. {
  54. $lid = Yii::$app->request->get('lid');
  55. // 如果admin不是超管,只允许查询自己关联的国家
  56. $admin = Admin::findOne(Yii::$app->user->id);
  57. $roleId = $admin->ROLE_ID;
  58. if ($roleId == \Yii::$app->params['superAdminRoleId']) {
  59. $countries = Countries::find()->asArray()->all();
  60. } else {
  61. // 关联国家
  62. $countries = Countries::find()
  63. ->select('COU.ID, COU.CODE, COU.NAME')
  64. ->from(['COU' => Countries::tableName()])
  65. ->join('INNER JOIN', AdminCountry::tableName() . ' AS ADL', 'ADL.COUNTRY_ID = COU.ID')
  66. ->where(['ADL.ADMIN_ID' => $admin->ID])
  67. ->asArray()
  68. ->all();
  69. }
  70. $filter = $this->filterCondition([
  71. 'TITLE' => 'TITLE',
  72. 'COUNTRY_ID' => 'COUNTRY_ID',
  73. ]);
  74. $condition = $filter['condition'];
  75. $params = $filter['params'];
  76. $condition .= ' AND AD.LID=:LID';
  77. $params[':LID']=$lid;
  78. $data = Ad::lists($condition, $params, [
  79. 'select' => 'AD.*,ADC.NAME AS COUNTRY_NAME, ADC.CODE AS COUNTRY_CODE',
  80. 'from' => Ad::tableName().' AS AD',
  81. 'join' => [
  82. ['INNER JOIN', Countries::tableName() . ' AS ADC', 'ADC.ID=AD.COUNTRY_ID'],
  83. ],
  84. 'orderBy' => 'AD.STATUS DESC,AD.SORT DESC,AD.CREATED_AT ASC',
  85. ]);
  86. $data['allLocation'] = AdLocation::getAllLocation();
  87. $data['countries'] = $countries;
  88. $data['allArticle'] = Article::find()
  89. ->from(['ART' => Article::tableName()])
  90. ->select('ART.ID,ART.TITLE')
  91. ->andFilterWhere(['ART.COUNTRY_ID' => array_column($countries, 'ID')])
  92. ->asArray()
  93. ->all();
  94. return static::notice($data);
  95. }
  96. /**
  97. * 添加
  98. * @return mixed
  99. * @throws \yii\web\HttpException
  100. */
  101. public function actionAdd(){
  102. if(Yii::$app->request->isPost) {
  103. return parent::edit(AdForm::class, Yii::t('ctx', 'AdAddedSuccessfully'), null, null, null, function($formModel, $result){
  104. // 添加操作日志
  105. // Log::adminHandle('添加广告:'.$result->TITLE);
  106. });
  107. }
  108. // 获取全部分类
  109. $allLocation = AdLocation::getAllLocation();
  110. $allArticle = Article::findAllAsArray();
  111. return static::notice(['allLocation'=>$allLocation, 'allArticle' => $allArticle]);
  112. }
  113. /**
  114. * 编辑
  115. * @return mixed
  116. * @throws \yii\web\HttpException
  117. */
  118. public function actionEdit(){
  119. $id = Yii::$app->request->get('id');
  120. if(Yii::$app->request->isPost) {
  121. return parent::edit(AdForm::class, Yii::t('ctx', 'EditAdSuccessfully'), null, null, null, function($formModel, $result){
  122. // 添加操作日志
  123. // Log::adminHandle('编辑广告:'.$result->TITLE);
  124. });
  125. }
  126. $oneData = Ad::findOneAsArray(['ID'=>$id]);
  127. // 获取全部分类
  128. $allLocation = AdLocation::getAllLocation();
  129. $allArticle = Article::findAllAsArray();
  130. return static::notice(['oneData'=>$oneData, 'allLocation'=>$allLocation, 'allArticle' => $allArticle]);
  131. }
  132. /**
  133. * 删除
  134. * @return mixed
  135. * @throws \yii\db\Exception
  136. * @throws \yii\web\HttpException
  137. */
  138. public function actionAdDelete(){
  139. $adForm = new AdForm();
  140. $result = static::delete(Ad::class, function ($selected) use ($adForm) {
  141. $adForm->beforeDelete($selected);
  142. }, function ($selected) use ($adForm) {
  143. $adForm->delete($selected);
  144. }, true);
  145. return $result;
  146. }
  147. /**
  148. * 隐藏
  149. * @return mixed
  150. * @throws \yii\db\Exception
  151. * @throws \yii\web\HttpException
  152. */
  153. public function actionAdHide(){
  154. $adForm = new AdForm();
  155. $result = static::hide(Ad::class, 'hide', function ($selected) use ($adForm) {
  156. }, function ($selected) use ($adForm) {
  157. }, true);
  158. return $result;
  159. }
  160. /**
  161. * 取消隐藏
  162. * @return mixed
  163. * @throws \yii\db\Exception
  164. * @throws \yii\web\HttpException
  165. */
  166. public function actionAdUnHide(){
  167. $adForm = new AdForm();
  168. $result = static::hide(Ad::class, 'un-hide', function ($selected) use ($adForm) {
  169. }, function ($selected) use ($adForm) {
  170. }, true);
  171. return $result;
  172. }
  173. /**
  174. * 排序
  175. * @return mixed
  176. * @throws \yii\web\HttpException
  177. */
  178. public function actionSort(){
  179. if(Yii::$app->request->get('id')){
  180. $formModel = new AdForm();
  181. $formModel->scenario = 'sort';
  182. if($formModel->load(Yii::$app->request->get(), '') && $formModel->sortTo()){
  183. return static::notice(Yii::t('ctx', 'successfully'));
  184. } else {
  185. return static::notice(Yii::t('ctx', 'failed'), 400);
  186. }
  187. }
  188. }
  189. /**
  190. * 状态
  191. * @return mixed
  192. * @throws \yii\web\HttpException
  193. */
  194. public function actionStatus(){
  195. if(Yii::$app->request->get('id')){
  196. $formModel = new AdForm();
  197. $formModel->scenario = 'status';
  198. if($formModel->load(Yii::$app->request->get(), '') && $formModel->statusTo()){
  199. return static::notice(Yii::t('ctx', 'successfully'));
  200. } else {
  201. return static::notice(Yii::t('ctx', 'failed'), 400);
  202. }
  203. }
  204. }
  205. /**
  206. * 上传图片
  207. * @return mixed
  208. * @throws \yii\base\Exception
  209. * @throws \yii\db\Exception
  210. * @throws \yii\web\HttpException
  211. */
  212. public function actionUpload(){
  213. if(\Yii::$app->request->isPost){
  214. $formModel = new UploadForm();
  215. $formModel->scenario = 'ad';
  216. $formModel->file = UploadedFile::getInstanceByName('file');
  217. $formModel->token = \Yii::$app->request->request('uploadToken');;
  218. if($formModel->file && $uploader = $formModel->upload()){
  219. return static::notice($uploader->URL);
  220. } else {
  221. return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
  222. }
  223. } else {
  224. $token = Cache::setUploadToken();
  225. return static::notice($token);
  226. }
  227. }
  228. }