Format code LTIBundle

pull/3844/head
Julio Montoya 5 years ago
parent 81a85824b7
commit 708b469444
  1. 2
      ecs.php
  2. 5
      src/LtiBundle/ChamiloLtiBundle.php
  3. 30
      src/LtiBundle/Component/OutcomeDeleteRequest.php
  4. 11
      src/LtiBundle/Component/OutcomeDeleteResponse.php
  5. 27
      src/LtiBundle/Component/OutcomeReadRequest.php
  6. 14
      src/LtiBundle/Component/OutcomeReadResponse.php
  7. 35
      src/LtiBundle/Component/OutcomeReplaceRequest.php
  8. 11
      src/LtiBundle/Component/OutcomeReplaceResponse.php
  9. 51
      src/LtiBundle/Component/OutcomeRequest.php
  10. 20
      src/LtiBundle/Component/OutcomeResponse.php
  11. 30
      src/LtiBundle/Component/OutcomeResponseStatus.php
  12. 14
      src/LtiBundle/Component/OutcomeUnsupportedRequest.php
  13. 9
      src/LtiBundle/Component/OutcomeUnsupportedResponse.php
  14. 33
      src/LtiBundle/Controller/AdminController.php
  15. 171
      src/LtiBundle/Controller/CourseController.php
  16. 23
      src/LtiBundle/Controller/ServiceController.php
  17. 96
      src/LtiBundle/Entity/ExternalTool.php
  18. 57
      src/LtiBundle/Form/ExternalToolType.php
  19. 27
      src/LtiBundle/Util/Utils.php

@ -64,7 +64,7 @@ return static function (ContainerConfigurator $containerConfigurator): void {
__DIR__.'/src/CourseBundle/Component/*',
__DIR__.'/src/CoreBundle/Hook/*',
__DIR__.'/src/CoreBundle/Traits/*',
__DIR__.'/src/LtiBundle/*',
//__DIR__.'/src/LtiBundle/*',
IncrementStyleFixer::class => 'post',
PropertyTypeHintSniff::class.'.'.PropertyTypeHintSniff::CODE_MISSING_TRAVERSABLE_TYPE_HINT_SPECIFICATION,
\PhpCsFixer\Fixer\DoctrineAnnotation\DoctrineAnnotationArrayAssignmentFixer::class,

@ -1,14 +1,13 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
/**
* Class ChamiloLtiBundle.
*/
class ChamiloLtiBundle extends Bundle
{
}

@ -1,21 +1,19 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Component;
use Chamilo\CoreBundle\Entity\GradebookEvaluation;
use Chamilo\CoreBundle\Entity\User;
use Result;
use SimpleXMLElement;
/**
* Class OutcomeDeleteRequest.
*/
class OutcomeDeleteRequest extends OutcomeRequest
{
/**
* OutcomeDeleteRequest constructor.
*/
public function __construct(\SimpleXMLElement $xml)
public function __construct(SimpleXMLElement $xml)
{
parent::__construct($xml);
@ -23,7 +21,7 @@ class OutcomeDeleteRequest extends OutcomeRequest
$this->xmlRequest = $this->xmlRequest->deleteResultRequest;
}
protected function processBody()
protected function processBody(): void
{
$resultRecord = $this->xmlRequest->resultRecord;
$sourcedId = (string) $resultRecord->sourcedGUID->sourcedId;
@ -34,7 +32,8 @@ class OutcomeDeleteRequest extends OutcomeRequest
if (empty($sourcedParts)) {
$this->statusInfo
->setSeverity(OutcomeResponseStatus::SEVERITY_ERROR)
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE);
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE)
;
return;
}
@ -47,28 +46,31 @@ class OutcomeDeleteRequest extends OutcomeRequest
if (empty($evaluation) || empty($user)) {
$this->statusInfo
->setSeverity(OutcomeResponseStatus::SEVERITY_STATUS)
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE);
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE)
;
return;
}
$results = \Result::load(null, $user->getId(), $evaluation->getId());
$results = Result::load(null, $user->getId(), $evaluation->getId());
if (empty($results)) {
$this->statusInfo
->setSeverity(OutcomeResponseStatus::SEVERITY_STATUS)
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE);
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE)
;
return;
}
/** @var \Result $result */
/** @var Result $result */
$result = $results[0];
$result->addResultLog($user->getId(), $evaluation->getId());
$result->delete();
$this->statusInfo
->setSeverity(OutcomeResponseStatus::SEVERITY_STATUS)
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_SUCCESS);
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_SUCCESS)
;
}
}

