Changes between Version 17 and Version 18 of Имплементација


Ignore:
Timestamp:
11/22/21 17:40:38 (3 years ago)
Author:
151545
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Имплементација

    v17 v18  
    575575
    576576{{{
    577 $mimes = FileType::find("1")->mimes;
     577        $mimes = FileType::find("1")->mimes;
    578578        $maxSize = FileType::find("1")->max_size;
    579579
     
    597597
    598598
     599{{{
     600    // Folders view
     601    Route::group(['middleware' => 'permission:view_all_folders'], function () {
     602        Route::get("/folders", "Dashboard\FoldersController@index")->name("dashboard.folders.index");
     603        Route::get('/folders/{id}/files', 'Dashboard\FoldersController@files')->name('dashboard.folders.files');
     604    });
     605
     606    // Folders manage
     607    Route::group(['middleware' => 'permission:manage_all_folders'], function () {
     608        Route::get("/folders/create", "Dashboard\FoldersController@create")->name("dashboard.folders.create");
     609        Route::post("/folders/store", "Dashboard\FoldersController@store")->name("dashboard.folders.store");
     610        Route::post("/folders/{id}/upload", "Dashboard\FoldersController@uploadFiles")->name("dashboard.folders.uploadFiles");
     611    });
     612}}}
     613''Рути за управување со фолдери''
     614Рутата со име dashboard.folders.files се користи за приказ на сите датотеки за одреден фолдер според query параметарот кој што е id од избраниот фолдер. Рутите create и store се користат за креирање на нов фолдер додека рутата uploadFiles за прикачување на нови датотеки во веќе креиран фолдер.
     615
     616
     617{{{
     618public function index(Request $request)
     619    {
     620        $deptName = "";
     621        $deptCode = "";
     622
     623        if ($request->query('id')) {
     624            $deptName = Department::find($request->query('id'))->getOriginal('name');
     625            $deptCode = Department::find($request->query('id'))->getOriginal('code');
     626            $foldersInDeptSort = Folder::with('department')->when($request->has('id'), function ($query) use ($request) {
     627                $query->where('department_id', $request->query('id'));
     628            });
     629
     630            if ($request->query('sort') == 'newest') {
     631                $folders = $foldersInDeptSort->orderBy('created_at', 'desc')->paginate(12);
     632            }
     633            else if ($request->query('sort') == 'name') {
     634                $folders = $foldersInDeptSort->orderBy('name', 'asc')->paginate(12);
     635            }
     636            else if ($request->query('sort') == 'no_of_files') {
     637                $folders = $foldersInDeptSort->orderBy('no_of_files', 'desc')->paginate(12);
     638            }
     639            else if($request->query('sort') == 'count'){
     640                $total = $foldersInDeptSort->folder->files->count();
     641                $folders = $foldersInDeptSort->orderBy($total, 'asc')->paginate(12);
     642            }
     643            else {
     644                $folders = Folder::where('department_id', $request->query('id'))->paginate(12);
     645            }
     646        } else {
     647            if ($request->query('sort') == 'newest') {
     648                $folders = Folder::orderBy('created_at', 'desc')->paginate(12);
     649            }
     650            else if ($request->query('sort') == 'name') {
     651                $folders = Folder::orderBy('name', 'asc')->paginate(12);
     652            }
     653            else if ($request->query('sort') == 'no_of_files') {
     654                $folders = Folder::orderBy('no_of_files', 'desc')->paginate(12);
     655            }
     656            else if ($request->query('sort') == 'recent') {
     657                $folders = Folder::orderBy('created_at', 'desc')->paginate(12);
     658            } else if ($request->query('search')) {
     659
     660                $result = collect();
     661                $queries = explode(" ", $request->search);
     662                foreach ($queries as $query) {
     663                    $result->push(Folder::where("arch_id", "like", "%{$query}%")->orWhere("name", "like", "%{$query}%")->get());
     664                }
     665                $result = $result->flatten();
     666                $folders = $result;
     667            } else {
     668                $folders = Folder::paginate(12);
     669            }
     670        }
     671
     672        $departments = Department::all();
     673
     674        $diskTotal = disk_total_space('/');
     675        $diskTotalSize = $diskTotal / 1073741824;
     676
     677        $diskFree = disk_free_space('/');
     678        $used = $diskTotal - $diskFree;
     679
     680        $diskUsedSize = $used / 1073741824;
     681        $diskUse1 = round(100 - (($diskUsedSize / $diskTotalSize) * 100));
     682        $diskUse = round(100 - ($diskUse1)) . '%';
     683
     684        return view("dashboard.folders.index")->with([
     685            "folders" => $folders,
     686            "currentUser" => auth()->user(),
     687            "departments" => $departments,
     688            "docsCount" => Department::withCount('folder')->get(),
     689            "totalDocs" => Folder::all()->count(),
     690            "diskTotal" => $diskTotal,
     691            "diskTotalSize" => $diskTotalSize,
     692            "diskUse" => $diskUse,
     693            "diskUsedSize" => $diskUsedSize,
     694            "deptName" => $deptName,
     695            "deptCode" => $deptCode,
     696            "fileTypes" => '.' . implode(',.', explode(',', FileType::find('1')->mimes))
     697        ]);
     698
     699    }
     700}}}
     701''Метод од контролерот FoldersController за приказ на фолдери''\\
     702За разлика од другите index методи тука дополнително правам сортирање по query параметри и ги подредувам фолдерите според селекцијата која ја прави во интерфејсот. Сите податоци се прикажуваат и полнат на истата страница и со таа цел пред да ја враќам колекцијата и да ја прикажам на фронтенд ги правам сите можни проверки за сортирање. Исто така, освен сортирање на главната страница со сите фолдери правам и сортирање на фолдери од еден оддел кога пристапува корисникот до избран оддел преку навигацискиот панел. Исто така правам калкукација на тоа колку простор е зафатен во дискот на сервер преку функцијата disk_total_space која ја враќа вкупната зафатеност на дискот или одредена партиција каде што работи апликацијата. Преку фунцијата paginate() која како параметар прима број на објекти по страница Laravel креира страници кои што исто така преку query параметри прават филтрирање и ги листаат објектите по даден број во различни страници. \\
     703
     704
     705{{{
     706public function create()
     707    {
     708        return view("dashboard.folders.create")->with([
     709            "departments" => Department::all()
     710        ]);
     711    }
     712
     713    public function store(FolderRequest $request)
     714    {
     715        $folder = new Folder();
     716
     717        $existingFolder = Folder::where(['department_id' => $request->department, 'name' => $request->name, 'arch_id' => $request->arch_id])->count();
     718
     719        $existingFolderName = Folder::where(['department_id' => $request->department, 'name' => $request->name])->get();
     720        $existingFolderArchId = Folder::where(['department_id' => $request->department, 'arch_id' => $request->arch_id])->get();
     721
     722        if($existingFolder > 0) {
     723            $folder->version = $existingFolder + 1;
     724        }
     725
     726        //dd($existingFolderName, $existingFolderArchId);
     727
     728        if(($existingFolderName->isNotEmpty() && $existingFolderArchId->isEmpty()) || ($existingFolderName->isEmpty() && $existingFolderArchId->isNotEmpty())) {
     729            Alert::flash("Can't create another version since folder name or archive ID is different", "error");
     730
     731            return redirect()->route("dashboard.folders.index");
     732        }
     733
     734        $department = Department::find($request->department);
     735
     736        $user = auth()->user();
     737
     738        $folder->user()->associate($user);
     739        $folder->department()->associate($department);
     740        $folder->department()->increment('no_of_folders');
     741
     742        $folder->arch_id = $request->arch_id;
     743        $folder->name = $request->name;
     744        $folder->note = $request->note;
     745
     746        $location = $folder->department->location . DIRECTORY_SEPARATOR . $request->name;
     747
     748        if (!Storage::disk('local')->has($location)) {
     749            Storage::disk('local')->makeDirectory($location);
     750        }
     751
     752        $users = User::all();
     753
     754        $folder->location = $location;
     755
     756        $folder->save();
     757
     758        if ($request->has('file_item')) {
     759            foreach ($request->file_item as $file) {
     760                $fileName = $folder->name . '-' . uniqid() . '.' . $file->getClientOriginalExtension();
     761                $file->storeAs($location . DIRECTORY_SEPARATOR, $fileName);
     762                $newFile = new File();
     763                $newFile->name = $fileName;
     764                $newFile->location = $location . DIRECTORY_SEPARATOR . $fileName;
     765                $newFile->folder()->associate($folder);
     766                $newFile->folder()->increment('no_of_files');
     767                $newFile->save();
     768            }
     769        }
     770
     771        Alert::flash("New folder created successfully");
     772
     773        return redirect()->route("dashboard.folders.index");
     774    }
     775}}}
     776''Потребни методи за креирање на нов фолдер''
     777Начинот на креирање на фолдер е идентичен со тој на оддел. За разлика од првиот тука при креирање на избор потребно е фолдерот да има асоциран оддел како и архивски  број според избраниот оддел кој што автоматски ќе му биде препопулиран по избор. Исто така дополнително има можност за прикачување на датотеки кои ќе бидат асоцирани со ново креираниот фолдер. Во кодот може да се забележи дека се проверува дали постои фолдер во база со исто име или архивски број. Доколку постои само едното се враќа порака за грешка и доколку се исти двете полиња се креира нова верзија за веќе постоечкиот фолдер. За секој нов фолдер се креира папка на сервер според локацијата на одделот и во неја ги зачувувам сите додадени датотеки. Архивскиот број се состои од: "код од одделот" + "/" + "внесува корисникот". Истата логика се валидира во класата FolderRequest на следниот начин:
     778
     779
     780{{{
     781public function rules()
     782    {
     783        $rules = [
     784            "arch_id" => [
     785                "required",
     786                function ($attribute, $value, $fail) {
     787
     788                    try {
     789                        $arch_id = $this->request->get('arch_id');
     790
     791                        $deptCode = explode('/', $arch_id)[0];
     792                        $archNum = explode('/', $arch_id)[1];
     793
     794                        if (empty($archNum)) {
     795                            $fail("Please enter folders Archive ID");
     796                        }
     797
     798                        if ($deptCode != Department::find($this->request->get('department'))->code) {
     799                            $fail("Folder Archive ID field format is invalid");
     800                        }
     801                    }
     802                    catch (\Exception $e) {
     803                        $fail("Please enter folders Archive ID");
     804                    }
     805                }
     806            ],
     807            "name" => "required|min:2|max:30",
     808            "department" => "required|integer|exists:departments,id",
     809        ];
     810
     811        $mimes = FileType::find("1")->mimes;
     812        $maxSize = FileType::find("1")->max_size;
     813
     814        if ($this->isMethod("patch")) {
     815            $fileRules = [
     816                "file_item.*" => "mimes:{$mimes}|max:{$maxSize}"
     817            ];
     818        }
     819
     820        else {
     821            $fileRules = [
     822                "file_item.*" => "mimes:{$mimes}|max:{$maxSize}"
     823            ];
     824        }
     825
     826        $rules = array_merge(
     827            $rules,
     828            $fileRules,
     829        );
     830
     831        return $rules;
     832    }
     833}}}
     834''Валидација на полињата за креирање на нов фолдер''\\
     835Тука може да е забележи дека се прави валидација на архивскиот број со цел да се провери дали е тој правилно внесен т.е. дали се состои од кодот на одделот како и внесениот број од страна на корисникот и доколку не е се фрла исклучок. Валидација на низата од датотеки се прави според внесените валидациски правила од страна на администраторот.\\
     836
     837
     838
     839
     840
     841
     842
     843
     844
     845
    599846
    600847