src/CourseBundle/Component/CourseCopy/Resources/Resource.php
<?php
/* For licensing terms, see /license.txt */
namespace Chamilo\CourseBundle\Component\CourseCopy\Resources;
/**
* Class Resource
* Representation of a resource in a Chamilo-course.
* This is a base class of which real resource-classes (for Links,
* Documents,...) should be derived.
*
* @author Bart Mollet <bart.mollet@hogent.be>s
*
* @todo Use the globally defined constants voor tools and remove the RESOURCE_*
* constants
*/
class Resource
{
/**
* The id from this resource in the source course.
*/
public $source_id;
/**
* The id from this resource in the destination course.
*/
public $destination_id;
/**
* The type of this resource.
*/
public $type;
/**
* Linked resources.
*/
public $linked_resources;
/**
* The properties of this resource.
*/
public $item_properties;
public $obj = null;
/**
* Create a new Resource.
*
* @param int $id the id of this resource in the source course
* @param int $type the type of this resource
*/
public function __construct($id, $type)
{
$this->source_id = $id;
$this->type = $type;
$this->destination_id = -1;
$this->linked_resources = [];
$this->item_properties = [];
}
/**
* Add linked resource.
*/
public function add_linked_resource($type, $id)
{
$this->linked_resources[$type][] = $id;
}
/**
* Get linked resources.
*/
public function get_linked_resources()
{
return $this->linked_resources;
}
/**
* Checks if this resource links to a given resource.
*/
public function links_to(&$resource)
{
self::setClassType($resource);
$type = $resource->get_type();
if (isset($this->linked_resources[$type]) &&
is_array($this->linked_resources[$type])
) {
return in_array(
$resource->get_id(),
$this->linked_resources[$type]
);
}
return false;
}
/**
* Returns the id of this resource.
*
* @return int the id of this resource in the source course
*/
public function get_id()
{
return $this->source_id;
}
/**
* Resturns the type of this resource.
*
* @return int the type
*/
public function get_type()
{
return $this->type;
}
/**
* Get the constant which defines the tool of this resource. This is
* used in the item_properties table.
*
* @param bool $for_item_property_table (optional) Added by Ivan,
* 29-AUG-2009: A parameter for resolving differencies between defined TOOL_*
* constants and hardcoded strings that are stored in the database.
* Example: The constant TOOL_THREAD is defined in the main_api.lib.php
* with the value 'thread', but the "Forums" tool records in the field 'tool'
* in the item property table the hardcoded value 'forum_thread'.
*
* @todo once the RESOURCE_* constants are replaced by the globally
* defined TOOL_* constants, this function will be replaced by get_type()
*/
public function get_tool($for_item_property_table = true)
{
switch ($this->get_type()) {
case RESOURCE_DOCUMENT:
return TOOL_DOCUMENT;
case RESOURCE_LINK:
return TOOL_LINK;
case RESOURCE_EVENT:
return TOOL_CALENDAR_EVENT;
case RESOURCE_COURSEDESCRIPTION:
return TOOL_COURSE_DESCRIPTION;
case RESOURCE_LEARNPATH:
return TOOL_LEARNPATH;
case RESOURCE_ANNOUNCEMENT:
return TOOL_ANNOUNCEMENT;
case RESOURCE_FORUMCATEGORY:
// Ivan, 29-AUG-2009: A constant like TOOL_FORUM_CATEGORY is missing in main_api.lib.php.
// Such a constant has been defined in the forum tool for local needs.
return 'forum_category';
case RESOURCE_FORUM:
return TOOL_FORUM;
case RESOURCE_FORUMTOPIC:
if ($for_item_property_table) {
// Ivan, 29-AUG-2009: A hardcoded value that the "Forums" tool stores in the item property table.
return 'forum_thread';
}
return TOOL_THREAD;
case RESOURCE_FORUMPOST:
return TOOL_POST;
case RESOURCE_QUIZ:
return TOOL_QUIZ;
case RESOURCE_TEST_CATEGORY:
return TOOL_TEST_CATEGORY;
//case RESOURCE_QUIZQUESTION: //no corresponding global constant
// return TOOL_QUIZ_QUESTION;
//case RESOURCE_TOOL_INTRO:
// return TOOL_INTRO;
//case RESOURCE_LINKCATEGORY:
// return TOOL_LINK_CATEGORY;
//case RESOURCE_SCORM:
// return TOOL_SCORM_DOCUMENT;
case RESOURCE_SURVEY:
return TOOL_SURVEY;
//case RESOURCE_SURVEYQUESTION:
// return TOOL_SURVEY_QUESTION;
//case RESOURCE_SURVEYINVITATION:
// return TOOL_SURVEY_INVITATION;
case RESOURCE_GLOSSARY:
return TOOL_GLOSSARY;
case RESOURCE_WIKI:
return TOOL_WIKI;
case RESOURCE_THEMATIC:
return TOOL_COURSE_PROGRESS;
case RESOURCE_ATTENDANCE:
return TOOL_ATTENDANCE;
case RESOURCE_WORK:
return TOOL_STUDENTPUBLICATION;
default:
return null;
}
}
/**
* Set the destination id.
*
* @param int $id the id of this resource in the destination course
*/
public function set_new_id($id)
{
$this->destination_id = $id;
}
/**
* Check if this resource is already restored in the destination course.
*
* @return bool true if already restored (i.e. destination_id is set).
*/
public function is_restored(): bool
{
return $this->destination_id > -1;
}
/**
* Show this resource.
*/
public function show()
{
//echo 'RESOURCE: '.$this->get_id().' '.$type[$this->get_type()].' ';
}
/**
* Fix objects coming from 1.9.x to 1.10.x
* Example class Event to CalendarEvent.
*
* @param resource $resource
*/
public static function setClassType($resource)
{
$class = get_class($resource);
switch ($class) {
case 'Event':
/** @var CalendarEvent $resource */
$newResource = new CalendarEvent(
$resource->source_id,
$resource->title,
$resource->content,
$resource->start_date,
$resource->end_date,
$resource->attachment_path,
$resource->attachment_filename,
$resource->attachment_size,
$resource->attachment_comment,
$resource->all_day
);
$resource = $newResource;
break;
case 'CourseDescription':
if (!method_exists($resource, 'show')) {
$resource = (array) $resource;
$newResource = new CourseDescription(
isset($resource['id']) ? $resource['id'] : '',
$resource['title'],
$resource['content'],
$resource['description_type']
);
$newResource->source_id = $resource['source_id'];
$newResource->destination_id = $resource['source_id'];
$newResource->linked_resources = $resource['source_id'];
$newResource->item_properties = $resource['source_id'];
$newResource->obj = $resource['obj'];
$resource = $newResource;
}
break;
}
return $resource;
}
}