parent
45d6994726
commit
0f570fd0b2
@ -1,85 +0,0 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
/** |
||||
* Responses to AJAX calls for course chat. |
||||
*/ |
||||
require_once __DIR__.'/../global.inc.php'; |
||||
|
||||
if (!api_protect_course_script(false)) { |
||||
exit; |
||||
} |
||||
|
||||
$courseId = api_get_course_int_id(); |
||||
$userId = api_get_user_id(); |
||||
$sessionId = api_get_session_id(); |
||||
$groupId = api_get_group_id(); |
||||
$json = ['status' => false]; |
||||
|
||||
$courseChatUtils = new CourseChatUtils($courseId, $userId, $sessionId, $groupId); |
||||
|
||||
switch ($_REQUEST['action']) { |
||||
case 'chat_logout': |
||||
$logInfo = [ |
||||
'tool' => TOOL_CHAT, |
||||
'tool_id' => 0, |
||||
'tool_id_detail' => 0, |
||||
'action' => 'exit', |
||||
'action_details' => 'exit-chat', |
||||
'info' => '', |
||||
]; |
||||
Event::registerLog($logInfo); |
||||
break; |
||||
case 'track': |
||||
$courseChatUtils->keepUserAsConnected(); |
||||
$courseChatUtils->disconnectInactiveUsers(); |
||||
|
||||
$friend = isset($_REQUEST['friend']) ? (int) $_REQUEST['friend'] : 0; |
||||
$filePath = $courseChatUtils->getFileName(true, $friend); |
||||
$newFileSize = file_exists($filePath) ? filesize($filePath) : 0; |
||||
$oldFileSize = isset($_GET['size']) ? (int) $_GET['size'] : -1; |
||||
$newUsersOnline = $courseChatUtils->countUsersOnline(); |
||||
$oldUsersOnline = isset($_GET['users_online']) ? (int) $_GET['users_online'] : 0; |
||||
|
||||
$json = [ |
||||
'status' => true, |
||||
'data' => [ |
||||
'oldFileSize' => file_exists($filePath) ? filesize($filePath) : 0, |
||||
'history' => $newFileSize !== $oldFileSize ? $courseChatUtils->readMessages(false, $friend) : null, |
||||
'usersOnline' => $newUsersOnline, |
||||
'userList' => $newUsersOnline != $oldUsersOnline ? $courseChatUtils->listUsersOnline() : null, |
||||
'currentFriend' => $friend, |
||||
], |
||||
]; |
||||
|
||||
break; |
||||
case 'preview': |
||||
$json = [ |
||||
'status' => true, |
||||
'data' => [ |
||||
'message' => CourseChatUtils::prepareMessage($_REQUEST['message']), |
||||
], |
||||
]; |
||||
break; |
||||
case 'reset': |
||||
$friend = isset($_REQUEST['friend']) ? (int) $_REQUEST['friend'] : 0; |
||||
|
||||
$json = [ |
||||
'status' => true, |
||||
'data' => $courseChatUtils->readMessages(true, $friend), |
||||
]; |
||||
break; |
||||
case 'write': |
||||
$friend = isset($_REQUEST['friend']) ? (int) $_REQUEST['friend'] : 0; |
||||
$writed = $courseChatUtils->saveMessage($_POST['message'], $friend); |
||||
|
||||
$json = [ |
||||
'status' => $writed, |
||||
'data' => [ |
||||
'writed' => $writed, |
||||
], |
||||
]; |
||||
break; |
||||
} |
||||
|
||||
header('Content-Type: application/json'); |
||||
echo json_encode($json); |
@ -0,0 +1,145 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\CoreBundle\Controller; |
||||
|
||||
use Chamilo\CoreBundle\Repository\ResourceNodeRepository; |
||||
use Chamilo\CourseBundle\Controller\CourseControllerInterface; |
||||
use Chamilo\CourseBundle\Controller\CourseControllerTrait; |
||||
use Chamilo\CourseBundle\Repository\CChatConversationRepository; |
||||
use Event; |
||||
use Symfony\Component\HttpFoundation\JsonResponse; |
||||
use Symfony\Component\HttpFoundation\Request; |
||||
use Symfony\Component\HttpFoundation\Response; |
||||
use Symfony\Component\Routing\Annotation\Route; |
||||
|
||||
/** |
||||
* Class ChatController. |
||||
*/ |
||||
class ChatController extends AbstractResourceController implements CourseControllerInterface |
||||
{ |
||||
use CourseControllerTrait; |
||||
|
||||
/** |
||||
* @Route("/resources/chat/", name="chat_home", options={"expose"=true}) |
||||
*/ |
||||
public function indexAction(Request $request): Response |
||||
{ |
||||
Event::event_access_tool(TOOL_CHAT); |
||||
|
||||
$logInfo = [ |
||||
'tool' => TOOL_CHAT, |
||||
'action' => 'start', |
||||
'action_details' => 'start-chat', |
||||
]; |
||||
Event::registerLog($logInfo); |
||||
|
||||
return $this->render( |
||||
'@ChamiloTheme/Chat/chat.html.twig', |
||||
[ |
||||
'restrict_to_coach' => api_get_configuration_value('course_chat_restrict_to_coach'), |
||||
'user' => api_get_user_info(), |
||||
] |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* @Route("/resources/chat/conversations/", name="chat_ajax", options={"expose"=true}) |
||||
*/ |
||||
public function ajaxAction(Request $request, ResourceNodeRepository $repo): Response |
||||
{ |
||||
if (!api_protect_course_script(false)) { |
||||
exit; |
||||
} |
||||
|
||||
/** @var CChatConversationRepository $resourceRepo */ |
||||
$resourceRepo = $this->getRepository('chat', 'conversations'); |
||||
|
||||
$courseId = api_get_course_int_id(); |
||||
$userId = api_get_user_id(); |
||||
$sessionId = api_get_session_id(); |
||||
$groupId = api_get_group_id(); |
||||
$json = ['status' => false]; |
||||
$parentResourceNode = $this->getParentResourceNode($request); |
||||
|
||||
$courseChatUtils = new \CourseChatUtils( |
||||
$courseId, |
||||
$userId, |
||||
$sessionId, |
||||
$groupId, |
||||
$parentResourceNode, |
||||
$resourceRepo |
||||
); |
||||
|
||||
$action = $request->get('action'); |
||||
|
||||
switch ($action) { |
||||
case 'chat_logout': |
||||
$logInfo = [ |
||||
'tool' => TOOL_CHAT, |
||||
'action' => 'exit', |
||||
'action_details' => 'exit-chat', |
||||
]; |
||||
Event::registerLog($logInfo); |
||||
|
||||
break; |
||||
case 'track': |
||||
$courseChatUtils->keepUserAsConnected(); |
||||
$courseChatUtils->disconnectInactiveUsers(); |
||||
|
||||
$friend = isset($_REQUEST['friend']) ? (int) $_REQUEST['friend'] : 0; |
||||
//$filePath = $courseChatUtils->getFileName(true, $friend); |
||||
//$newFileSize = file_exists($filePath) ? filesize($filePath) : 0; |
||||
//$oldFileSize = isset($_GET['size']) ? (int) $_GET['size'] : -1; |
||||
$newUsersOnline = $courseChatUtils->countUsersOnline(); |
||||
$oldUsersOnline = isset($_GET['users_online']) ? (int) $_GET['users_online'] : 0; |
||||
|
||||
$json = [ |
||||
'status' => true, |
||||
'data' => [ |
||||
//'oldFileSize' => file_exists($filePath) ? filesize($filePath) : 0, |
||||
'oldFileSize' => false, |
||||
'history' => $courseChatUtils->readMessages(false, $friend), |
||||
'usersOnline' => $newUsersOnline, |
||||
'userList' => $newUsersOnline != $oldUsersOnline ? $courseChatUtils->listUsersOnline() : null, |
||||
'currentFriend' => $friend, |
||||
], |
||||
]; |
||||
|
||||
break; |
||||
case 'preview': |
||||
$json = [ |
||||
'status' => true, |
||||
'data' => [ |
||||
'message' => CourseChatUtils::prepareMessage($_REQUEST['message']), |
||||
], |
||||
]; |
||||
|
||||
break; |
||||
case 'reset': |
||||
$friend = isset($_REQUEST['friend']) ? (int) $_REQUEST['friend'] : 0; |
||||
|
||||
$json = [ |
||||
'status' => true, |
||||
'data' => $courseChatUtils->readMessages(true, $friend), |
||||
]; |
||||
|
||||
break; |
||||
case 'write': |
||||
$friend = isset($_REQUEST['friend']) ? (int) $_REQUEST['friend'] : 0; |
||||
$status = $courseChatUtils->saveMessage($_REQUEST['message'], $friend); |
||||
|
||||
$json = [ |
||||
'status' => $status, |
||||
'data' => [ |
||||
'writed' => $status, |
||||
], |
||||
]; |
||||
|
||||
break; |
||||
} |
||||
|
||||
return new JsonResponse($json); |
||||
} |
||||
} |
@ -0,0 +1,81 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\CourseBundle\Entity; |
||||
|
||||
use Chamilo\CoreBundle\Entity\Resource\AbstractResource; |
||||
use Chamilo\CoreBundle\Entity\Resource\ResourceInterface; |
||||
use Doctrine\ORM\Mapping as ORM; |
||||
|
||||
/** |
||||
* CChatConversation. |
||||
* |
||||
* @ORM\Table(name="c_chat_conversation") |
||||
* @ORM\Entity |
||||
*/ |
||||
class CChatConversation extends AbstractResource implements ResourceInterface |
||||
{ |
||||
/** |
||||
* @var int |
||||
* |
||||
* @ORM\Column(name="id", type="integer") |
||||
* @ORM\Id |
||||
* @ORM\GeneratedValue |
||||
*/ |
||||
protected $id; |
||||
|
||||
/** |
||||
* @var string |
||||
* |
||||
* @ORM\Column(name="name", type="string", length=255, nullable=true) |
||||
*/ |
||||
protected $name; |
||||
|
||||
public function __toString(): string |
||||
{ |
||||
return $this->getName(); |
||||
} |
||||
|
||||
/** |
||||
* @return int |
||||
*/ |
||||
public function getId(): int |
||||
{ |
||||
return $this->id; |
||||
} |
||||
|
||||
/** |
||||
* @return string |
||||
*/ |
||||
public function getName(): string |
||||
{ |
||||
return $this->name; |
||||
} |
||||
|
||||
/** |
||||
* @param string $name |
||||
* |
||||
* @return CChatConversation |
||||
*/ |
||||
public function setName(string $name): CChatConversation |
||||
{ |
||||
$this->name = $name; |
||||
|
||||
return $this; |
||||
} |
||||
|
||||
/** |
||||
* Resource identifier. |
||||
*/ |
||||
public function getResourceIdentifier(): int |
||||
{ |
||||
return $this->getId(); |
||||
} |
||||
|
||||
public function getResourceName(): string |
||||
{ |
||||
return $this->getName(); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,54 @@ |
||||
<?php |
||||
|
||||
/* For licensing terms, see /license.txt */ |
||||
|
||||
namespace Chamilo\CourseBundle\Repository; |
||||
|
||||
use APY\DataGridBundle\Grid\Column\Column; |
||||
use APY\DataGridBundle\Grid\Grid; |
||||
use Chamilo\CoreBundle\Component\Utils\ResourceSettings; |
||||
use Chamilo\CoreBundle\Entity\Course; |
||||
use Chamilo\CoreBundle\Entity\Resource\ResourceNode; |
||||
use Chamilo\CoreBundle\Entity\Session; |
||||
use Chamilo\CoreBundle\Repository\ResourceRepository; |
||||
use Chamilo\CoreBundle\Repository\ResourceRepositoryInterface; |
||||
use Chamilo\CourseBundle\Entity\CGroupInfo; |
||||
use Chamilo\UserBundle\Entity\User; |
||||
use Doctrine\ORM\QueryBuilder; |
||||
use Symfony\Component\Form\FormInterface; |
||||
use Symfony\Component\HttpFoundation\File\UploadedFile; |
||||
use Symfony\Component\Security\Core\Exception\AccessDeniedException; |
||||
|
||||
final class CChatConversationRepository extends ResourceRepository implements ResourceRepositoryInterface |
||||
{ |
||||
public function getResourceSettings(): ResourceSettings |
||||
{ |
||||
$settings = new ResourceSettings(); |
||||
$settings |
||||
->setAllowNodeCreation(false) |
||||
->setAllowResourceCreation(false) |
||||
->setAllowResourceUpload(false) |
||||
; |
||||
|
||||
return $settings; |
||||
} |
||||
|
||||
public function getResources(User $user, ResourceNode $parentNode, Course $course = null, Session $session = null, CGroupInfo $group = null): QueryBuilder |
||||
{ |
||||
return $this->getResourcesByCourse($course, $session, $group, $parentNode); |
||||
} |
||||
|
||||
public function saveUpload(UploadedFile $file) |
||||
{ |
||||
throw new AccessDeniedException(); |
||||
} |
||||
|
||||
public function saveResource(FormInterface $form, $course, $session, $fileType) |
||||
{ |
||||
} |
||||
|
||||
public function getTitleColumn(Grid $grid): Column |
||||
{ |
||||
return $grid->getColumn('name'); |
||||
} |
||||
} |
Loading…
Reference in new issue