Completed
Push — master ( e09922...78d11c )
by Jignesh
01:13
created

initMeeting::initJoinMeeting()   B

Complexity

Conditions 6
Paths 32

Size

Total Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
nc 32
nop 1
dl 0
loc 25
rs 8.8977
c 0
b 0
f 0
1
<?php
2
3
4
namespace JoisarJignesh\Bigbluebutton\Services;
5
6
7
use BigBlueButton\Parameters\CreateMeetingParameters;
8
use BigBlueButton\Parameters\DeleteRecordingsParameters;
9
use BigBlueButton\Parameters\EndMeetingParameters;
10
use BigBlueButton\Parameters\GetMeetingInfoParameters;
11
use BigBlueButton\Parameters\GetRecordingsParameters;
12
use BigBlueButton\Parameters\IsMeetingRunningParameters;
13
use BigBlueButton\Parameters\JoinMeetingParameters;
14
use BigBlueButton\Parameters\PublishRecordingsParameters;
15
use Illuminate\Support\Str;
16
17
trait initMeeting
18
{
19
20
    /*
21
     * required fields
22
     * meetingID
23
     * meetingName
24
     *
25
     */
26
    public function initCreateMeeting(array $parameters)
27
    {
28
        $request = Fluent($parameters);
29
        $meetingParams = new CreateMeetingParameters($request->meetingID, $request->meetingName);
30
        $meetingParams->setModeratorPassword($request->get('moderatorPW', Str::random(config('bigbluebutton.create.passwordLength', 8))));
31
        $meetingParams->setAttendeePassword($request->get('attendeePW', Str::random(config('bigbluebutton.create.passwordLength', 8))));
32
        $meetingParams->setDuration($request->get('duration', config('bigbluebutton.create.duration', null)));
33
        $meetingParams->setRecord($request->get('record', config('bigbluebutton.create.record', false)));
34
        $meetingParams->setMaxParticipants($request->get('maxParticipants', config('bigbluebutton.create.maxParticipants', null)));
35
        $meetingParams->setLogoutUrl($request->get('logoutUrl', config('bigbluebutton.create.logoutUrl', null)));
36
        $meetingParams->setWelcomeMessage(
37
            $request->get('welcomeMessage', config('bigbluebutton.create.welcomeMessage', null))
38
        );
39
        $meetingParams->setDialNumber(
40
            $request->get('dialNumber', config('bigbluebutton.create.dialNumber', null))
41
        );
42
        $meetingParams->setBreakout(
43
            $request->get('isBreakout', config('bigbluebutton.create.isBreakout', false))
44
        );
45
        $meetingParams->setModeratorOnlyMessage(
46
            $request->get('moderatorOnlyMessage', config('bigbluebutton.create.moderatorOnlyMessage', null))
47
        );
48
        $meetingParams->setAutoStartRecording(
49
            $request->get('autoStartRecording', config('bigbluebutton.create.autoStartRecording', false))
50
        );
51
        $meetingParams->setAllowStartStopRecording(
52
            $request->get('allowStartStopRecording', config('bigbluebutton.create.allowStartStopRecording', true))
53
        );
54
        $meetingParams->setWebcamsOnlyForModerator(
55
            $request->get('webcamsOnlyForModerator', config('bigbluebutton.create.webcamsOnlyForModerator', false))
56
        );
57
        $meetingParams->setLogo(
58
            $request->get('logo', config('bigbluebutton.create.logo', null))
59
        );
60
        $meetingParams->setCopyright(
61
            $request->get('copyright', config('bigbluebutton.create.copyright', null))
62
        );
63
        $meetingParams->setMuteOnStart(
64
            $request->get('muteOnStart', config('bigbluebutton.create.muteOnStart', false))
65
        );
66
        $meetingParams->setLockSettingsDisableCam(
67
            $request->get('lockSettingsDisableCam', config('bigbluebutton.create.lockSettingsDisableCam', false))
68
        );
69
        $meetingParams->setLockSettingsDisableMic(
70
            $request->get('lockSettingsDisableMic', config('bigbluebutton.create.lockSettingsDisableMic', false))
71
        );
72
        $meetingParams->setLockSettingsDisablePrivateChat(
73
            $request->get('lockSettingsDisablePrivateChat', config('bigbluebutton.create.lockSettingsDisablePrivateChat', false))
74
        );
75
        $meetingParams->setLockSettingsDisablePublicChat(
76
            $request->get('lockSettingsDisablePublicChat', config('bigbluebutton.create.lockSettingsDisablePublicChat', false))
77
        );
78
        $meetingParams->setLockSettingsDisableNote(
79
            $request->get('lockSettingsDisableNote', config('bigbluebutton.create.lockSettingsDisableNote', false))
80
        );
81
        $meetingParams->setLockSettingsLockedLayout(
82
            $request->get('lockSettingsLockedLayout', config('bigbluebutton.create.lockSettingsLockedLayout', false))
83
        );
84
        $meetingParams->setLockSettingsLockOnJoin(
85
            $request->get('lockSettingsLockOnJoin', config('bigbluebutton.create.lockSettingsLockOnJoin', false))
86
        );
87
        $meetingParams->setLockSettingsLockOnJoinConfigurable(
88
            $request->get('lockSettingsLockOnJoinConfigurable', config('bigbluebutton.create.lockSettingsLockOnJoinConfigurable', false))
89
        );
90
91
        if (!is_null($request->get('endCallbackUrl', null))) {
92
            $meetingParams->setEndCallbackUrl($request->get('endCallbackUrl', null));
93
        }
94
95
        $meetingParams->setFreeJoin($request->get('freeJoin', false));
96
97
        $presentation = (array)$request->get('presentation', null);
98
        foreach ($presentation as $item) {
99
            if (isset($item['fileName']) && !empty($item['fileName'])) {
100
                if (isset($item['link']) && !empty($item['link'])) {
101
                    $meetingParams->addPresentation(trim($item['link']), null, trim($item['fileName']));
102
                } elseif (isset($item['content']) && !empty($item['content'])) {
103
                    $meetingParams->addPresentation(trim($item['fileName']), trim($item['content']), null);
104
                }
105
            }
106
        }
107
108
        $meta = (array)$request->get('meta', null);
109
        foreach ($meta as $key => $value) {
110
            $meetingParams->addMeta(trim($key), trim($value));
111
        }
112
113
        return $meetingParams;
114
    }
115
116
    /*
117
     * required fields:
118
     * meetingID
119
     * moderatorPW close meeting must be there moderator password
120
     */
121
    public function initCloseMeeting(array $parameters)
122
    {
123
        $request = Fluent($parameters);
124
125
        return (new EndMeetingParameters($request->meetingID, $request->moderatorPW));
126
    }
127
128
    /*
129
     *  required fields
130
     *
131
     *  meetingID
132
     *  userName join by name
133
     *  password which role want to join
134
     */
135
    public function initJoinMeeting(array $parameters)
136
    {
137
        $request = Fluent($parameters);
138
        $meetingParams = new JoinMeetingParameters($request->meetingID, $request->userName, $request->password);
139
        $meetingParams->setRedirect($request->get('redirect', config('bigbluebutton.join.redirect', true)));
140
        $meetingParams->setJoinViaHtml5($request->get('joinViaHtml5', config('bigbluebutton.join.joinViaHtml5', true)));
141
        $meetingParams->setUserId($request->get('userId', null));
142
        if ($request->createTime) {
143
            $meetingParams->setCreationTime($request->createTime);
144
        }
145
        if ($request->configToken) {
146
            $meetingParams->setConfigToken($request->configToken);
147
        }
148
        if ($request->webVoiceConf) {
149
            $meetingParams->setWebVoiceConf($request->webVoiceConf);
150
        }
151
        if ($request->avatarUrl) {
152
            $meetingParams->setAvatarURL($request->avatarUrl);
153
        }
154
        if ($request->clientUrl) {
155
            $meetingParams->setClientURL($request->clientUrl);
156
        }
157
158
        return $meetingParams;
159
    }
160
161
    /*
162
     * required fields
163
     * meetingID
164
     */
165
    public function initIsMeetingRunning(array $parameters)
166
    {
167
        $request = Fluent($parameters);
168
169
        return (new IsMeetingRunningParameters($request->meetingID));
170
    }
171
172
    /*
173
     * required fields
174
     * meetingID
175
     * moderatorPW must be there moderator password
176
     */
177
    public function initGetMeetingInfo($parameters)
178
    {
179
        $request = Fluent($parameters);
180
181
        return (new GetMeetingInfoParameters($request->meetingID, $request->moderatorPW));
182
    }
183
184
    /*
185
     *
186
     * optional fields
187
     * meetingID
188
     * recordID
189
     * state
190
     */
191
    public function initGetRecordings(array $parameters)
192
    {
193
        $request = Fluent($parameters);
194
        $recordings = new GetRecordingsParameters();
195
196
        $recordings->setMeetingId(implode(',', (array) $request->get('meetingID')));
197
        $recordings->setRecordId(implode(',', (array) $request->get('recordID')));
198
        $recordings->setState($request->get('state', config('bigbluebutton.getRecordings.state')));
199
200
        return $recordings;
201
    }
202
203
    /**
204
     * @param array $parameters
205
     *
206
     * @return PublishRecordingsParameters
207
     */
208
    public function initPublishRecordings(array $parameters)
209
    {
210
        $request = Fluent($parameters);
211
        $recordings = new PublishRecordingsParameters(null, $request->get('publish', true));
212
        $recordings->setRecordingId(implode(',', (array)$request->get('recordID')));
213
214
        return $recordings;
215
    }
216
217
    /*
218
     * required fields
219
     * recordingID
220
     */
221
    public function initDeleteRecordings($recording)
222
    {
223
        $request = Fluent($recording);
224
225
        return (new DeleteRecordingsParameters(implode(',', (array)$request->get('recordID'))));
226
    }
227
228
    private function makeJoinMeetingArray($object, $parameters)
229
    {
230
        $pass['meetingID'] = $object->get('meetingID');
0 ignored issues
show
Coding Style Comprehensibility introduced by
$pass was never initialized. Although not strictly required by PHP, it is generally a good practice to add $pass = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
231
        $pass['password'] = $object->get('moderatorPW');
232
        if (isset($parameters['userName'])) {
233
            $pass['userName'] = $parameters['userName'];
234
        }
235
        $pass['meetingName'] = $object->get('meetingName');
236
        if (isset($parameters['redirect'])) {
237
            $pass['redirect'] = $parameters['redirect'];
238
        }
239
240
        return $pass;
241
    }
242
243
    /*
244
     * required fields
245
     * meetingID
246
     * meetingName
247
     * userName
248
     * attendeePW
249
     * moderatorPW
250
     * redirect
251
     */
252
    public function initStart(array $parameters)
253
    {
254
        if ($this->getMeetingInfo($parameters)->isEmpty()) {
0 ignored issues
show
Bug introduced by
The method getMeetingInfo() does not exist on JoisarJignesh\Bigbluebutton\Services\initMeeting. Did you maybe mean initGetMeetingInfo()?

This check marks calls to methods that do not seem to exist on an object.

This is most likely the result of a method being renamed without all references to it being renamed likewise.

Loading history...
255
            $object = $this->create($parameters);
0 ignored issues
show
Bug introduced by
The method create() does not exist on JoisarJignesh\Bigbluebutton\Services\initMeeting. Did you maybe mean initCreateMeeting()?

This check marks calls to methods that do not seem to exist on an object.

This is most likely the result of a method being renamed without all references to it being renamed likewise.

Loading history...
256
            if (method_exists($object, 'isEmpty') && !$object->isEmpty()) {
257
                return $this->join($this->makeJoinMeetingArray($object, $parameters));
0 ignored issues
show
Bug introduced by
It seems like join() must be provided by classes using this trait. How about adding it as abstract method to this trait?

This check looks for methods that are used by a trait but not required by it.

To illustrate, let’s look at the following code example

trait Idable {
    public function equalIds(Idable $other) {
        return $this->getId() === $other->getId();
    }
}

The trait Idable provides a method equalsId that in turn relies on the method getId(). If this method does not exist on a class mixing in this trait, the method will fail.

Adding the getId() as an abstract method to the trait will make sure it is available.

Loading history...
258
            }
259
        } else {
260
            if (isset($parameters['moderatorPW'])) {
261
                $parameters['password'] = trim($parameters['moderatorPW']);
262
            }
263
264
            return $this->join($parameters);
0 ignored issues
show
Bug introduced by
It seems like join() must be provided by classes using this trait. How about adding it as abstract method to this trait?

This check looks for methods that are used by a trait but not required by it.

To illustrate, let’s look at the following code example

trait Idable {
    public function equalIds(Idable $other) {
        return $this->getId() === $other->getId();
    }
}

The trait Idable provides a method equalsId that in turn relies on the method getId(). If this method does not exist on a class mixing in this trait, the method will fail.

Adding the getId() as an abstract method to the trait will make sure it is available.

Loading history...
265
        }
266
    }
267
268
269
}
270