Issues (2130)

plugin/coursehomenotify/content.php (1 issue)

1
<?php
2
/* For licensing terms, see /license.txt */
3
4
require_once __DIR__.'/../../main/inc/global.inc.php';
5
6
use Chamilo\PluginBundle\Entity\CourseHomeNotify\Notification;
0 ignored issues
show
This use statement conflicts with another class in this namespace, Notification. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
7
use Chamilo\PluginBundle\Entity\CourseHomeNotify\NotificationRelUser;
8
9
api_block_anonymous_users(true);
10
api_protect_course_script(true);
11
12
$plugin = CourseHomeNotifyPlugin::create();
13
$userId = api_get_user_id();
14
$courseId = api_get_course_int_id();
15
16
if (
17
    empty($courseId) ||
18
    empty($userId) ||
19
    'true' !== $plugin->get(CourseHomeNotifyPlugin::SETTING_ENABLED)
20
) {
21
    api_not_allowed(true);
22
}
23
24
$user = api_get_user_entity($userId);
25
$course = api_get_course_entity($courseId);
26
$hash = isset($_GET['hash']) ? Security::remove_XSS($_GET['hash']) : null;
27
28
$em = Database::getManager();
29
/** @var Notification $notification */
30
$notification = $em
31
    ->getRepository('ChamiloPluginBundle:CourseHomeNotify\Notification')
32
    ->findOneBy(['course' => $course, 'hash' => $hash]);
33
34
if (!$notification) {
35
    api_not_allowed(true);
36
}
37
38
$notificationUser = $em
39
    ->getRepository('ChamiloPluginBundle:CourseHomeNotify\NotificationRelUser')
40
    ->findOneBy(['notification' => $notification, 'user' => $user]);
41
42
if (!$notificationUser) {
43
    $notificationUser = new NotificationRelUser();
44
    $notificationUser
45
        ->setUser($user)
46
        ->setNotification($notification);
47
48
    $em->persist($notificationUser);
49
    $em->flush();
50
}
51
52
header('Location: '.$notification->getExpirationLink());
53