Completed
Push — master ( 5959a8...2e5ec2 )
by Jignesh
01:13
created

initMeeting::initCreateMeeting()   C

Complexity

Conditions 10
Paths 20

Size

Total Lines 89

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 10
nc 20
nop 1
dl 0
loc 89
rs 6.3733
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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