HomeController.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <?php
  2. namespace App\Http\Controllers;
  3. /*
  4. * 用户认证控制器
  5. */
  6. use App\Models\SiteAlbum;
  7. use App\Models\SiteAlbumFolder;
  8. use App\Models\SiteAlbumLog;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\Auth;
  11. use Illuminate\Support\Facades\Validator;
  12. use ZipArchive;
  13. use Illuminate\Support\Facades\Session;
  14. class HomeController extends Controller
  15. {
  16. /*
  17. * 首页
  18. */
  19. public function index(Request $request)
  20. {
  21. return view('index',['foldersTree' => $this->foldersTree]);
  22. }
  23. public function main(Request $request)
  24. {
  25. return view('main',['foldersTree' => $this->foldersTree]);
  26. }
  27. /*
  28. * 分类列表
  29. */
  30. public function gallery(Request $request)
  31. {
  32. $search = $request->input('search', '');
  33. if ($search) {
  34. $search = '%' . $search . '%';
  35. $albums = SiteAlbum::where('title', 'like', $search)->orderBy('id', 'desc')->get();
  36. $title = '搜索结果';
  37. $folder_id = 0;
  38. $father_id = 0;
  39. if ($albums) {
  40. $albums = $albums->toArray();
  41. }
  42. } else {
  43. $folder_id = $request->input('fid',$this->getFoldersTreeFirstId());
  44. $father_id = $this->getFoldersTreeFatherId($folder_id);
  45. $folder = SiteAlbumFolder::find($folder_id);
  46. $albums = SiteAlbum::where('folder_id', $folder_id)->orderBy('id', 'desc')->get();
  47. $albums = $albums->toArray();
  48. $title = $folder->title;
  49. }
  50. foreach ($albums as $key => $album) {
  51. $cover = json_decode($album['cover']);
  52. foreach ($cover as $k => $v) {
  53. if (strpos($v, 'http') === false && strpos($v, 'https') === false) {
  54. unset($cover[$k]);
  55. }
  56. }
  57. $cover = empty($cover) ? ['/static/images/noimg.jpg'] : $cover;
  58. $albums[$key]['cover'] = $cover;
  59. }
  60. // 面包屑导航
  61. $breadcrumb = getBreadcrumb($folder_id, $this->foldersTree);
  62. $breadcrumb = implode(' / ', $breadcrumb);
  63. return view('gallery',
  64. [
  65. 'foldersTree' => $this->foldersTree,
  66. 'folderName'=> $title,
  67. 'folder_id' => $folder_id,
  68. 'father_id' => $father_id,
  69. 'albums' => $albums,
  70. 'breadcrumb' => $breadcrumb,
  71. ]
  72. );
  73. }
  74. public function detail(Request $request) {
  75. $id = $request->input('id',0);
  76. $album = SiteAlbum::find($id);
  77. $bumFolder = SiteAlbumFolder::where('id', $album->folder_id)->first();
  78. $showTabs = [];
  79. if ($bumFolder) {
  80. $row = json_decode($bumFolder->show_tabs);
  81. foreach ($row as $key => $value) {
  82. $column = '';
  83. $title = '';
  84. switch ($value) {
  85. case '0':
  86. $column = 'cover';
  87. $title = '主图';
  88. break;
  89. case '1':
  90. $column = 'en_detail';
  91. $title = '英文详情';
  92. break;
  93. case '2':
  94. $column = 'cn_detail';
  95. $title = '中文详情';
  96. break;
  97. case '3':
  98. $column = 'video';
  99. $title = '视频';
  100. break;
  101. case '4':
  102. $column = 'poster';
  103. $title = '海报';
  104. break;
  105. case '5':
  106. $column = 'cert';
  107. $title = '证书';
  108. break;
  109. case '6':
  110. $column = 'pdf';
  111. $title = 'PDF';
  112. break;
  113. }
  114. $content = json_decode($album[$column], true);
  115. if (empty($content) == false) {
  116. $showTabs[$key] = ['value'=>$value,'column'=>$column, 'title'=>$title];
  117. }
  118. }
  119. }
  120. return view('gallery-detail',[
  121. 'foldersTree' => $this->foldersTree,
  122. 'album' => $album->toArray(),
  123. 'showTabs' => $showTabs
  124. ]);
  125. }
  126. public function updateLog(Request $request)
  127. {
  128. $losgs = SiteAlbumLog::getFormattedLogs();
  129. return view('update_log',[
  130. 'foldersTree' => $this->foldersTree,
  131. 'logs' => $losgs
  132. ]);
  133. }
  134. /*
  135. * 下载全部
  136. */
  137. public function downloadAll(Request $request)
  138. {
  139. Session::put('downloadAllStatus', '1');
  140. $id = $request->input('id', 0);
  141. $tab = $request->input('tab', 'cover');
  142. $album = SiteAlbum::find($id);
  143. if ($album) {
  144. $album = $album->toArray();
  145. if (isset($album[$tab])) {
  146. $files = json_decode($album[$tab]);
  147. $fileUrls = [];
  148. // 获取所有图片的 URL
  149. foreach ($files as $key => $value) {
  150. $fileUrl = ossUrl($value); // 获取完整的图片 URL
  151. $fileUrls[] = $fileUrl; // 将图片 URL 存入数组
  152. }
  153. // 创建一个临时 ZIP 文件
  154. $zipFileName = 'album_' . $id . '_' . $tab . '.zip';
  155. $zipPath = storage_path('app/' . $zipFileName);
  156. $zip = new ZipArchive;
  157. if ($zip->open($zipPath, ZipArchive::CREATE) === TRUE) {
  158. foreach ($fileUrls as $fileUrl) {
  159. $fileContent = file_get_contents($fileUrl); // 下载图片内容
  160. $fileName = basename($fileUrl); // 获取文件名
  161. $zip->addFromString($fileName, $fileContent); // 将图片添加到 ZIP 文件中
  162. }
  163. $zip->close();
  164. // 提供 ZIP 文件下载
  165. Session::put('downloadAllStatus', '0');
  166. return response()->download($zipPath, $zipFileName)->deleteFileAfterSend(true);
  167. } else {
  168. Session::put('downloadAllStatus', '0');
  169. return response()->json(['error' => '系统正在下载中,请稍后再试','status'=> 500]);
  170. }
  171. } else {
  172. Session::put('downloadAllStatus', '0');
  173. return response()->json(['error' => '未找到指定的 Tab 数据','status'=> 404]);
  174. }
  175. } else {
  176. Session::put('downloadAllStatus', '0');
  177. return response()->json(['error' => '未找到相册','status'=> 404]);
  178. }
  179. }
  180. public function getDownloadAllStatus()
  181. {
  182. $status = Session::get('downloadAllStatus',0);
  183. return response()->json(['status' => $status]);
  184. }
  185. /*
  186. * 更新日志
  187. */
  188. public function nextLog(Request $request)
  189. {
  190. $id = $request->input('id', 0);
  191. $log = SiteAlbumLog::getNextLogEntry($id);
  192. if ($log) {
  193. return response()->json(['status' => 'success', 'data' => $log]);
  194. } else {
  195. return response()->json(['status' => 'error', 'data' => []]);
  196. }
  197. }
  198. //获取分类树父ID
  199. private function getFoldersTreeFatherId($folder_id)
  200. {
  201. foreach ($this->foldersTree as $key => $value) {
  202. $father_id = $value['id'];
  203. if ($folder_id == $value['id']) {
  204. return $father_id;
  205. }
  206. foreach ($value['children'] as $k => $v) {
  207. if ($folder_id == $v['id']) {
  208. return $father_id;
  209. }
  210. foreach ($v['children'] as $kk => $vv) {
  211. if ($folder_id == $vv['id']) {
  212. return $father_id;
  213. }
  214. }
  215. }
  216. }
  217. return 0;
  218. }
  219. //返回分类树第一个无子节点的ID
  220. private function getFoldersTreeFirstId()
  221. {
  222. foreach ($this->foldersTree as $key => $value) {
  223. if (isset($value['children'])) {
  224. foreach ($value['children'] as $k => $v) {
  225. return $v['id'];
  226. }
  227. } else {
  228. return $value['id'];
  229. }
  230. }
  231. return 0;
  232. }
  233. }