@ -1,18 +1,19 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Component;
/**
* Class OutcomeDeleteResponse.
*/
use SimpleXMLElement;
class OutcomeDeleteResponse extends OutcomeResponse
{
/**
* OutcomeDeleteResponse constructor.
*
* @param mixed|null $bodyParam
* @param null|mixed $bodyParam
*/
public function __construct(OutcomeResponseStatus $statusInfo, $bodyParam = null)
{
@ -21,7 +22,7 @@ class OutcomeDeleteResponse extends OutcomeResponse
parent::__construct($statusInfo, $bodyParam);
}
protected function generateBody(\SimpleXMLElement $xmlBody)
protected function generateBody(SimpleXMLElement $xmlBody): void
{
$xmlBody->addChild('deleteResultResponse');
}

@ -1,21 +1,19 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Component;
use Chamilo\CoreBundle\Entity\GradebookEvaluation;
use Chamilo\CoreBundle\Entity\User;
use Result;
use SimpleXMLElement;
/**
* Class OutcomeReadRequest.
*/
class OutcomeReadRequest extends OutcomeRequest
{
/**
* OutcomeReadRequest constructor.
*/
public function __construct(\SimpleXMLElement $xml)
public function __construct(SimpleXMLElement $xml)
{
parent::__construct($xml);
@ -23,7 +21,7 @@ class OutcomeReadRequest extends OutcomeRequest
$this->xmlRequest = $this->xmlRequest->readResultRequest;
}
protected function processBody()
protected function processBody(): void
{
$resultRecord = $this->xmlRequest->resultRecord;
$sourcedId = (string) $resultRecord->sourcedGUID->sourcedId;
@ -34,7 +32,8 @@ class OutcomeReadRequest extends OutcomeRequest
if (empty($sourcedParts)) {
$this->statusInfo
->setSeverity(OutcomeResponseStatus::SEVERITY_ERROR)
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE);
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE)
;
return;
}
@ -47,18 +46,19 @@ class OutcomeReadRequest extends OutcomeRequest
if (empty($evaluation) || empty($user)) {
$this->statusInfo
->setSeverity(OutcomeResponseStatus::SEVERITY_STATUS)
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE);
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE)
;
return;
}
$results = \Result::load(null, $user->getId(), $evaluation->getId());
$results = Result::load(null, $user->getId(), $evaluation->getId());
$ltiScore = '';
$responseDescription = $this->translator->trans('Score not set');
if (!empty($results)) {
/** @var \Result $result */
/** @var Result $result */
$result = $results[0];
$ltiScore = 0;
@ -76,7 +76,8 @@ class OutcomeReadRequest extends OutcomeRequest
$this->statusInfo
->setSeverity(OutcomeResponseStatus::SEVERITY_STATUS)
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_SUCCESS)
->setDescription($responseDescription);
->setDescription($responseDescription)
;
$this->responseBodyParam = (string) $ltiScore;
}

@ -1,18 +1,19 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Component;
/**
* Class OutcomeReadResponse.
*/
use SimpleXMLElement;
class OutcomeReadResponse extends OutcomeResponse
{
/**
* OutcomeReadResponse constructor.
*
* @param mixed|null $bodyParam
* @param null|mixed $bodyParam
*/
public function __construct(OutcomeResponseStatus $statusInfo, $bodyParam = null)
{
@ -21,12 +22,13 @@ class OutcomeReadResponse extends OutcomeResponse
parent::__construct($statusInfo, $bodyParam);
}
protected function generateBody(\SimpleXMLElement $xmlBody)
protected function generateBody(SimpleXMLElement $xmlBody): void
{
$resultResponse = $xmlBody->addChild('readResultResponse');
$xmlResultScore = $resultResponse->addChild('result')
->addChild('resultScore');
->addChild('resultScore')
;
$xmlResultScore->addChild('language', 'en');
$xmlResultScore->addChild('textString', $this->bodyParams);

@ -1,21 +1,19 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Component;
use Chamilo\CoreBundle\Entity\GradebookEvaluation;
use Chamilo\CoreBundle\Entity\User;
use Result;
use SimpleXMLElement;
/**
* Class OutcomeReplaceRequest.
*/
class OutcomeReplaceRequest extends OutcomeRequest
{
/**
* OutcomeReplaceRequest constructor.
*/
public function __construct(\SimpleXMLElement $xml)
public function __construct(SimpleXMLElement $xml)
{
parent::__construct($xml);
@ -23,7 +21,7 @@ class OutcomeReplaceRequest extends OutcomeRequest
$this->xmlRequest = $this->xmlRequest->replaceResultRequest;
}
protected function processBody()
protected function processBody(): void
{
$resultRecord = $this->xmlRequest->resultRecord;
$sourcedId = (string) $resultRecord->sourcedGUID->sourcedId;
@ -33,7 +31,8 @@ class OutcomeReplaceRequest extends OutcomeRequest
if (!is_numeric($resultScore)) {
$this->statusInfo
->setSeverity(OutcomeResponseStatus::SEVERITY_ERROR)
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE);
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE)
;
return;
}
@ -43,7 +42,8 @@ class OutcomeReplaceRequest extends OutcomeRequest
if (0 > $resultScore || 1 < $resultScore) {
$this->statusInfo
->setSeverity(OutcomeResponseStatus::SEVERITY_WARNING)
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE);
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE)
;
return;
}
@ -53,7 +53,8 @@ class OutcomeReplaceRequest extends OutcomeRequest
if (empty($sourcedParts)) {
$this->statusInfo
->setSeverity(OutcomeResponseStatus::SEVERITY_ERROR)
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE);
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE)
;
return;
}
@ -66,23 +67,24 @@ class OutcomeReplaceRequest extends OutcomeRequest
if (empty($evaluation) || empty($user)) {
$this->statusInfo
->setSeverity(OutcomeResponseStatus::SEVERITY_STATUS)
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE);
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_FAILURE)
;
return;
}
$score = $evaluation->getMax() * $resultScore;
$results = \Result::load(null, $user->getId(), $evaluation->getId());
$results = Result::load(null, $user->getId(), $evaluation->getId());
if (empty($results)) {
$result = new \Result();
$result = new Result();
$result->set_evaluation_id($evaluation->getId());
$result->set_user_id($user->getId());
$result->set_score($score);
$result->add();
} else {
/** @var \Result $result */
/** @var Result $result */
$result = $results[0];
$result->addResultLog($user->getId(), $evaluation->getId());
$result->set_score($score);
@ -98,6 +100,7 @@ class OutcomeReplaceRequest extends OutcomeRequest
$user->getId(),
$resultScore
)
);
)
;
}
}

