Add portfolio tool - refs BT#14056 (#2455)
	
		
	
				
					
				
			
							parent
							
								
									1f1f7d774d
								
							
						
					
					
						commit
						f2c684e43a
					
				@ -1,19 +0,0 @@ | 
				
			|||||||
<?php | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* | 
					 | 
				
			||||||
 * This file contains the portfolios configuration. | 
					 | 
				
			||||||
 *  | 
					 | 
				
			||||||
 * Portfolios are external applicatoins used to display and share files. The | 
					 | 
				
			||||||
 * portfolio configuration set up where files can be sent. | 
					 | 
				
			||||||
 *  | 
					 | 
				
			||||||
 * @see \Portfolio | 
					 | 
				
			||||||
 */ | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$portfolios = array(); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//$_mahara_portfolio = new Portfolio\Mahara('http(s)://...'); | 
					 | 
				
			||||||
//$portfolios[] = $_mahara_portfolio; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//$download_portfolio = new Portfolio\Download(); | 
					 | 
				
			||||||
//$download_portfolio->set_title(get_lang('Download')); | 
					 | 
				
			||||||
//$portfolios[] = $download_portfolio; | 
					 | 
				
			||||||
@ -1,653 +0,0 @@ | 
				
			|||||||
<?php | 
					 | 
				
			||||||
/* For licensing terms, see /license.txt */ | 
					 | 
				
			||||||
/* | 
					 | 
				
			||||||
 * This file contains several classes related to portfolios management to avoid | 
					 | 
				
			||||||
 * having too much files under the lib/. | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 * Once external libraries are moved to their own directory it would be worth | 
					 | 
				
			||||||
 * moving them to their own files under a common portfolio directory. | 
					 | 
				
			||||||
 * @package chamilo.portfolio | 
					 | 
				
			||||||
 * @deprecated | 
					 | 
				
			||||||
 */ | 
					 | 
				
			||||||
/** | 
					 | 
				
			||||||
 * Init. | 
					 | 
				
			||||||
 */ | 
					 | 
				
			||||||
use Model\Course; | 
					 | 
				
			||||||
use Model\Document; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** | 
					 | 
				
			||||||
 * A portfolio is used to present content to other people. In most cases it is | 
					 | 
				
			||||||
 * an external application. | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 * From the application point of view it is an end point to which the user can send | 
					 | 
				
			||||||
 * content. | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 * Available portfolios are configured in /main/inc/config/portfolio.conf.php | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 * The Portfolio class serves as an entry point to other portfolio components: | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 *      - portfolio controller | 
					 | 
				
			||||||
 *      - portfolio share button | 
					 | 
				
			||||||
 *      - portfolio action | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 * Note: | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 * @author Laurent Opprecht <laurent@opprecht.info> for the Univesity of Geneva | 
					 | 
				
			||||||
 */ | 
					 | 
				
			||||||
//class Portfolio extends Portfolio\Portfolio | 
					 | 
				
			||||||
