src/CoreBundle/Tool/AbstractTool.php
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\CoreBundle\Tool;
use Symfony\Component\Serializer\Annotation\Groups;
abstract class AbstractTool
{
#[Groups(['ctool:read'])]
protected string $title;
#[Groups(['ctool:read'])]
protected string $titleToShow;
#[Groups(['ctool:read'])]
protected string $icon = '';
#[Groups(['ctool:read'])]
protected string $category = '';
protected string $image;
protected array $resourceTypes = [];
/**
* Tool scope.
*
* Values can be the following.
*
* - 00 disabled tool
* - 01 course tool
* - 10 global tool
* - 11 global or course or both
*/
protected string $scope;
public function isCourseTool(): bool
{
return false;
}
abstract public function getTitle(): string;
public function getTarget(): string
{
return '_self';
}
public function getImage(): string
{
return $this->image;
}
public function getEntityByResourceType(string $type): ?string
{
return $this->getResourceTypes()[$type] ?? null;
}
public function getTypeNameByEntity(string $entityClass): ?string
{
if (empty($this->getResourceTypes())) {
return null;
}
$list = array_flip($this->getResourceTypes());
if (isset($list[$entityClass])) {
return $list[$entityClass];
}
return null;
}
public function getResourceTypes(): ?array
{
return $this->resourceTypes;
}
public function getTitleToShow(): string
{
$title = $this->getTitle();
// Exception for singular terms that need a plural (with an 's')
switch ($title) {
case 'course_setting':
return 'Course settings';
case 'member':
return 'Users';
case 'announcement':
return 'Announcements';
case 'attendance':
return 'Attendances';
case 'link':
return 'Links';
case 'survey':
return 'Surveys';
default:
return ucfirst(str_replace('_', ' ', $title));
}
}
}