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 |
||||
/** |
||||
* @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