@ -1,18 +1,19 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Component;
/**
* Class OutcomeReplaceResponse.
*/
use SimpleXMLElement;
class OutcomeReplaceResponse extends OutcomeResponse
{
/**
* OutcomeReplaceResponse constructor.
*
* @param mixed|null $bodyParam
* @param null|mixed $bodyParam
*/
public function __construct(OutcomeResponseStatus $statusInfo, $bodyParam = null)
{
@ -21,7 +22,7 @@ class OutcomeReplaceResponse extends OutcomeResponse
parent::__construct($statusInfo, $bodyParam);
}
protected function generateBody(\SimpleXMLElement $xmlBody)
protected function generateBody(SimpleXMLElement $xmlBody): void
{
$xmlBody->addChild('replaceResultResponse');
}

@ -1,52 +1,31 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Component;
use Doctrine\ORM\EntityManager;
use SimpleXMLElement;
use Symfony\Bundle\FrameworkBundle\Translation\Translator;
/**
* Class OutcomeRequest.
*/
abstract class OutcomeRequest
{
/**
* @var string
*/
protected $responseType;
protected string $responseType;
/**
* @var \SimpleXMLElement
*/
protected $xmlHeaderInfo;
protected SimpleXMLElement $xmlHeaderInfo;
/**
* @var \SimpleXMLElement
*/
protected $xmlRequest;
protected SimpleXMLElement $xmlRequest;
/**
* @var OutcomeResponseStatus
*/
protected $statusInfo;
protected OutcomeResponseStatus $statusInfo;
protected $responseBodyParam;
protected array $responseBodyParam;
/**
* @var EntityManager
*/
protected $entityManager;
/**
* @var Translator
*/
protected $translator;
protected EntityManager $entityManager;
protected Translator $translator;
/**
* OutcomeRequest constructor.
*/
public function __construct(\SimpleXMLElement $xml)
public function __construct(SimpleXMLElement $xml)
{
$this->statusInfo = new OutcomeResponseStatus();
@ -54,18 +33,18 @@ abstract class OutcomeRequest
$this->xmlRequest = $xml->imsx_POXBody->children();
}
public function setEntityManager(EntityManager $entityManager)
public function setEntityManager(EntityManager $entityManager): void
{
$this->entityManager = $entityManager;
}
public function setTranslator(Translator $translator)
public function setTranslator(Translator $translator): void
{
$this->translator = $translator;
}
/**
* @return OutcomeResponse|null
* @return null|OutcomeResponse
*/
public function process()
{
@ -84,7 +63,7 @@ abstract class OutcomeRequest
}
}
protected function processHeader()
protected function processHeader(): void
{
$info = $this->xmlHeaderInfo;

@ -1,28 +1,26 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Component;
/**
* Class OutcomeResponse.
*/
use SimpleXMLElement;
abstract class OutcomeResponse
{
const TYPE_REPLACE = 'replace';
const TYPE_READ = 'read';
const TYPE_DELETE = 'delete';
protected $bodyParams;
/**
* @var OutcomeResponseStatus
*/
private $statusInfo;
protected array $bodyParams;
private OutcomeResponseStatus $statusInfo;
/**
* OutcomeResponse constructor.
*
* @param mixed|null $bodyParam
* @param null|mixed $bodyParam
*/
public function __construct(OutcomeResponseStatus $statusInfo, $bodyParam = null)
{
@ -35,7 +33,7 @@ abstract class OutcomeResponse
*/
public function __toString()
{
$xml = new \SimpleXMLElement('<imsx_POXEnvelopeResponse></imsx_POXEnvelopeResponse>');
$xml = new SimpleXMLElement('<imsx_POXEnvelopeResponse></imsx_POXEnvelopeResponse>');
$xml->addAttribute('xmlns', 'http://www.imsglobal.org/services/ltiv1p1/xsd/imsoms_v1p0');
$headerInfo = $xml->addChild('imsx_POXHeader')->addChild('imsx_POXResponseHeaderInfo');
@ -56,5 +54,5 @@ abstract class OutcomeResponse
return $xml->asXML();
}
abstract protected function generateBody(\SimpleXMLElement $xmlBody);
abstract protected function generateBody(SimpleXMLElement $xmlBody);
}

@ -1,12 +1,11 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Component;
/**
* Class OutcomeResponseStatus.
*/
class OutcomeResponseStatus
{
const SEVERITY_STATUS = 'status';
@ -18,30 +17,15 @@ class OutcomeResponseStatus
const CODEMAJOR_FAILURE = 'failure';
const CODEMAJOR_UNSUPPORTED = 'unsupported';
/**
* @var string
*/
private $codeMajor = '';
private string $codeMajor = '';
/**
* @var string
*/
private $severity = '';
private string $severity = '';
/**
* @var string
*/
private $messageRefIdentifier = '';
private string $messageRefIdentifier = '';
/**
* @var string
*/
private $operationRefIdentifier = '';
private string $operationRefIdentifier = '';
/**
* @var string
*/
private $description = '';
private string $description = '';
/**
* Get codeMajor.

@ -1,12 +1,13 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Component;
/**
* Class OutcomeUnsupportedRequest.
*/
use SimpleXMLElement;
class OutcomeUnsupportedRequest extends OutcomeRequest
{
/**
@ -14,20 +15,21 @@ class OutcomeUnsupportedRequest extends OutcomeRequest
*
* @param string $name
*/
public function __construct(\SimpleXMLElement $xml, $name)
public function __construct(SimpleXMLElement $xml, $name)
{
parent::__construct($xml);
$this->responseType = $name;
}
protected function processBody()
protected function processBody(): void
{
$this->statusInfo
->setSeverity(OutcomeResponseStatus::SEVERITY_STATUS)
->setCodeMajor(OutcomeResponseStatus::CODEMAJOR_UNSUPPORTED)
->setDescription(
$this->responseType.' is not supported'
);
)
;
}
}

@ -1,12 +1,13 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Component;
/**
* Class OutcomeUnsupportedResponse.
*/
use SimpleXMLElement;
class OutcomeUnsupportedResponse extends OutcomeResponse
{
/**
@ -21,7 +22,7 @@ class OutcomeUnsupportedResponse extends OutcomeResponse
parent::__construct($statusInfo);
}
protected function generateBody(\SimpleXMLElement $xmlBody)
protected function generateBody(SimpleXMLElement $xmlBody): void
{
}
}

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Controller;
@ -12,9 +14,6 @@ use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* Class AdminController.
*/
class AdminController extends BaseController
{
/**
@ -27,7 +26,9 @@ class AdminController extends BaseController
$repo = $this->getDoctrine()->getRepository('ChamiloLtiBundle:ExternalTool');
$tools = $repo->findAll();
return $this->render('@ChamiloCore/Lti/admin.html.twig', ['tools' => $tools]);
return $this->render('@ChamiloCore/Lti/admin.html.twig', [
'tools' => $tools,
]);
}
/**
@ -56,17 +57,23 @@ class AdminController extends BaseController
$breadcrumb = $this->get('chamilo_core.block.breadcrumb');
$breadcrumb->addChild(
$this->trans('Administration'),
['route' => 'administration']
[
'route' => 'administration',
]
);
$breadcrumb->addChild(
$this->trans('External tools'),
['route' => 'chamilo_lti_admin']
[
'route' => 'chamilo_lti_admin',
]
);
$breadcrumb->addChild('Add external tool');
return $this->render(
'@ChamiloCore/Lti/admin_form.html.twig',
['form' => $form->createView()]
[
'form' => $form->createView(),
]
);
}
@ -110,17 +117,23 @@ class AdminController extends BaseController
$breadcrumb = $this->get('chamilo_core.block.breadcrumb');
$breadcrumb->addChild(
$this->trans('Administration'),
['route' => 'administration']
[
'route' => 'administration',
]
);
$breadcrumb->addChild(
$this->trans('External tools'),
['route' => 'chamilo_lti_admin']
[
'route' => 'chamilo_lti_admin',
]
);
$breadcrumb->addChild('Edit external tool');
return $this->render(
'@ChamiloCore/Lti/admin_form.html.twig',
['form' => $form->createView()]
[
'form' => $form->createView(),
]
);
}

@ -1,9 +1,12 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Controller;
use Category;
use Chamilo\CoreBundle\Controller\BaseController;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CoreBundle\Entity\Session;
@ -12,15 +15,22 @@ use Chamilo\CourseBundle\Entity\CTool;
use Chamilo\LtiBundle\Entity\ExternalTool;
use Chamilo\LtiBundle\Form\ExternalToolType;
use Chamilo\LtiBundle\Util\Utils;
use DateTime;
use Display;
use EvalForm;
use Evaluation;
use Exception;
use HTML_QuickForm_select;
use OAuthConsumer;
use OAuthRequest;
use OAuthSignatureMethod_HMAC_SHA1;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use UserManager;
/**
* Class CourseController.
*/
class CourseController extends BaseController
{
/**
@ -73,10 +83,14 @@ class CourseController extends BaseController
'course' => $course,
'link' => $this->generateUrl(
'chamilo_lti_show',
['code' => $course->getCode(), 'id' => $tool->getId()]
[
'code' => $course->getCode(),
'id' => $tool->getId(),
]
),
]
);
)
;
if (empty($courseTool)) {
throw $this->createNotFoundException('Course tool not found.');
@ -93,7 +107,10 @@ class CourseController extends BaseController
return $this->redirectToRoute(
'chamilo_lti_edit',
['id' => $tool->getId(), 'code' => $course->getCode()]
[
'id' => $tool->getId(),
'code' => $course->getCode(),
]
);
}
@ -105,7 +122,7 @@ class CourseController extends BaseController
public function launchAction($id): Response
{
$em = $this->getDoctrine()->getManager();
/** @var ExternalTool|null $tool */
/** @var null|ExternalTool $tool */
$tool = $em->find('ChamiloLtiBundle:ExternalTool', $id);
if (empty($tool)) {
@ -135,7 +152,9 @@ class CourseController extends BaseController
$params['lti_message_type'] = 'ContentItemSelectionRequest';
$params['content_item_return_url'] = $this->generateUrl(
'chamilo_lti_return_item',
['code' => $course->getCode()],
[
'code' => $course->getCode(),
],
UrlGeneratorInterface::ABSOLUTE_URL
);
$params['accept_media_types'] = '*/*';
@ -153,7 +172,12 @@ class CourseController extends BaseController
if (!empty($toolEval)) {
$params['lis_result_sourcedid'] = json_encode(
['e' => $toolEval->getId(), 'u' => $user->getId(), 'l' => uniqid(), 'lt' => time()]
[
'e' => $toolEval->getId(),
'u' => $user->getId(),
'l' => uniqid(),
'lt' => time(),
]
);
$params['lis_outcome_service_url'] = api_get_path(WEB_PATH).'lti/os';
/* $params['lis_outcome_service_url'] = $this->generateUrl(
@ -161,8 +185,8 @@ class CourseController extends BaseController
[],
UrlGeneratorInterface::ABSOLUTE_URL
); */
$params['lis_person_sourcedid'] = "$institutionDomain:$toolUserId";
$params['lis_course_section_sourcedid'] = "$institutionDomain:".$course->getId();
$params['lis_person_sourcedid'] = "{$institutionDomain}:{$toolUserId}";
$params['lis_course_section_sourcedid'] = "{$institutionDomain}:".$course->getId();
if ($session) {
$params['lis_course_section_sourcedid'] .= ':'.$session->getId();
@ -173,7 +197,7 @@ class CourseController extends BaseController
$params['user_id'] = $toolUserId;
if ($tool->isSharingPicture()) {
$params['user_image'] = \UserManager::getUserPicture($user->getId());
$params['user_image'] = UserManager::getUserPicture($user->getId());
}
$params['roles'] = Utils::generateUserRoles($user);
@ -223,14 +247,14 @@ class CourseController extends BaseController
Utils::trimParams($params);
if (!empty($tool->getConsumerKey()) && !empty($tool->getSharedSecret())) {
$consumer = new \OAuthConsumer(
$consumer = new OAuthConsumer(
$tool->getConsumerKey(),
$tool->getSharedSecret(),
null
);
$hmacMethod = new \OAuthSignatureMethod_HMAC_SHA1();
$hmacMethod = new OAuthSignatureMethod_HMAC_SHA1();
$request = \OAuthRequest::from_consumer_and_token(
$request = OAuthRequest::from_consumer_and_token(
$consumer,
'',
'POST',
@ -277,7 +301,9 @@ class CourseController extends BaseController
$course = $this->getCourse();
$url = $this->generateUrl(
'chamilo_lti_return_item',
['code' => $course->getCode()],
[
'code' => $course->getCode(),
],
UrlGeneratorInterface::ABSOLUTE_URL
);
@ -297,7 +323,7 @@ class CourseController extends BaseController
$supportedItemTypes = ['LtiLinkItem'];
foreach ($contentItems as $contentItem) {
if (!in_array($contentItem['@type'], $supportedItemTypes)) {
if (!in_array($contentItem['@type'], $supportedItemTypes, true)) {
continue;
}
@ -316,7 +342,9 @@ class CourseController extends BaseController
return $this->render(
'@ChamiloCore/Lti/item_return.html.twig',
['course' => $course]
[
'course' => $course,
]
);
}
@ -331,7 +359,7 @@ class CourseController extends BaseController
$em = $this->getDoctrine()->getManager();
/** @var ExternalTool|null $externalTool */
/** @var null|ExternalTool $externalTool */
$externalTool = $em->find('ChamiloLtiBundle:ExternalTool', $id);
if (empty($externalTool)) {
@ -348,7 +376,9 @@ class CourseController extends BaseController
[
'uri' => $this->generateUrl(
'chamilo_course_home_home_index',
['course' => $course->getCode()]
[
'course' => $course->getCode(),
]
),
]
);
@ -358,7 +388,10 @@ class CourseController extends BaseController
return $this->render(
'ChamiloCoreBundle:Lti:iframe.html.twig',
['tool' => $externalTool, 'course' => $course]
[
'tool' => $externalTool,
'course' => $course,
]
);
}
@ -379,7 +412,10 @@ class CourseController extends BaseController
$parentTool = null;
if (!empty($id)) {
$parentTool = $repo->findOneBy(['id' => $id, 'course' => null]);
$parentTool = $repo->findOneBy([
'id' => $id,
'course' => null,
]);
if (empty($parentTool)) {
throw $this->createNotFoundException('External tool not found');
@ -400,15 +436,18 @@ class CourseController extends BaseController
if (!$form->isSubmitted() || !$form->isValid()) {
$this->setConfigureBreadcrumb($course);
$categories = \Category::load(null, null, $course->getCode());
$categories = Category::load(null, null, $course->getCode());
$actions = '';
if (!empty($categories)) {
$actions .= \Display::url(
\Display::return_icon('gradebook.png', get_lang('Add to gradebook'), [], ICON_SIZE_MEDIUM),
$actions .= Display::url(
Display::return_icon('gradebook.png', get_lang('Add to gradebook'), [], ICON_SIZE_MEDIUM),
$this->generateUrl(
'chamilo_lti_grade',
['catId' => $categories[0]->get_id(), 'code' => $course->getCode()]
[
'catId' => $categories[0]->get_id(),
'code' => $course->getCode(),
]
)
//'./gradebook/add_eval.php?selectcat='.$categories[0]->get_id().'&'.api_get_cidreq()
);
@ -418,8 +457,13 @@ class CourseController extends BaseController
'@ChamiloCore/Lti/course_configure.twig',
[
'title' => $this->trans('Add external tool'),
'added_tools' => $repo->findBy(['course' => $course]),
'global_tools' => $repo->findBy(['parent' => null, 'course' => null]),
'added_tools' => $repo->findBy([
'course' => $course,
]),
'global_tools' => $repo->findBy([
'parent' => null,
'course' => null,
]),
'form' => $form->createView(),
'course' => $course,
'actions' => $actions,
@ -448,22 +492,30 @@ class CourseController extends BaseController
->setLink(
$this->generateUrl(
'chamilo_lti_show',
['code' => $course->getCode(), 'id' => $tool->getId()]
[
'code' => $course->getCode(),
'id' => $tool->getId(),
]
)
);
)
;
$em->persist($courseTool);
$em->flush();
return $this->redirectToRoute(
'chamilo_course_home_home_index',
['course' => $course->getCode()]
[
'course' => $course->getCode(),
]
);
}
return $this->redirectToRoute(
'chamilo_lti_configure',
['course' => $course->getCode()]
[
'course' => $course->getCode(),
]
);
}
@ -474,7 +526,7 @@ class CourseController extends BaseController
*
* @param string $catId
*
* @throws \Exception
* @throws Exception
*/
public function gradeAction($catId)
{
@ -484,13 +536,13 @@ class CourseController extends BaseController
/** @var User $user */
$user = $this->getUser();
$categories = \Category::load(null, null, $course->getCode());
$categories = Category::load(null, null, $course->getCode());
if (empty($categories)) {
throw $this->createNotFoundException();
}
$evaladd = new \Evaluation();
$evaladd = new Evaluation();
$evaladd->set_user_id($user->getId());
if (!empty($catId)) {
@ -500,25 +552,31 @@ class CourseController extends BaseController
$evaladd->set_category_id(0);
}
$form = new \EvalForm(
\EvalForm::TYPE_ADD,
$form = new EvalForm(
EvalForm::TYPE_ADD,
$evaladd,
null,
'add_eval_form',
null,
$this->generateUrl(
'chamilo_lti_grade',
['catId' => $catId, 'code' => $course->getCode()]
[
'catId' => $catId,
'code' => $course->getCode(),
]
).'?'.api_get_cidreq()
);
$form->removeElement('name');
$form->removeElement('addresult');
/** @var \HTML_QuickForm_select $slcLtiTools */
/** @var HTML_QuickForm_select $slcLtiTools */
$slcLtiTools = $form->createElement('select', 'name', $this->trans('External tool'));
$form->insertElementBefore($slcLtiTools, 'hid_category_id');
$form->addRule('name', get_lang('Required field'), 'required');
$tools = $toolRepo->findBy(['course' => $course, 'gradebookEval' => null]);
$tools = $toolRepo->findBy([
'course' => $course,
'gradebookEval' => null,
]);
/** @var ExternalTool $tool */
foreach ($tools as $tool) {
@ -544,7 +602,7 @@ class CourseController extends BaseController
throw $this->createNotFoundException();
}
$eval = new \Evaluation();
$eval = new Evaluation();
$eval->set_name($tool->getName());
$eval->set_description($values['description']);
$eval->set_user_id($values['hid_user_id']);
@ -575,7 +633,7 @@ class CourseController extends BaseController
return $this->redirect(api_get_course_url());
}
private function setConfigureBreadcrumb(Course $course)
private function setConfigureBreadcrumb(Course $course): void
{
$breadcrumb = $this->get('chamilo_core.block.breadcrumb');
$breadcrumb->addChild(
@ -583,7 +641,9 @@ class CourseController extends BaseController
[
'uri' => $this->generateUrl(
'chamilo_course_home_home_index',
['course' => $course->getCode()]
[
'course' => $course->getCode(),
]
),
]
);
@ -598,12 +658,12 @@ class CourseController extends BaseController
User $user,
Course $course,
Session $session = null
) {
): void {
$replaceable = self::getReplaceableVariables($user, $course, $session);
$variables = array_keys($replaceable);
foreach ($customParams as $customKey => $customValue) {
if (!in_array($customValue, $variables)) {
if (!in_array($customValue, $variables, true)) {
continue;
}
@ -616,9 +676,8 @@ class CourseController extends BaseController
$customParams[$customKey] = $params[$val];
continue;
} else {
$val = false;
}
$val = false;
}
if (false === $val) {
@ -656,14 +715,16 @@ class CourseController extends BaseController
'$Person.address.statepr' => false,
'$Person.address.country' => false,
'$Person.address.postcode' => false,
'$Person.address.timezone' => false, //$user->getTimezone(),
'$Person.address.timezone' => false,
//$user->getTimezone(),
'$Person.phone.mobile' => false,
'$Person.phone.primary' => $user->getPhone(),
'$Person.phone.home' => false,
'$Person.phone.work' => false,
'$Person.email.primary' => $user->getEmail(),
'$Person.email.personal' => false,
'$Person.webaddress' => false, //$user->getWebsite(),
'$Person.webaddress' => false,
//$user->getWebsite(),
'$Person.sms' => false,
'$CourseTemplate.sourcedId' => false,
@ -696,10 +757,10 @@ class CourseController extends BaseController
'$CourseSection.numberofStudents' => false,
'$CourseSection.dept' => false,
'$CourseSection.timeFrame.begin' => $session && $session->getDisplayStartDate()
? $session->getDisplayStartDate()->format(\DateTime::ATOM)
? $session->getDisplayStartDate()->format(DateTime::ATOM)
: false,
'$CourseSection.timeFrame.end' => $session && $session->getDisplayEndDate()
? $session->getDisplayEndDate()->format(\DateTime::ATOM)
? $session->getDisplayEndDate()->format(DateTime::ATOM)
: false,
'$CourseSection.enrollControl.accept' => false,
'$CourseSection.enrollControl.allowed' => false,
@ -792,9 +853,13 @@ class CourseController extends BaseController
->setLink(
$this->generateUrl(
'chamilo_lti_show',
['code' => $course->getCode(), 'id' => $newTool->getId()]
[
'code' => $course->getCode(),
'id' => $newTool->getId(),
]
)
);
)
;
$em->persist($courseTool);
$em->flush();

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Controller;
@ -10,12 +12,11 @@ use Chamilo\LtiBundle\Component\OutcomeReadRequest;
use Chamilo\LtiBundle\Component\OutcomeReplaceRequest;
use Chamilo\LtiBundle\Component\OutcomeUnsupportedRequest;
use Chamilo\LtiBundle\Entity\ExternalTool;
use OAuthUtil;
use SimpleXMLElement;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* Class ServicesController.
*/
class ServiceController extends BaseController
{
/**
@ -26,21 +27,25 @@ class ServiceController extends BaseController
$em = $this->getDoctrine()->getManager();
$toolRepo = $em->getRepository('ChamiloLtiBundle:ExternalTool');
$headers = \OAuthUtil::get_headers();
$headers = OAuthUtil::get_headers();
if (empty($headers['Authorization'])) {
throw $this->createAccessDeniedException();
}
$authParams = \OAuthUtil::split_header($headers['Authorization']);
$authParams = OAuthUtil::split_header($headers['Authorization']);
if (empty($authParams) || empty($authParams['oauth_consumer_key']) || empty($authParams['oauth_signature'])) {
throw $this->createAccessDeniedException();
}
$course = $this->getCourse();
$tools = $toolRepo->findBy(['consumerKey' => $authParams['oauth_consumer_key']]);
$url = $this->generateUrl('chamilo_lti_os', ['code' => $course->getCode()]);
$tools = $toolRepo->findBy([
'consumerKey' => $authParams['oauth_consumer_key'],
]);
$url = $this->generateUrl('chamilo_lti_os', [
'code' => $course->getCode(),
]);
$toolIsFound = false;
@ -80,7 +85,7 @@ class ServiceController extends BaseController
}
/**
* @return \Chamilo\LtiBundle\Component\OutcomeResponse|null
* @return null|\Chamilo\LtiBundle\Component\OutcomeResponse
*/
private function processServiceRequest()
{
@ -90,7 +95,7 @@ class ServiceController extends BaseController
return null;
}
$xml = new \SimpleXMLElement($requestContent);
$xml = new SimpleXMLElement($requestContent);
if (empty($xml)) {
return null;

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Entity;
@ -18,104 +20,75 @@ use Doctrine\ORM\Mapping as ORM;
class ExternalTool
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue
*/
protected $id;
protected int $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string")
*/
protected $name;
protected string $name;
/**
* @var string|null
*
* @ORM\Column(name="description", type="text", nullable=true)
*/
protected $description;
protected ?string $description = null;
/**
* @var string
*
* @ORM\Column(name="launch_url", type="string")
*/
protected $launchUrl;
protected string $launchUrl;
/**
* @var string
*
* @ORM\Column(name="consumer_key", type="string", nullable=true)
*/
protected $consumerKey;
protected string $consumerKey;
/**
* @var string
*
* @ORM\Column(name="shared_secret", type="string", nullable=true)
*/
protected $sharedSecret;
protected string $sharedSecret;
/**
* @var string|null
*
* @ORM\Column(name="custom_params", type="text", nullable=true)
*/
protected $customParams;
protected ?string $customParams = null;
/**
* @var bool
*
* @ORM\Column(name="active_deep_linking", type="boolean", nullable=false, options={"default": false})
*/
protected $activeDeepLinking;
protected bool $activeDeepLinking;
/**
* @var string|null
*
* @ORM\Column(name="privacy", type="text", nullable=true, options={"default": null})
*/
protected $privacy;
protected ?string $privacy = null;
/**
* @var Course|null
*
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\Course")
* @ORM\JoinColumn(name="c_id", referencedColumnName="id")
*/
protected $course;
protected ?Course $course = null;
/**
* @var GradebookEvaluation|null
*
* @ORM\ManyToOne(targetEntity="Chamilo\CoreBundle\Entity\GradebookEvaluation")
* @ORM\JoinColumn(name="gradebook_eval_id", referencedColumnName="id", onDelete="SET NULL")
*/
protected $gradebookEval = null;
protected ?GradebookEvaluation $gradebookEval = null;
/**
* @var ExternalTool|null
*
* @ORM\ManyToOne(targetEntity="Chamilo\LtiBundle\Entity\ExternalTool", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
*/
protected $parent;
protected ?ExternalTool $parent = null;
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="Chamilo\LtiBundle\Entity\ExternalTool", mappedBy="parent")
*/
protected $children;
protected ArrayCollection $children;
/**
* ExternalTool constructor.
*/
public function __construct()
{
$this->description = null;
@ -164,7 +137,7 @@ class ExternalTool
}
/**
* @return string|null
* @return null|string
*/
public function getDescription()
{
@ -172,7 +145,7 @@ class ExternalTool
}
/**
* @param string|null $description
* @param null|string $description
*
* @return ExternalTool
*/
@ -244,7 +217,7 @@ class ExternalTool
}
/**
* @return string|null
* @return null|string
*/
public function getCustomParams()
{
@ -252,7 +225,7 @@ class ExternalTool
}
/**
* @param string|null $customParams
* @param null|string $customParams
*
* @return ExternalTool
*/
@ -263,16 +236,13 @@ class ExternalTool
return $this;
}
/**
* @return bool
*/
public function isGlobal(): bool
{
return null === $this->course;
}
/**
* @return string|null
* @return null|string
*/
public function encodeCustomParams(array $params)
{
@ -281,7 +251,7 @@ class ExternalTool
}
$pairs = [];
foreach ($params as $key => $value) {
$pairs[] = "$key=$value";
$pairs[] = "{$key}={$value}";
}
return implode("\n", $pairs);
@ -310,11 +280,6 @@ class ExternalTool
return $params;
}
/**
* Get activeDeepLinking.
*
* @return bool
*/
public function isActiveDeepLinking(): bool
{
return $this->activeDeepLinking;
@ -337,7 +302,7 @@ class ExternalTool
/**
* Get course.
*
* @return Course|null
* @return null|Course
*/
public function getCourse()
{
@ -359,7 +324,7 @@ class ExternalTool
/**
* Get gradebookEval.
*
* @return GradebookEvaluation|null
* @return null|GradebookEvaluation
*/
public function getGradebookEval()
{
@ -369,7 +334,7 @@ class ExternalTool
/**
* Set gradebookEval.
*
* @param GradebookEvaluation|null $gradebookEval
* @param null|GradebookEvaluation $gradebookEval
*
* @return ExternalTool
*/
@ -383,7 +348,7 @@ class ExternalTool
/**
* Get privacy.
*
* @return string|null
* @return null|string
*/
public function getPrivacy()
{
@ -412,9 +377,6 @@ class ExternalTool
return $this;
}
/**
* @return bool
*/
public function isSharingName(): bool
{
$unserialize = $this->unserializePrivacy();
@ -427,9 +389,6 @@ class ExternalTool
return unserialize($this->privacy);
}
/**
* @return bool
*/
public function isSharingEmail(): bool
{
$unserialize = $this->unserializePrivacy();
@ -437,9 +396,6 @@ class ExternalTool
return (bool) $unserialize['share_email'];
}
/**
* @return bool
*/
public function isSharingPicture(): bool
{
$unserialize = $this->unserializePrivacy();
@ -448,7 +404,7 @@ class ExternalTool
}
/**
* @return ExternalTool|null
* @return null|ExternalTool
*/
public function getParent()
{

@ -1,10 +1,13 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Form;
use Chamilo\LtiBundle\Entity\ExternalTool;
use SimpleXMLElement;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
@ -16,12 +19,9 @@ use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* Class ExternalToolType.
*/
class ExternalToolType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
public function buildForm(FormBuilderInterface $builder, array $options): void
{
/** @var ExternalTool $tool */
$tool = $builder->getData();
@ -29,13 +29,21 @@ class ExternalToolType extends AbstractType
$builder
->add('name', TextType::class)
->add('description', TextareaType::class, ['required' => false]);
->add('description', TextareaType::class, [
'required' => false,
])
;
if (null === $parent) {
$builder
->add('launchUrl', UrlType::class)
->add('consumerKey', TextType::class, ['required' => false])
->add('sharedSecret', TextType::class, ['required' => false]);
->add('consumerKey', TextType::class, [
'required' => false,
])
->add('sharedSecret', TextType::class, [
'required' => false,
])
;
}
$builder->add(
@ -65,23 +73,40 @@ class ExternalToolType extends AbstractType
->add(
'shareName',
CheckboxType::class,
['mapped' => false, 'help' => "Share launcher's name", 'required' => false]
[
'mapped' => false,
'help' => "Share launcher's name",
'required' => false,
]
)
->add(
'shareEmail',
CheckboxType::class,
['mapped' => false, 'help' => "Share launcher's email", 'required' => false]
[
'mapped' => false,
'help' => "Share launcher's email",
'required' => false,
]
)
->add(
'sharePicture',
CheckboxType::class,
['mapped' => false, 'help' => "Share launcher's picture", 'required' => false]
);
[
'mapped' => false,
'help' => "Share launcher's picture",
'required' => false,
]
)
;
$builder->add(
empty($tool->getId()) ? 'save' : 'edit',
SubmitType::class,
['attr' => ['class' => 'btn btn-primary']]
[
'attr' => [
'class' => 'btn btn-primary',
],
]
);
$builder->addEventListener(
@ -90,12 +115,12 @@ class ExternalToolType extends AbstractType
);
}
public function configureOptions(OptionsResolver $resolver)
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults(['data_class', ExternalTool::class]);
}
public function onPostSubmit(FormEvent $event)
public function onPostSubmit(FormEvent $event): void
{
/** @var ExternalTool $tool */
$tool = $event->getData();
@ -121,7 +146,7 @@ class ExternalToolType extends AbstractType
/**
* @param string $launchUrl
*
* @return string|null
* @return null|string
*/
private function getLaunchUrlFromCartridge($launchUrl)
{
@ -151,7 +176,7 @@ class ExternalToolType extends AbstractType
return null;
}
$xml = new \SimpleXMLElement($content);
$xml = new SimpleXMLElement($content);
$result = $xml->xpath('blti:launch_url');
if (empty($result)) {

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\LtiBundle\Util;
@ -7,17 +9,16 @@ namespace Chamilo\LtiBundle\Util;
use Chamilo\CoreBundle\Entity\User;
use Chamilo\CoreBundle\Settings\SettingsManager;
use Chamilo\LtiBundle\Entity\ExternalTool;
use OAuthConsumer;
use OAuthRequest;
use OAuthSignatureMethod_HMAC_SHA1;
use URLify;
use UserManager;
/**
* Class Utils.
*/
class Utils
{
private SettingsManager $settingsManager;
/**
* Utils constructor.
*/
public function __construct(SettingsManager $settingsManager)
{
$this->settingsManager = $settingsManager;
@ -43,9 +44,9 @@ class Utils
$siteName = $this->settingsManager->getSetting('platform.site_name');
$institution = $this->settingsManager->getSetting('platform.institution');
$userString = "$siteName - $institution - $userId";
$userString = "{$siteName} - {$institution} - {$userId}";
return \URLify::filter($userString, 255, '', true, true, false, false, true);
return URLify::filter($userString, 255, '', true, true, false, false, true);
}
/**
@ -85,7 +86,7 @@ class Utils
return '';
}
$followedUsers = \UserManager::get_users_followed_by_drh($currentUser->getId());
$followedUsers = UserManager::get_users_followed_by_drh($currentUser->getId());
$scope = [];
foreach ($followedUsers as $userInfo) {
@ -95,7 +96,7 @@ class Utils
return implode(',', $scope);
}
public static function trimParams(array &$params)
public static function trimParams(array &$params): void
{
foreach ($params as $key => $value) {
$newValue = preg_replace('/\s+/', ' ', $value);
@ -135,12 +136,12 @@ class Utils
*/
public static function checkRequestSignature($url, $originConsumerKey, $originSignature, ExternalTool $tool)
{
$consumer = new \OAuthConsumer(
$consumer = new OAuthConsumer(
$originConsumerKey,
$tool->getSharedSecret()
);
$hmacMethod = new \OAuthSignatureMethod_HMAC_SHA1();
$oAuthRequest = \OAuthRequest::from_request('POST', $url);
$hmacMethod = new OAuthSignatureMethod_HMAC_SHA1();
$oAuthRequest = OAuthRequest::from_request('POST', $url);
$oAuthRequest->sign_request($hmacMethod, $consumer, '');
$signature = $oAuthRequest->get_parameter('oauth_signature');

Loading…
Cancel
Save