Skip to content
Snippets Groups Projects
ContributorController.php 5.15 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**
     * @copyright  2020 Podlibre
     * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
     * @link       https://castopod.org/
     */
    
    namespace App\Controllers\Admin;
    
    
    use CodeIgniter\Exceptions\PageNotFoundException;
    
    use CodeIgniter\HTTP\RedirectResponse;
    
    class ContributorController extends BaseController
    
        public function _remap(string $method, string ...$params): mixed
    
            $this->podcast = (new PodcastModel())->getPodcastById((int) $params[0]);
    
                ($this->user = (new UserModel())->getPodcastContributor((int) $params[1], (int) $params[0],)) !== null
    
        public function list(): string
    
            replace_breadcrumb_params([
                0 => $this->podcast->title,
            ]);
    
            return view('admin/contributor/list', $data);
        }
    
    
        public function view(): string
    
                'contributor' => (new UserModel())->getPodcastContributor($this->user->id, $this->podcast->id,),
    
            ];
    
            replace_breadcrumb_params([
                0 => $this->podcast->title,
                1 => $this->user->username,
            ]);
            return view('admin/contributor/view', $data);
    
        public function add(): string
    
            helper('form');
    
            $users = (new UserModel())->findAll();
            $userOptions = array_reduce(
                $users,
                function ($result, $user) {
                    $result[$user->id] = $user->username;
                    return $result;
                },
    
            );
    
            $roles = (new GroupModel())->getContributorRoles();
            $roleOptions = array_reduce(
                $roles,
                function ($result, $role) {
                    $result[$role->id] = lang('Contributor.roles.' . $role->name);
                    return $result;
                },
    
            $data = [
                'podcast' => $this->podcast,
    
                'userOptions' => $userOptions,
                'roleOptions' => $roleOptions,
    
            replace_breadcrumb_params([
                0 => $this->podcast->title,
            ]);
    
            return view('admin/contributor/add', $data);
    
        public function attemptAdd(): RedirectResponse
    
            try {
                (new PodcastModel())->addPodcastContributor(
                    $this->request->getPost('user'),
                    $this->podcast->id,
    
                    ->with('errors', [lang('Contributor.messages.alreadyAddedError')]);
    
            return redirect()->route('contributor-list', [$this->podcast->id]);
    
        public function edit(): string
    
            helper('form');
    
            $roles = (new GroupModel())->getContributorRoles();
            $roleOptions = array_reduce(
                $roles,
                function ($result, $role) {
                    $result[$role->id] = lang('Contributor.roles.' . $role->name);
                    return $result;
                },
    
            $data = [
                'podcast' => $this->podcast,
                'user' => $this->user,
    
                'contributorGroupId' => (new PodcastModel())->getContributorGroupId(
    
                'roleOptions' => $roleOptions,
    
            replace_breadcrumb_params([
                0 => $this->podcast->title,
                1 => $this->user->username,
            ]);
            return view('admin/contributor/edit', $data);
    
        public function attemptEdit(): RedirectResponse
    
            (new PodcastModel())->updatePodcastContributor(
                $this->user->id,
                $this->podcast->id,
    
            return redirect()->route('contributor-list', [$this->podcast->id]);
    
        public function remove(): RedirectResponse
    
            if ($this->podcast->created_by === $this->user->id) {
    
                    ->with('errors', [lang('Contributor.messages.removeOwnerContributorError')]);
    
                ! $podcastModel->removePodcastContributor($this->user->id, $this->podcast->id,)
    
                    ->with('errors', $podcastModel->errors());
    
                    lang('Contributor.messages.removeContributorSuccess', [
    
                        'username' => $this->user->username,
                        'podcastTitle' => $this->podcast->title,