Completed
Push — master ( 2e5ec2...8a55f8 )
by Jignesh
01:13
created

initMeeting::initHooksCreate()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 1
dl 0
loc 11
rs 9.9
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\HooksCreateParameters;
13
use BigBlueButton\Parameters\IsMeetingRunningParameters;
14
use BigBlueButton\Parameters\JoinMeetingParameters;
15
use BigBlueButton\Parameters\PublishRecordingsParameters;
16
use BigBlueButton\Parameters\SetConfigXMLParameters;
17
use Illuminate\Support\Fluent;
18
use Illuminate\Support\Str;
19
20
trait initMeeting
21
{
22
23
    /*
24
     * required fields
25
     * meetingID
26
     * meetingName
27
     *
28
     */
29
    public function initCreateMeeting(array $parameters)
30
    {
31
        $request = Fluent($parameters);
32
        $meetingParams = new CreateMeetingParameters($request->meetingID, $request->meetingName);
33
        $meetingParams->setModeratorPassword($request->get('moderatorPW', Str::random(config('bigbluebutton.create.passwordLength', 8))));
34
        $meetingParams->setAttendeePassword($request->get('attendeePW', Str::random(config('bigbluebutton.create.passwordLength', 8))));
35
        $meetingParams->setDuration($request->get('duration', config('bigbluebutton.create.duration', 0)));
36
        $meetingParams->setRecord($request->get('record', config('bigbluebutton.create.record', false)));
37
        $meetingParams->setMaxParticipants($request->get('maxParticipants', config('bigbluebutton.create.maxParticipants', 0)));
38
        $meetingParams->setLogoutUrl($request->get('logoutUrl', config('bigbluebutton.create.logoutUrl', null)));
39
        $meetingParams->setWelcomeMessage(
40
            $request->get('welcomeMessage', config('bigbluebutton.create.welcomeMessage', null))
41
        );
42
        $meetingParams->setDialNumber(
43
            $request->get('dialNumber', config('bigbluebutton.create.dialNumber', null))
44
        );
45
        $meetingParams->setBreakout(
46
            $request->get('isBreakout', config('bigbluebutton.create.isBreakout', false))
47
        );
48
        $meetingParams->setModeratorOnlyMessage(
49
            $request->get('moderatorOnlyMessage', config('bigbluebutton.create.moderatorOnlyMessage', null))
50
        );
51
        $meetingParams->setAutoStartRecording(
52
            $request->get('autoStartRecording', config('bigbluebutton.create.autoStartRecording', false))
53
        );
54
        $meetingParams->setAllowStartStopRecording(
55
            $request->get('allowStartStopRecording', config('bigbluebutton.create.allowStartStopRecording', true))
56
        );
57
        $meetingParams->setWebcamsOnlyForModerator(
58
            $request->get('webcamsOnlyForModerator', config('bigbluebutton.create.webcamsOnlyForModerator', false))
59
        );
60
        $meetingParams->setLogo(
61
            $request->get('logo', config('bigbluebutton.create.logo', null))
62
        );
63
        $meetingParams->setCopyright(
64
            $request->get('copyright', config('bigbluebutton.create.copyright', null))
65
        );
66
        $meetingParams->setMuteOnStart(
67
            $request->get('muteOnStart', config('bigbluebutton.create.muteOnStart', false))
68
        );
69
70
        $meetingParams->setLockSettingsDisableCam(
71
            $request->get('lockSettingsDisableCam', config('bigbluebutton.create.lockSettingsDisableCam', false))
72
        );
73
        $meetingParams->setLockSettingsDisableMic(
74
            $request->get('lockSettingsDisableMic', config('bigbluebutton.create.lockSettingsDisableMic', false))
75
        );
76
        $meetingParams->setLockSettingsDisablePrivateChat(
77
            $request->get('lockSettingsDisablePrivateChat', config('bigbluebutton.create.lockSettingsDisablePrivateChat', false))
78
        );
79
        $meetingParams->setLockSettingsDisablePublicChat(
80
            $request->get('lockSettingsDisablePublicChat', config('bigbluebutton.create.lockSettingsDisablePublicChat', false))
81
        );
82
        $meetingParams->setLockSettingsDisableNote(
83
            $request->get('lockSettingsDisableNote', config('bigbluebutton.create.lockSettingsDisableNote', false))
84
        );
85
        $meetingParams->setLockSettingsLockedLayout(
86
            $request->get('lockSettingsLockedLayout', config('bigbluebutton.create.lockSettingsLockedLayout', false))
87
        );
88
        $meetingParams->setLockSettingsLockOnJoin(
89
            $request->get('lockSettingsLockOnJoin', config('bigbluebutton.create.lockSettingsLockOnJoin', false))
90
        );
91
        $meetingParams->setLockSettingsLockOnJoinConfigurable(
92
            $request->get('lockSettingsLockOnJoinConfigurable', config('bigbluebutton.create.lockSettingsLockOnJoinConfigurable', false))
93
        );
94
95
        if (!is_null($request->get('endCallbackUrl', null))) {
96
            $meetingParams->setEndCallbackUrl($request->get('endCallbackUrl', null));
97
        }
98
99
        $meetingParams->setFreeJoin($request->get('freeJoin', false));
100
101
        $presentation = (array)$request->get('presentation', null);
102
        foreach ($presentation as $item) {
103
            if (isset($item['fileName']) && !empty($item['fileName'])) {
104
                if (isset($item['link']) && !empty($item['link'])) {
105
                    $meetingParams->addPresentation(trim($item['link']), null, trim($item['fileName']));
106
                } elseif (isset($item['content']) && !empty($item['content'])) {
107
                    $meetingParams->addPresentation(trim($item['fileName']), trim($item['content']), null);
108
                }
109
            }
110
        }
111
112
        $meta = (array)$request->get('meta', null);
113
        foreach ($meta as $key => $value) {
114
            $meetingParams->addMeta(trim($key), trim($value));
115
        }
116
117
        return $meetingParams;
118
    }
119
120
    /*
121
     * required fields:
122
     * meetingID
123
     * moderatorPW close meeting must be there moderator password
124
     */
125
    public function initCloseMeeting(array $parameters)
126
    {
127
        $request = Fluent($parameters);
128
129
        return (new EndMeetingParameters($request->meetingID, $request->moderatorPW));
130
    }
131
132
    /*
133
     *  required fields
134
     *
135
     *  meetingID
136
     *  userName join by name
137
     *  password which role want to join
138
     */
139
    public function initJoinMeeting(array $parameters)
140
    {
141
        $request = Fluent($parameters);
142
        $meetingParams = new JoinMeetingParameters($request->meetingID, $request->userName, $request->password);
143
        $meetingParams->setRedirect($request->get('redirect', config('bigbluebutton.join.redirect', true)));
144
        $meetingParams->setJoinViaHtml5($request->get('joinViaHtml5', config('bigbluebutton.join.joinViaHtml5', true)));
145
        $meetingParams->setUserId($request->get('userId', null));
146
        if ($request->createTime) {
147
            $meetingParams->setCreationTime($request->createTime);
148
        }
149
        if ($request->configToken) {
150
            $meetingParams->setConfigToken($request->configToken);
151
        }
152
        if ($request->webVoiceConf) {
153
            $meetingParams->setWebVoiceConf($request->webVoiceConf);
154
        }
155
        if ($request->avatarUrl) {
156
            $meetingParams->setAvatarURL($request->avatarUrl);
157
        }
158
        if ($request->clientUrl) {
159
            $meetingParams->setClientURL($request->clientUrl);
160
        }
161
162
        return $meetingParams;
163
    }
164
165
    /*
166
     * required fields
167
     * meetingID
168
     */
169
    public function initIsMeetingRunning(array $parameters)
170
    {
171
        $request = Fluent($parameters);
172
173
        return (new IsMeetingRunningParameters($request->meetingID));
174
    }
175
176
    /*
177
     * required fields
178
     * meetingID
179
     * moderatorPW must be there moderator password
180
     */
181
    public function initGetMeetingInfo($parameters)
182
    {
183
        $request = Fluent($parameters);
184
185
        return (new GetMeetingInfoParameters($request->meetingID, $request->moderatorPW));
186
    }
187
188
    /*
189
     *
190
     * optional fields
191
     * meetingID
192
     * recordID
193
     * state
194
     */
195
    public function initGetRecordings(array $parameters)
196
    {
197
        $request = Fluent($parameters);
198
        $recordings = new GetRecordingsParameters();
199
200
        $recordings->setMeetingId(implode(',', (array)$request->get('meetingID')));
201
        $recordings->setRecordId(implode(',', (array)$request->get('recordID')));
202
        $recordings->setState($request->get('state', config('bigbluebutton.getRecordings.state')));
203
204
        return $recordings;
205
    }
206
207
    /**
208
     * @param array $parameters
209
     *
210
     * @return PublishRecordingsParameters
211
     */
212
    public function initPublishRecordings(array $parameters)
213
    {
214
        $request = Fluent($parameters);
215
        $recordings = new PublishRecordingsParameters(null, $request->get('publish', true));
216
        $recordings->setRecordingId(implode(',', (array)$request->get('recordID')));
217
218
        return $recordings;
219
    }
220
221
    /*
222
     * required fields
223
     * recordingID
224
     */
225
    public function initDeleteRecordings($recording)
226
    {
227
        $request = Fluent($recording);
228
229
        return (new DeleteRecordingsParameters(implode(',', (array)$request->get('recordID'))));
230
    }
231
232
    private function makeJoinMeetingArray($object, $parameters)
233
    {
234
        $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...
235
        $pass['password'] = $object->get('moderatorPW');
236
        if (isset($parameters['userName'])) {
237
            $pass['userName'] = $parameters['userName'];
238
        }
239
        $pass['meetingName'] = $object->get('meetingName');
240
        if (isset($parameters['redirect'])) {
241
            $pass['redirect'] = $parameters['redirect'];
242
        }
243
244
        return $pass;
245
    }
246
247
    /*
248
     * required fields
249
     * meetingID
250
     * meetingName
251
     * userName
252
     * attendeePW
253
     * moderatorPW
254
     * redirect
255
     */
256
    public function initStart(array $parameters)
257
    {
258
        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...
259
            $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...
260
            if (method_exists($object, 'isEmpty') && !$object->isEmpty()) {
261
                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...
262
            }
263
        } else {
264
            if (isset($parameters['moderatorPW'])) {
265
                $parameters['password'] = trim($parameters['moderatorPW']);
266
            }
267
268
            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...
269
        }
270
    }
271
272
    /**
273
     * @param $parameters
274
     *
275
     * @return SetConfigXMLParameters
276
     */
277
    public function initSetConfigXml(array $parameters)
278
    {
279
        $parameters = Fluent($parameters);
280
        $configXml = new SetConfigXMLParameters($parameters->get('meetingID'));
281
        $rawXml = $parameters->xml;
282
        if (!$parameters->xml instanceof \SimpleXMLElement) {
283
            $rawXml = new \SimpleXMLElement($parameters->xml);
284
        }
285
286
        $configXml->setRawXml($rawXml);
287
288
        return $configXml;
289
    }
290
291
    /**
292
     * @param array $parameters
293
     *
294
     * @return HooksCreateParameters
295
     */
296
    public function initHooksCreate(array $parameters)
297
    {
298
        $parameters = Fluent($parameters);
299
        $hooksCreate = new HooksCreateParameters($parameters->get('callbackURL'));
300
        if ($parameters->meetingID) {
301
            $hooksCreate->setMeetingId($parameters->meetingID);
302
        }
303
        $hooksCreate->setGetRaw($parameters->get('getRaw', false));
304
305
        return $hooksCreate;
306
    }
307
}
308