Skip to content
Snippets Groups Projects
Select Git revision
  • 74cde461f8dd1b0b83ea9e031822603e9c280b56
  • main default protected
  • step-3263
  • feature/plugins-cli
  • feature/vite
  • step-2484-peerreview
  • biest/issue-5051
  • tests/simplify-jsonapi-tests
  • fix/typo-in-1a70031
  • feature/broadcasting
  • database-seeders-and-factories
  • feature/peer-review-2
  • feature-feedback-jsonapi
  • feature/peerreview
  • feature/balloon-plus
  • feature/stock-images-unsplash
  • tic-2588
  • 5.0
  • 5.2
  • biest/unlock-blocks
  • biest-1514
21 results

AdminCourseFilter.class.php

Blame
  • Forked from Stud.IP / Stud.IP
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    myplugins.php 10.46 KiB
    <?php
    require_once 'market_controller.php';
    
    class MypluginsController extends MarketController
    {
        function before_filter(&$action, &$args)
        {
            parent::before_filter($action, $args);
    
            Navigation::activateItem("/pluginmarket/myplugins");
            $this->set_content_type('text/html;charset=windows-1252');
        }
    
        public function overview_action()
        {
            $this->plugins = MarketPlugin::findBySQL("LEFT JOIN pluginmarket_user_plugins USING (plugin_id) 
                WHERE pluginmarket_plugins.user_id = :user_id 
                    OR pluginmarket_user_plugins.user_id = :user_id
                GROUP BY pluginmarket_plugins.plugin_id
                ORDER BY mkdate DESC", array('user_id' => $GLOBALS['user']->id)
            );
        }
    
        public function addfromzip_action()
        {
            CSRFProtection::verifyUnsafeRequest();
            if (isset($_FILES['release_file']['tmp_name'])) {
                $plugin = new MarketPlugin();
                $plugin->setId($plugin->getNewId());
                $plugin->user_id = $GLOBALS['user']->id;
                $release = new MarketRelease();
                $release->plugin = $plugin;
                $release['user_id'] = $GLOBALS['user']->id;
                //throws Exception on error
                $release->installFile();
                $this->redirect($this->url_for('/overview', ['edit_plugin_id' => $plugin->id]));
            }
        }
    
        public function add_action() {
            $this->marketplugin = new MarketPlugin();
            if (Request::isXhr()) {
                $this->set_layout(null);
            }
    
            $this->render_action("edit");
        }
    
        public function edit_action($plugin_id) {
            $this->marketplugin = new MarketPlugin($plugin_id);
            if (Request::isXhr()) {
                $this->response->add_header('X-Title', _("Plugin bearbeiten"));
                $this->set_layout(null);
            }
        }
    
        public function add_release_action($plugin_id) {
            $this->marketplugin = new MarketPlugin($plugin_id);
            $this->release = new MarketRelease();
            if (Request::isXhr()) {
                $this->response->add_header('X-Title', _("Release hinzufgen"));
                $this->set_layout(null);
            }
            $this->render_action("edit_release");
        }
    
        public function edit_release_action($release_id) {
            $this->release = new MarketRelease($release_id);
            $this->marketplugin = $this->release->plugin;
            if (!$this->marketplugin->isNew() && !$this->marketplugin->isWritable()) {
                throw new AccessDeniedException("Kein Zugriff");
            }
            if (Request::isXhr()) {
                $this->response->add_header('X-Title', _("Release bearbeiten"));
                $this->set_layout(null);
            }
        }
    
        public function edit_images_action($plugin_id) {
            $this->marketplugin = new MarketPlugin($plugin_id);
            if (Request::isXhr()) {
                $this->response->add_header('X-Title', _("Galerie bearbeiten"));
                $this->set_layout(null);
            }
        }
    
        public function save_action() {
            if (!Request::isPost()) {
                throw new Exception("Method not allowed. Try a POST request.");
            }
            $this->marketplugin = new MarketPlugin(Request::option("id") ?: null);
            if (!$this->marketplugin->isNew() && !$this->marketplugin->isWritable()) {
                throw new AccessDeniedException("Kein Zugriff");
            }
    
            if (Request::submitted("data")) {
                $data = Request::getArray("data");
                if (!isset($data["publiclyvisible"])) {
                    $data['publiclyvisible'] = 0;
                }
                if (!isset($data["donationsaccepted"])) {
                    $data['donationsaccepted'] = 0;
                }
                if (!$this->marketplugin->isRootable() && isset($data['deprecated'])) {
                    unset($data['deprecated']);
                }
                if ($this->marketplugin->isRootable() && !isset($data['deprecated'])) {
                    $data['deprecated'] = 0;
                }
                $this->marketplugin->setData($data);
                if ($this->marketplugin->isNew() && (MarketPlugin::findOneByPluginname($this->marketplugin->pluginname) || !strlen(trim($this->marketplugin->pluginname)))) {
                    PageLayout::postError(_("Ein Plugin mit diesem Namen ist schon im Marktplatz vorhanden!"));
                    return $this->redirect($this->url_for('/overview'));
                }
                if ($this->marketplugin->isNew()) {
                    $this->marketplugin['user_id'] = $GLOBALS['user']->id;
                }
            }
    
            $this->marketplugin->store();
            $this->marketplugin->setTags(array_map("trim", explode(",", Request::get("tags"))));
    
            if (Request::submitted("image_order")) {
                $order = array_flip(Request::getArray("image_order"));
                foreach ($this->marketplugin->images as $image) {
                    $image['position'] = $order[$image->getId()] + 1;
                    $image->store();
                }
            }
    
            if (Request::submitted("delete_image")) {
                foreach (Request::getArray("delete_image") as $image_id) {
                    MarketImage::find($image_id)->delete();
                }
            }
    
            if (Request::submitted("edit_images")) {
                $files = $_FILES['new_images'];
                $position = count($this->marketplugin->images);
                foreach ($files['name'] as $index => $name) {
                    if ($files['size'][$index]) {
                        $position++;
                        $file = new MarketImage();
                        $file['plugin_id'] = $this->marketplugin->getId();
                        $file['filename'] = $name;
                        $file['mimetype'] = mime_content_type($files['tmp_name'][$index]);
                        $file['position'] = $position;
                        $file->installFromPath($files['tmp_name'][$index]);
                        $file->store();
                    }
                }
            }
    
            if (Request::submitted("release")) {
                $release_data = Request::getArray("release");
                if ($release_data['type'] !== "zipfile" || $_FILES['release_file']['tmp_name']) {
                    $release = new MarketRelease();
                    if (!isset($release_data['repository_overwrites_descriptionfrom'])) {
                        $release_data['repository_overwrites_descriptionfrom'] = 0;
                    }
                    $release->setData($release_data);
                    $release['plugin_id'] = $this->marketplugin->getId();
                    $release['user_id'] = $GLOBALS['user']->id;
                    try {
                        $release->installFile();
                    } catch (PluginInstallationException $e) {
                        PageLayout::postError($e->getMessage());
    
                        return $this->redirect($this->url_for('/overview'));
                    }
                }
    
            }
    
            foreach (Request::getArray("collaborator") as $user_id) {
                if ($this->marketplugin['user_id'] !== $user_id) {
                    $statement = DBManager::get()->prepare("
                        INSERT IGNORE INTO pluginmarket_user_plugins
                        SET user_id = :user_id,
                            plugin_id = :plugin_id
                    ");
                    $statement->execute(array(
                        'user_id' => $user_id,
                        'plugin_id' => $this->marketplugin->getId()
                    ));
                }
            }
            $this->marketplugin->store();
            foreach (Request::getArray("drop_collaborator") as $user_id) {
                if ($this->marketplugin['user_id'] === $user_id) {
                    if (count($this->marketplugin->more_users)) {
                        $new_boss = $this->marketplugin->more_users[0];
                        $this->marketplugin['user_id'] = $new_boss->getId();
                        $this->marketplugin->store();
                        $statement = DBManager::get()->prepare("
                            DELETE FROM pluginmarket_user_plugins
                            WHERE user_id = :user_id
                                AND plugin_id = :plugin_id
                        ");
                        $statement->execute(array(
                            'user_id' => $new_boss->getId(),
                            'plugin_id' => $this->marketplugin->getId()
                        ));
                    }
                } else {
                    $statement = DBManager::get()->prepare("
                        DELETE FROM pluginmarket_user_plugins
                        WHERE user_id = :user_id
                            AND plugin_id = :plugin_id
                    ");
                    $statement->execute(array(
                        'user_id' => $user_id,
                        'plugin_id' => $this->marketplugin->getId()
                    ));
                }
            }
    
    
            PageLayout::postMessage(MessageBox::success(_("Plugin wurde gespeichert.")));
            $this->redirect('presenting/details/' . $this->marketplugin->getId());
        }
    
        public function save_release_action() {
            if (!Request::isPost()) {
                throw new Exception("Method not allowed. Try a POST request.");
            }
            $this->release = new MarketRelease(Request::option("id"));
            $this->release['plugin_id'] = Request::option("plugin_id");
            $this->release['user_id'] = $GLOBALS['user']->id;
            $this->marketplugin = new MarketPlugin(Request::option("plugin_id") ?: null);
            if (!$this->marketplugin->isNew() && !$this->marketplugin->isWritable()) {
                throw new AccessDeniedException("Kein Zugriff");
            }
            $release_data = Request::getArray("release");
            $this->release->setData($release_data);
            if ($release_data['type'] === "zipfile") {
                $this->release['repository_download_url'] = null;
            }
            if (!Request::get("use_secret")) {
                $this->release['repository_secret'] = null;
            } elseif(!$this->release['repository_secret']) {
                $this->release['repository_secret'] = md5(uniqid());
            }
            $this->release->installFile();
    
            $this->release->store();
    
            PageLayout::postMessage(MessageBox::success(_("Release wurde gespeichert.")));
            $this->redirect('presenting/details/' . $this->release->plugin->getId());
        }
    
    
        public function delete_action($plugin_id) {
            $this->marketplugin = MarketPlugin::find($plugin_id);
            if (Request::submitted('delete') && $this->marketplugin->isWritable()) {
                CSRFProtection::verifyUnsafeRequest();
                $this->marketplugin->delete();
                $this->redirect('myplugins/overview');
            }
        }
    
        public function add_user_action()
        {
            $this->user = User::find(Request::option("user_id"));
            $this->render_template("myplugins/_collaborator.php");
        }
    
    
    }