class Portfolio | 
					 | 
				
			||||||
{ | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Returns all portfolios available. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return array | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public static function all() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        $conf = api_get_path(SYS_CODE_PATH).'inc/conf/portfolio.conf.php'; | 
					 | 
				
			||||||
        if (!is_readable($conf)) { | 
					 | 
				
			||||||
            return []; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
        include $conf; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return isset($portfolios) ? $portfolios : []; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Returns a portfolio from its name. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @param string $name | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return Portfolio\Portfolio | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public static function get($name) | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        $items = self::all(); | 
					 | 
				
			||||||
        foreach ($items as $item) { | 
					 | 
				
			||||||
            if ($item->get_name() == $name) { | 
					 | 
				
			||||||
                return $item; | 
					 | 
				
			||||||
            } | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return Portfolio\Portfolio::none(); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * True if portfolios are enabled. False otherwise. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return bool | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public static function is_enabled() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        if (api_is_anonymous()) { | 
					 | 
				
			||||||
            return false; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
        $user_id = api_get_user_id(); | 
					 | 
				
			||||||
        if (empty($user_id)) { | 
					 | 
				
			||||||
            return false; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
        $portfolios = self::all(); | 
					 | 
				
			||||||
        if (count($portfolios) == 0) { | 
					 | 
				
			||||||
            return false; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return true; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * The controller for portfolio. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return \PortfolioController | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public static function controller() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return PortfolioController::instance(); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Returns a share component/button. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @param string $tool | 
					 | 
				
			||||||
     * @param int    $id | 
					 | 
				
			||||||
     * @param array  $attributes | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return \PortfolioShare | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public static function share($tool, $id, $attributes = []) | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return PortfolioShare::factory($tool, $id, $attributes); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Returns the list of actions. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return array | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public static function actions() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return PortfolioController::actions(); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Returns a temporary url to download files and/or folders. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @param string|array $ids | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return string | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public static function download_url($ids, $tool) | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        $ids = is_array($ids) ? implode(',', $ids) : $ids; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $params = Uri::course_params(); | 
					 | 
				
			||||||
        $params['id'] = $ids; | 
					 | 
				
			||||||
        $params[KeyAuth::PARAM_ACCESS_TOKEN] = KeyAuth::create_temp_token(); | 
					 | 
				
			||||||
        $result = Uri::url("/main/$tool/file.php", $params, false); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return $result; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** | 
					 | 
				
			||||||
 * The portfolio controller. Responsible to dispatch/process portfolio actions. | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 * Usage: | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 *      if(Porfolio::contoller()->accept()){ | 
					 | 
				
			||||||
 *          Portfolio::controller()->run(); | 
					 | 
				
			||||||
 *      } | 
					 | 
				
			||||||
 */ | 
					 | 
				
			||||||
class PortfolioController | 
					 | 
				
			||||||
{ | 
					 | 
				
			||||||
    const PARAM_ACTION = 'action'; | 
					 | 
				
			||||||
    const PARAM_ID = 'id'; | 
					 | 
				
			||||||
    const PARAM_TOOL = 'tool'; | 
					 | 
				
			||||||
    const PARAM_PORTFOLIO = 'portfolio'; | 
					 | 
				
			||||||
    const PARAM_CONTROLLER = 'controller'; | 
					 | 
				
			||||||
    const PARAM_SECURITY_TOKEN = 'sec_token'; | 
					 | 
				
			||||||
    const ACTION_SHARE = 'share'; | 
					 | 
				
			||||||
    const NAME = 'portfolio'; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    protected $message = ''; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    protected function __construct() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * @return \PortfolioController | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public static function instance() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        static $result = null; | 
					 | 
				
			||||||
        if (empty($result)) { | 
					 | 
				
			||||||
            $result = new self(); | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return $result; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public static function portfolios() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return Portfolio::all(); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * List of actions for the SortableTable. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return array | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public static function actions() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        static $result = null; | 
					 | 
				
			||||||
        if (!is_null($result)) { | 
					 | 
				
			||||||
            return $result; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $items = self::portfolios(); | 
					 | 
				
			||||||
        if (empty($items)) { | 
					 | 
				
			||||||
            $result = []; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            return $result; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $result = []; | 
					 | 
				
			||||||
        foreach ($items as $item) { | 
					 | 
				
			||||||
            $action = PortfolioBulkAction::create($item); | 
					 | 
				
			||||||
            $result[] = $action; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return $result; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Returns true if the controller accept to process the current request. | 
					 | 
				
			||||||
     * Returns false otherwise. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return bool | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function accept() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        if (!Portfolio::is_enabled()) { | 
					 | 
				
			||||||
            return false; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
        $actions = self::actions(); | 
					 | 
				
			||||||
        foreach ($actions as $action) { | 
					 | 
				
			||||||
            if ($action->accept()) { | 
					 | 
				
			||||||
                return true; | 
					 | 
				
			||||||
            } | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ($this->get_controller() != self::NAME) { | 
					 | 
				
			||||||
            return false; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
        if (!Security::check_token('get')) { | 
					 | 
				
			||||||
            return false; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
        $id = $this->get_id(); | 
					 | 
				
			||||||
        if (empty($id)) { | 
					 | 
				
			||||||
            return false; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return $this->get_action() == self::ACTION_SHARE; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Returns the value of the current controller request parameters. That is | 
					 | 
				
			||||||
     * the name of the controller which shall handle the current request. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return string | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function get_controller() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return Request::get(self::PARAM_CONTROLLER); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Returns the value of the action parameter. That is which action shall be | 
					 | 
				
			||||||
     * performed. That is share to send an object to a portfolio. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return string | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function get_action() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        $result = Request::get(self::PARAM_ACTION); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return ($result == self::ACTION_SHARE) ? self::ACTION_SHARE : ''; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Returns the value of the id parameter: id of object to send. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return int | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function get_id() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return (int) Request::get(self::PARAM_ID); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * The course code (id) to which the object belongs. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return string | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function course_code() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return ChamiloSession::instance()->course()->code(); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * The name of the porfolio where to send. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return type | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function get_portfolio() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return Request::get(self::PARAM_PORTFOLIO); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Name of the tool: document, work, etc. Defaults to current_course_tool. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @global string $current_course_tool | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return string | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function get_tool() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        global $current_course_tool; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return Request::get(self::PARAM_TOOL, $current_course_tool); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Returns the end user message after running the controller.. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return string | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function message() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return $this->message; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Execute the controller action as required. If a registered action accept | 
					 | 
				
			||||||
     * the current request the controller calls it. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * If not action is accept the current request and current action is "share" | 
					 | 
				
			||||||
     * the controller execute the "send to portfolio" action | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return PortfolioController | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function run() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        if (!$this->accept()) { | 
					 | 
				
			||||||
            return $this; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $actions = self::actions(); | 
					 | 
				
			||||||
        foreach ($actions as $action) { | 
					 | 
				
			||||||
            if ($action->accept()) { | 
					 | 
				
			||||||
                return $action->run(); | 
					 | 
				
			||||||
            } | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $action = $this->get_action(); | 
					 | 
				
			||||||
        if ($action == self::ACTION_SHARE) { | 
					 | 
				
			||||||
            $user = new \Portfolio\User(); | 
					 | 
				
			||||||
            $user->email = Chamilo::user()->email(); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            $tool = $this->get_tool(); | 
					 | 
				
			||||||
            $id = $this->get_id(); | 
					 | 
				
			||||||
            $url = Portfolio::download_url($id, $tool); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            $artefact = new Portfolio\Artefact($url); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            $name = $this->get_portfolio(); | 
					 | 
				
			||||||
            $result = Portfolio::get($name)->send($user, $artefact); | 
					 | 
				
			||||||
            if ($result) { | 
					 | 
				
			||||||
                $this->message = Display::return_message(get_lang('SentSuccessfully'), 'normal'); | 
					 | 
				
			||||||
            } else { | 
					 | 
				
			||||||
                $this->message = Display::return_message(get_lang('SentFailed'), 'error'); | 
					 | 
				
			||||||
            } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            return $this; | 
					 | 
				
			||||||
        } else { | 
					 | 
				
			||||||
            $this->message = ''; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return $this; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** | 
					 | 
				
			||||||
 * This component is used to display a "send to portfolio" button for a specific | 
					 | 
				
			||||||
 * object. | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 * Note that the component implement the __toString() magic method and can be | 
					 | 
				
			||||||
 * therefore used in situation where a string is expected: for ex echo $button. | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 * Usage | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 *      $button = Portfolio::share(...); | 
					 | 
				
			||||||
 *      echo $button; | 
					 | 
				
			||||||
 */ | 
					 | 
				
			||||||
class PortfolioShare | 
					 | 
				
			||||||
{ | 
					 | 
				
			||||||
    protected $id = 0; | 
					 | 
				
			||||||
    protected $attributes = []; | 
					 | 
				
			||||||
    protected $tool = ''; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public function __construct($tool, $id, $attributes = []) | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        $this->tool = $tool; | 
					 | 
				
			||||||
        $this->id = (int) $id; | 
					 | 
				
			||||||
        $this->attributes = $attributes; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public function __toString() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return $this->display(); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Create a "send to portfolio" button. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @param string $tool       the name of the tool: document, work | 
					 | 
				
			||||||
     * @param int    $c_id       The id of the course | 
					 | 
				
			||||||
     * @param int    $id         The id of the object | 
					 | 
				
			||||||
     * @param array  $attributes Html attributes | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return \PortfolioShare | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public static function factory($tool, $id, $attributes = []) | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        $result = new self($tool, $id, $attributes); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return $result; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Returns the current secuirty token. Used to avoid see surfing attacks. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return type | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public static function security_token() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        static $result = null; | 
					 | 
				
			||||||
        if (empty($result)) { | 
					 | 
				
			||||||
            $result = Security::get_token(); | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return $result; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Object id to send. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return int | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function get_id() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return $this->id; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Object id to send. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return int | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function get_c_id() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return $this->c_id; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Html attributes. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return array | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function get_attributes() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return $this->attributes; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Name of the tool. I.e. the type of the id parameter. Can be document, work. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return string | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function get_tool() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return $this->tool; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * Display the component. | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return string | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function display() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        if (!Portfolio::is_enabled()) { | 
					 | 
				
			||||||
            return ''; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
        $id = $this->id; | 
					 | 
				
			||||||
        $tool = $this->tool; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $attributes = $this->attributes; | 
					 | 
				
			||||||
        $attributes['z-index'] = 100000; | 
					 | 
				
			||||||
        $s = ' '; | 
					 | 
				
			||||||
        foreach ($attributes as $key => $value) { | 
					 | 
				
			||||||
            $s .= $key.'="'.$value.'" '; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $result = []; | 
					 | 
				
			||||||
        $result[] = '<span '.$s.' >'; | 
					 | 
				
			||||||
        $result[] = '<span class="dropdown" >'; | 
					 | 
				
			||||||
        $result[] = '<a href="#" data-toggle="dropdown" class="dropdown-toggle">'; | 
					 | 
				
			||||||
        $result[] = Display::return_icon('document_send.png', get_lang('Send'), [], ICON_SIZE_SMALL).'<b class="caret"></b>'; | 
					 | 
				
			||||||
        $result[] = '</a>'; | 
					 | 
				
			||||||
        $result[] = '<ul class="dropdown-menu">'; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $portfolios = Portfolio::all(); | 
					 | 
				
			||||||
        foreach ($portfolios as $portfolio) { | 
					 | 
				
			||||||
            $parameters = Uri::course_params(); | 
					 | 
				
			||||||
            $parameters[PortfolioController::PARAM_ACTION] = PortfolioController::ACTION_SHARE; | 
					 | 
				
			||||||
            $parameters[PortfolioController::PARAM_CONTROLLER] = PortfolioController::NAME; | 
					 | 
				
			||||||
            $parameters[PortfolioController::PARAM_PORTFOLIO] = $portfolio->get_name(); | 
					 | 
				
			||||||
            $parameters[PortfolioController::PARAM_SECURITY_TOKEN] = self::security_token(); | 
					 | 
				
			||||||
            $parameters[PortfolioController::PARAM_TOOL] = $this->get_tool(); | 
					 | 
				
			||||||
            $parameters[PortfolioController::PARAM_ID] = $id; | 
					 | 
				
			||||||
            $parameters[PortfolioController::PARAM_TOOL] = $tool; | 
					 | 
				
			||||||
            $url = api_get_path(WEB_CODE_PATH).'portfolio/share.php?'; | 
					 | 
				
			||||||
            $result[] = '<li>'; | 
					 | 
				
			||||||
            $result[] = '<a href="'.$url.'">'.$portfolio->get_title().'</a>'; | 
					 | 
				
			||||||
            $result[] = '</li>'; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
        $result[] = '</ul>'; | 
					 | 
				
			||||||
        $result[] = '</span>'; | 
					 | 
				
			||||||
        $result[] = '</span>'; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return implode("\n", $result); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** | 
					 | 
				
			||||||
 * A "send to this portfolio" action. Actions are used by the SortableTable to | 
					 | 
				
			||||||
 * perform actions on a set of objects. An action is composed of. | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 *      - a name | 
					 | 
				
			||||||
 *      - a title (displayed to the user) | 
					 | 
				
			||||||
 *      - code to execute | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 * Usage: | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 *       $form_actions = array(); | 
					 | 
				
			||||||
 *       $form_action['...'] = get_lang('...'); | 
					 | 
				
			||||||
 *       $portfolio_actions = Portfolio::actions(); | 
					 | 
				
			||||||
 *       foreach($portfolio_actions as $action){ | 
					 | 
				
			||||||
 *           $form_action[$action->get_name()] = $action->get_title(); | 
					 | 
				
			||||||
 *       } | 
					 | 
				
			||||||
 *       $table->set_form_actions($form_action, 'path'); | 
					 | 
				
			||||||
 * | 
					 | 
				
			||||||
 * @see SortableTable | 
					 | 
				
			||||||
 */ | 
					 | 
				
			||||||
class PortfolioBulkAction | 
					 | 
				
			||||||
{ | 
					 | 
				
			||||||
    protected $name = ''; | 
					 | 
				
			||||||
    protected $title = ''; | 
					 | 
				
			||||||
    protected $portfolio = null; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * @param \Portfolio\Portfolio $portfolio | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function __construct($portfolio) | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        $this->name = md5(__CLASS__).'_'.$portfolio->get_name(); | 
					 | 
				
			||||||
        $this->title = $portfolio->get_title() ? $portfolio->get_title() : get_lang('SendTo').' '.$portfolio->get_name(); | 
					 | 
				
			||||||
        $this->portfolio = $portfolio; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * @param \Portfolio\Portfolio $portfolio | 
					 | 
				
			||||||
     * | 
					 | 
				
			||||||
     * @return PortfolioBulkAction | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public static function create($portfolio) | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return new self($portfolio); | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public function get_name() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return $this->name; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public function get_title() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return $this->title; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /** | 
					 | 
				
			||||||
     * @return \Portfolio\Portfolio | 
					 | 
				
			||||||
     */ | 
					 | 
				
			||||||
    public function get_portfolio() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        return $this->portfolio; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public function accept() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        $name = $this->get_name(); | 
					 | 
				
			||||||
        $action = Request::get(PortfolioController::PARAM_ACTION); | 
					 | 
				
			||||||
        if ($name != $action) { | 
					 | 
				
			||||||
            return false; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
        $pathes = Request::get('path'); | 
					 | 
				
			||||||
        if (empty($pathes)) { | 
					 | 
				
			||||||
            return false; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $course = Course::current(); | 
					 | 
				
			||||||
        if (empty($course)) { | 
					 | 
				
			||||||
            return false; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return true; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public function run() | 
					 | 
				
			||||||
    { | 
					 | 
				
			||||||
        if (!$this->accept()) { | 
					 | 
				
			||||||
            return false; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $course = Course::current(); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $pathes = Request::get('path'); | 
					 | 
				
			||||||
        $pathes = is_array($pathes) ? $pathes : [$pathes]; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $ids = []; | 
					 | 
				
			||||||
        foreach ($pathes as $path) { | 
					 | 
				
			||||||
            $doc = Document::get_by_path($course, $path); | 
					 | 
				
			||||||
            if ($doc) { | 
					 | 
				
			||||||
                $ids[] = $doc->get_id(); | 
					 | 
				
			||||||
            } | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
        if (empty($ids)) { | 
					 | 
				
			||||||
            return false; | 
					 | 
				
			||||||
        } | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $user = new \Portfolio\User(); | 
					 | 
				
			||||||
        $user->email = Chamilo::user()->email(); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $artefact = new Portfolio\Artefact(); | 
					 | 
				
			||||||
        $artefact->url = Portfolio::download_url($ids); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $portfolio = $this->get_portfolio(); | 
					 | 
				
			||||||
        $result = $portfolio->send($user, $artefact); | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return $result; | 
					 | 
				
			||||||
    } | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
@ -1,5 +1,226 @@ | 
				
			|||||||
<?php | 
					<?php | 
				
			||||||
/** | 
					/** | 
				
			||||||
 * @license see /license.txt | 
					 * @license see /license.txt | 
				
			||||||
 * @author Laurent Opprecht <laurent@opprecht.info> for the Univesity of Geneva | 
					 | 
				
			||||||
 */ | 
					 */ | 
				
			||||||
 | 
					use Chamilo\CoreBundle\Entity\Course; | 
				
			||||||
 | 
					use Chamilo\CoreBundle\Entity\Portfolio; | 
				
			||||||
 | 
					use Chamilo\CoreBundle\Entity\PortfolioCategory; | 
				
			||||||
 | 
					use Chamilo\CoreBundle\Entity\Session; | 
				
			||||||
 | 
					use Chamilo\UserBundle\Entity\User; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					require_once __DIR__.'/../inc/global.inc.php'; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					api_block_anonymous_users(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (false === api_get_configuration_value('allow_portfolio_tool')) { | 
				
			||||||
 | 
					    api_not_allowed(true); | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$em = Database::getManager(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$currentUserId = api_get_user_id(); | 
				
			||||||
 | 
					$userId = isset($_GET['user']) ? (int) $_GET['user'] : $currentUserId; | 
				
			||||||
 | 
					/** @var User $user */ | 
				
			||||||
 | 
					$user = api_get_user_entity($userId); | 
				
			||||||
 | 
					/** @var Course $course */ | 
				
			||||||
 | 
					$course = $em->find('ChamiloCoreBundle:Course', api_get_course_int_id()); | 
				
			||||||
 | 
					/** @var Session $session */ | 
				
			||||||
 | 
					$session = $em->find('ChamiloCoreBundle:Session', api_get_session_id()); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$action = isset($_GET['action']) ? $_GET['action'] : 'list'; | 
				
			||||||
 | 
					$cidreq = api_get_cidreq(); | 
				
			||||||
 | 
					$baseUrl = api_get_self().'?'.($cidreq ? $cidreq.'&' : ''); | 
				
			||||||
 | 
					$allowEdit = $currentUserId == $user->getId(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (isset($_GET['preview'])) { | 
				
			||||||
 | 
					    $allowEdit = false; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$toolName = get_lang('Portfolio'); | 
				
			||||||
 | 
					$actions = []; | 
				
			||||||
 | 
					$content = ''; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * Check if the portfolio item or category is valid for the current user. | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * @param $item | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * @return bool | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					$isValid = function ($item) use ($user, $course, $session) { | 
				
			||||||
 | 
					    if (!$item) { | 
				
			||||||
 | 
					        return false; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (get_class($item) == Portfolio::class) { | 
				
			||||||
 | 
					        if ($session && $item->getSession()->getId() != $session->getId()) { | 
				
			||||||
 | 
					            return false; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($course && $item->getCourse()->getId() != $course->getId()) { | 
				
			||||||
 | 
					            return false; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ($item->getUser()->getId() != $user->getId()) { | 
				
			||||||
 | 
					        return false; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return true; | 
				
			||||||
 | 
					}; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					switch ($action) { | 
				
			||||||
 | 
					    case 'add_category': | 
				
			||||||
 | 
					        require 'add_category.php'; | 
				
			||||||
 | 
					        break; | 
				
			||||||
 | 
					    case 'edit_category': | 
				
			||||||
 | 
					        $id = isset($_GET['id']) ? (int) $_GET['id'] : 0; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!$id) { | 
				
			||||||
 | 
					            break; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /** @var PortfolioCategory $category */ | 
				
			||||||
 | 
					        $category = $em->find('ChamiloCoreBundle:PortfolioCategory', $id); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!$isValid($category)) { | 
				
			||||||
 | 
					            api_not_allowed(true); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        require 'edit_category.php'; | 
				
			||||||
 | 
					        break; | 
				
			||||||
 | 
					    case 'hide_category': | 
				
			||||||
 | 
					    case 'show_category': | 
				
			||||||
 | 
					        $id = isset($_GET['id']) ? (int) $_GET['id'] : 0; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!$id) { | 
				
			||||||
 | 
					            break; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /** @var PortfolioCategory $category */ | 
				
			||||||
 | 
					        $category = $em->find('ChamiloCoreBundle:PortfolioCategory', $id); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!$isValid($category)) { | 
				
			||||||
 | 
					            api_not_allowed(true); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $category->setIsVisible(!$category->isVisible()); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $em->persist($category); | 
				
			||||||
 | 
					        $em->flush(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Display::addFlash( | 
				
			||||||
 | 
					            Display::return_message(get_lang('VisibilityChanged'), 'success') | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        header("Location: $baseUrl"); | 
				
			||||||
 | 
					        exit; | 
				
			||||||
 | 
					    case 'delete_category': | 
				
			||||||
 | 
					        $id = isset($_GET['id']) ? (int) $_GET['id'] : 0; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!$id) { | 
				
			||||||
 | 
					            break; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /** @var PortfolioCategory $category */ | 
				
			||||||
 | 
					        $category = $em->find('ChamiloCoreBundle:PortfolioCategory', $id); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!$isValid($category)) { | 
				
			||||||
 | 
					            api_not_allowed(true); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $em->remove($category); | 
				
			||||||
 | 
					        $em->flush(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Display::addFlash( | 
				
			||||||
 | 
					            Display::return_message(get_lang('PortfolioItemDeleted'), 'success') | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        header("Location: $baseUrl"); | 
				
			||||||
 | 
					        exit; | 
				
			||||||
 | 
					    case 'add_item': | 
				
			||||||
 | 
					        require 'add_item.php'; | 
				
			||||||
 | 
					        break; | 
				
			||||||
 | 
					    case 'edit_item': | 
				
			||||||
 | 
					        $id = isset($_GET['id']) ? (int) $_GET['id'] : 0; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!$id) { | 
				
			||||||
 | 
					            break; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /** @var CPortfolio $item */ | 
				
			||||||
 | 
					        $item = $em->find('ChamiloCoreBundle:Portfolio', $id); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!$isValid($item)) { | 
				
			||||||
 | 
					            api_not_allowed(true); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        require 'edit_item.php'; | 
				
			||||||
 | 
					        break; | 
				
			||||||
 | 
					    case 'hide_item': | 
				
			||||||
 | 
					    case 'show_item': | 
				
			||||||
 | 
					        $id = isset($_GET['id']) ? (int) $_GET['id'] : 0; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!$id) { | 
				
			||||||
 | 
					            break; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /** @var Portfolio $item */ | 
				
			||||||
 | 
					        $item = $em->find('ChamiloCoreBundle:Portfolio', $id); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!$isValid($item)) { | 
				
			||||||
 | 
					            api_not_allowed(true); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $item->setIsVisible(!$item->isVisible()); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $em->persist($item); | 
				
			||||||
 | 
					        $em->flush(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Display::addFlash( | 
				
			||||||
 | 
					            Display::return_message(get_lang('VisibilityChanged'), 'success') | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        header("Location: $baseUrl"); | 
				
			||||||
 | 
					        exit; | 
				
			||||||
 | 
					    case 'delete_item': | 
				
			||||||
 | 
					        $id = isset($_GET['id']) ? (int) $_GET['id'] : 0; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!$id) { | 
				
			||||||
 | 
					            break; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /** @var Portfolio $item */ | 
				
			||||||
 | 
					        $item = $em->find('ChamiloCoreBundle:Portfolio', $id); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!$isValid($item)) { | 
				
			||||||
 | 
					            api_not_allowed(true); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $em->remove($item); | 
				
			||||||
 | 
					        $em->flush(); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Display::addFlash( | 
				
			||||||
 | 
					            Display::return_message(get_lang('PortfolioItemDeleted'), 'success') | 
				
			||||||
 | 
					        ); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        header("Location: $baseUrl"); | 
				
			||||||
 | 
					        exit; | 
				
			||||||
 | 
					    case 'list': | 
				
			||||||
 | 
					    default: | 
				
			||||||
 | 
					        require 'list.php'; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* | 
				
			||||||
 | 
					 * View | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					$this_section = $course ? SECTION_COURSES : SECTION_SOCIAL; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$actions = implode(PHP_EOL, $actions); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Display::display_header($toolName); | 
				
			||||||
 | 
					Display::display_introduction_section(TOOL_PORTFOLIO); | 
				
			||||||
 | 
					echo $actions ? Display::toolbarAction('portfolio-toolbar', [$actions]) : ''; | 
				
			||||||
 | 
					echo Display::page_header($toolName); | 
				
			||||||
 | 
					echo $content; | 
				
			||||||
 | 
					Display::display_footer(); | 
				
			||||||
 | 
				
			|||||||
@ -1,14 +0,0 @@ | 
				
			|||||||
<?php | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** | 
					 | 
				
			||||||
 * @license see /license.txt | 
					 | 
				
			||||||
 * @author Laurent Opprecht <laurent@opprecht.info> for the Univesity of Geneva | 
					 | 
				
			||||||
 */ | 
					 | 
				
			||||||
require_once __DIR__.'/../inc/global.inc.php'; | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$has_access = api_protect_course_script(); | 
					 | 
				
			||||||
if (!$has_access) { | 
					 | 
				
			||||||
    exit; | 
					 | 
				
			||||||
} | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Portfolio::controller()->run(); | 
					 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue