Completed
Push — master ( 33443d...de9a4e )
by Sam
03:47
created

Instance::clearAllReferences()   C

Complexity

Conditions 12
Paths 33

Size

Total Lines 36
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
dl 0
loc 36
rs 5.1612
c 2
b 0
f 0
cc 12
eloc 22
nc 33
nop 1

How to fix   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
namespace Jalle19\StatusManager\Database\Base;
4
5
use \Exception;
6
use \PDO;
7
use Jalle19\StatusManager\Database\Channel as ChildChannel;
8
use Jalle19\StatusManager\Database\ChannelQuery as ChildChannelQuery;
9
use Jalle19\StatusManager\Database\Connection as ChildConnection;
10
use Jalle19\StatusManager\Database\ConnectionQuery as ChildConnectionQuery;
11
use Jalle19\StatusManager\Database\Input as ChildInput;
12
use Jalle19\StatusManager\Database\InputQuery as ChildInputQuery;
13
use Jalle19\StatusManager\Database\Instance as ChildInstance;
14
use Jalle19\StatusManager\Database\InstanceQuery as ChildInstanceQuery;
15
use Jalle19\StatusManager\Database\Subscription as ChildSubscription;
16
use Jalle19\StatusManager\Database\SubscriptionQuery as ChildSubscriptionQuery;
17
use Jalle19\StatusManager\Database\User as ChildUser;
18
use Jalle19\StatusManager\Database\UserQuery as ChildUserQuery;
19
use Jalle19\StatusManager\Database\Map\ChannelTableMap;
20
use Jalle19\StatusManager\Database\Map\ConnectionTableMap;
21
use Jalle19\StatusManager\Database\Map\InputTableMap;
22
use Jalle19\StatusManager\Database\Map\InstanceTableMap;
23
use Jalle19\StatusManager\Database\Map\SubscriptionTableMap;
24
use Jalle19\StatusManager\Database\Map\UserTableMap;
25
use Propel\Runtime\Propel;
26
use Propel\Runtime\ActiveQuery\Criteria;
27
use Propel\Runtime\ActiveQuery\ModelCriteria;
28
use Propel\Runtime\ActiveRecord\ActiveRecordInterface;
29
use Propel\Runtime\Collection\Collection;
30
use Propel\Runtime\Collection\ObjectCollection;
31
use Propel\Runtime\Connection\ConnectionInterface;
32
use Propel\Runtime\Exception\BadMethodCallException;
33
use Propel\Runtime\Exception\LogicException;
34
use Propel\Runtime\Exception\PropelException;
35
use Propel\Runtime\Map\TableMap;
36
use Propel\Runtime\Parser\AbstractParser;
37
38
/**
39
 * Base class that represents a row from the 'instance' table.
40
 *
41
 *
42
 *
43
* @package    propel.generator.Jalle19.StatusManager.Database.Base
44
*/
45
abstract class Instance implements ActiveRecordInterface
46
{
47
    /**
48
     * TableMap class name
49
     */
50
    const TABLE_MAP = '\\Jalle19\\StatusManager\\Database\\Map\\InstanceTableMap';
51
52
53
    /**
54
     * attribute to determine if this object has previously been saved.
55
     * @var boolean
56
     */
57
    protected $new = true;
58
59
    /**
60
     * attribute to determine whether this object has been deleted.
61
     * @var boolean
62
     */
63
    protected $deleted = false;
64
65
    /**
66
     * The columns that have been modified in current object.
67
     * Tracking modified columns allows us to only update modified columns.
68
     * @var array
69
     */
70
    protected $modifiedColumns = array();
71
72
    /**
73
     * The (virtual) columns that are added at runtime
74
     * The formatters can add supplementary columns based on a resultset
75
     * @var array
76
     */
77
    protected $virtualColumns = array();
78
79
    /**
80
     * The value for the name field.
81
     *
82
     * @var        string
83
     */
84
    protected $name;
85
86
    /**
87
     * @var        ObjectCollection|ChildUser[] Collection to store aggregation of ChildUser objects.
88
     */
89
    protected $collUsers;
90
    protected $collUsersPartial;
91
92
    /**
93
     * @var        ObjectCollection|ChildConnection[] Collection to store aggregation of ChildConnection objects.
94
     */
95
    protected $collConnections;
96
    protected $collConnectionsPartial;
97
98
    /**
99
     * @var        ObjectCollection|ChildInput[] Collection to store aggregation of ChildInput objects.
100
     */
101
    protected $collInputs;
102
    protected $collInputsPartial;
103
104
    /**
105
     * @var        ObjectCollection|ChildChannel[] Collection to store aggregation of ChildChannel objects.
106
     */
107
    protected $collChannels;
108
    protected $collChannelsPartial;
109
110
    /**
111
     * @var        ObjectCollection|ChildSubscription[] Collection to store aggregation of ChildSubscription objects.
112
     */
113
    protected $collSubscriptions;
114
    protected $collSubscriptionsPartial;
115
116
    /**
117
     * Flag to prevent endless save loop, if this object is referenced
118
     * by another object which falls in this transaction.
119
     *
120
     * @var boolean
121
     */
122
    protected $alreadyInSave = false;
123
124
    /**
125
     * An array of objects scheduled for deletion.
126
     * @var ObjectCollection|ChildUser[]
127
     */
128
    protected $usersScheduledForDeletion = null;
129
130
    /**
131
     * An array of objects scheduled for deletion.
132
     * @var ObjectCollection|ChildConnection[]
133
     */
134
    protected $connectionsScheduledForDeletion = null;
135
136
    /**
137
     * An array of objects scheduled for deletion.
138
     * @var ObjectCollection|ChildInput[]
139
     */
140
    protected $inputsScheduledForDeletion = null;
141
142
    /**
143
     * An array of objects scheduled for deletion.
144
     * @var ObjectCollection|ChildChannel[]
145
     */
146
    protected $channelsScheduledForDeletion = null;
147
148
    /**
149
     * An array of objects scheduled for deletion.
150
     * @var ObjectCollection|ChildSubscription[]
151
     */
152
    protected $subscriptionsScheduledForDeletion = null;
153
154
    /**
155
     * Initializes internal state of Jalle19\StatusManager\Database\Base\Instance object.
156
     */
157
    public function __construct()
158
    {
159
    }
160
161
    /**
162
     * Returns whether the object has been modified.
163
     *
164
     * @return boolean True if the object has been modified.
165
     */
166
    public function isModified()
167
    {
168
        return !!$this->modifiedColumns;
169
    }
170
171
    /**
172
     * Has specified column been modified?
173
     *
174
     * @param  string  $col column fully qualified name (TableMap::TYPE_COLNAME), e.g. Book::AUTHOR_ID
175
     * @return boolean True if $col has been modified.
176
     */
177
    public function isColumnModified($col)
178
    {
179
        return $this->modifiedColumns && isset($this->modifiedColumns[$col]);
0 ignored issues
show
Bug Best Practice introduced by
The expression $this->modifiedColumns of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
180
    }
181
182
    /**
183
     * Get the columns that have been modified in this object.
184
     * @return array A unique list of the modified column names for this object.
185
     */
186
    public function getModifiedColumns()
187
    {
188
        return $this->modifiedColumns ? array_keys($this->modifiedColumns) : [];
189
    }
190
191
    /**
192
     * Returns whether the object has ever been saved.  This will
193
     * be false, if the object was retrieved from storage or was created
194
     * and then saved.
195
     *
196
     * @return boolean true, if the object has never been persisted.
197
     */
198
    public function isNew()
199
    {
200
        return $this->new;
201
    }
202
203
    /**
204
     * Setter for the isNew attribute.  This method will be called
205
     * by Propel-generated children and objects.
206
     *
207
     * @param boolean $b the state of the object.
208
     */
209
    public function setNew($b)
210
    {
211
        $this->new = (boolean) $b;
212
    }
213
214
    /**
215
     * Whether this object has been deleted.
216
     * @return boolean The deleted state of this object.
217
     */
218
    public function isDeleted()
219
    {
220
        return $this->deleted;
221
    }
222
223
    /**
224
     * Specify whether this object has been deleted.
225
     * @param  boolean $b The deleted state of this object.
226
     * @return void
227
     */
228
    public function setDeleted($b)
229
    {
230
        $this->deleted = (boolean) $b;
231
    }
232
233
    /**
234
     * Sets the modified state for the object to be false.
235
     * @param  string $col If supplied, only the specified column is reset.
236
     * @return void
237
     */
238 View Code Duplication
    public function resetModified($col = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
239
    {
240
        if (null !== $col) {
241
            if (isset($this->modifiedColumns[$col])) {
242
                unset($this->modifiedColumns[$col]);
243
            }
244
        } else {
245
            $this->modifiedColumns = array();
246
        }
247
    }
248
249
    /**
250
     * Compares this with another <code>Instance</code> instance.  If
251
     * <code>obj</code> is an instance of <code>Instance</code>, delegates to
252
     * <code>equals(Instance)</code>.  Otherwise, returns <code>false</code>.
253
     *
254
     * @param  mixed   $obj The object to compare to.
255
     * @return boolean Whether equal to the object specified.
256
     */
257 View Code Duplication
    public function equals($obj)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
258
    {
259
        if (!$obj instanceof static) {
260
            return false;
261
        }
262
263
        if ($this === $obj) {
264
            return true;
265
        }
266
267
        if (null === $this->getPrimaryKey() || null === $obj->getPrimaryKey()) {
268
            return false;
269
        }
270
271
        return $this->getPrimaryKey() === $obj->getPrimaryKey();
272
    }
273
274
    /**
275
     * Get the associative array of the virtual columns in this object
276
     *
277
     * @return array
278
     */
279
    public function getVirtualColumns()
280
    {
281
        return $this->virtualColumns;
282
    }
283
284
    /**
285
     * Checks the existence of a virtual column in this object
286
     *
287
     * @param  string  $name The virtual column name
288
     * @return boolean
289
     */
290
    public function hasVirtualColumn($name)
291
    {
292
        return array_key_exists($name, $this->virtualColumns);
293
    }
294
295
    /**
296
     * Get the value of a virtual column in this object
297
     *
298
     * @param  string $name The virtual column name
299
     * @return mixed
300
     *
301
     * @throws PropelException
302
     */
303 View Code Duplication
    public function getVirtualColumn($name)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
304
    {
305
        if (!$this->hasVirtualColumn($name)) {
306
            throw new PropelException(sprintf('Cannot get value of inexistent virtual column %s.', $name));
307
        }
308
309
        return $this->virtualColumns[$name];
310
    }
311
312
    /**
313
     * Set the value of a virtual column in this object
314
     *
315
     * @param string $name  The virtual column name
316
     * @param mixed  $value The value to give to the virtual column
317
     *
318
     * @return $this|Instance The current object, for fluid interface
319
     */
320
    public function setVirtualColumn($name, $value)
321
    {
322
        $this->virtualColumns[$name] = $value;
323
324
        return $this;
325
    }
326
327
    /**
328
     * Logs a message using Propel::log().
329
     *
330
     * @param  string  $msg
331
     * @param  int     $priority One of the Propel::LOG_* logging levels
332
     * @return boolean
333
     */
334
    protected function log($msg, $priority = Propel::LOG_INFO)
335
    {
336
        return Propel::log(get_class($this) . ': ' . $msg, $priority);
337
    }
338
339
    /**
340
     * Export the current object properties to a string, using a given parser format
341
     * <code>
342
     * $book = BookQuery::create()->findPk(9012);
343
     * echo $book->exportTo('JSON');
344
     *  => {"Id":9012,"Title":"Don Juan","ISBN":"0140422161","Price":12.99,"PublisherId":1234,"AuthorId":5678}');
345
     * </code>
346
     *
347
     * @param  mixed   $parser                 A AbstractParser instance, or a format name ('XML', 'YAML', 'JSON', 'CSV')
348
     * @param  boolean $includeLazyLoadColumns (optional) Whether to include lazy load(ed) columns. Defaults to TRUE.
349
     * @return string  The exported data
350
     */
351 View Code Duplication
    public function exportTo($parser, $includeLazyLoadColumns = true)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
352
    {
353
        if (!$parser instanceof AbstractParser) {
354
            $parser = AbstractParser::getParser($parser);
355
        }
356
357
        return $parser->fromArray($this->toArray(TableMap::TYPE_PHPNAME, $includeLazyLoadColumns, array(), true));
0 ignored issues
show
Bug introduced by
It seems like $this->toArray(\Propel\R...Columns, array(), true) targeting Jalle19\StatusManager\Da...ase\Instance::toArray() can also be of type string; however, Propel\Runtime\Parser\AbstractParser::fromArray() does only seem to accept array, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
358
    }
359
360
    /**
361
     * Clean up internal collections prior to serializing
362
     * Avoids recursive loops that turn into segmentation faults when serializing
363
     */
364 View Code Duplication
    public function __sleep()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
365
    {
366
        $this->clearAllReferences();
367
368
        $cls = new \ReflectionClass($this);
369
        $propertyNames = [];
370
        $serializableProperties = array_diff($cls->getProperties(), $cls->getProperties(\ReflectionProperty::IS_STATIC));
371
372
        foreach($serializableProperties as $property) {
373
            $propertyNames[] = $property->getName();
374
        }
375
376
        return $propertyNames;
377
    }
378
379
    /**
380
     * Get the [name] column value.
381
     *
382
     * @return string
383
     */
384
    public function getName()
385
    {
386
        return $this->name;
387
    }
388
389
    /**
390
     * Set the value of [name] column.
391
     *
392
     * @param string $v new value
393
     * @return $this|\Jalle19\StatusManager\Database\Instance The current object (for fluent API support)
394
     */
395
    public function setName($v)
396
    {
397
        if ($v !== null) {
398
            $v = (string) $v;
399
        }
400
401
        if ($this->name !== $v) {
402
            $this->name = $v;
403
            $this->modifiedColumns[InstanceTableMap::COL_NAME] = true;
404
        }
405
406
        return $this;
407
    } // setName()
408
409
    /**
410
     * Indicates whether the columns in this object are only set to default values.
411
     *
412
     * This method can be used in conjunction with isModified() to indicate whether an object is both
413
     * modified _and_ has some values set which are non-default.
414
     *
415
     * @return boolean Whether the columns in this object are only been set with default values.
416
     */
417
    public function hasOnlyDefaultValues()
418
    {
419
        // otherwise, everything was equal, so return TRUE
420
        return true;
421
    } // hasOnlyDefaultValues()
422
423
    /**
424
     * Hydrates (populates) the object variables with values from the database resultset.
425
     *
426
     * An offset (0-based "start column") is specified so that objects can be hydrated
427
     * with a subset of the columns in the resultset rows.  This is needed, for example,
428
     * for results of JOIN queries where the resultset row includes columns from two or
429
     * more tables.
430
     *
431
     * @param array   $row       The row returned by DataFetcher->fetch().
432
     * @param int     $startcol  0-based offset column which indicates which restultset column to start with.
433
     * @param boolean $rehydrate Whether this object is being re-hydrated from the database.
434
     * @param string  $indexType The index type of $row. Mostly DataFetcher->getIndexType().
435
                                  One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME
436
     *                            TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
437
     *
438
     * @return int             next starting column
439
     * @throws PropelException - Any caught Exception will be rewrapped as a PropelException.
440
     */
441
    public function hydrate($row, $startcol = 0, $rehydrate = false, $indexType = TableMap::TYPE_NUM)
442
    {
443
        try {
444
445
            $col = $row[TableMap::TYPE_NUM == $indexType ? 0 + $startcol : InstanceTableMap::translateFieldName('Name', TableMap::TYPE_PHPNAME, $indexType)];
446
            $this->name = (null !== $col) ? (string) $col : null;
447
            $this->resetModified();
448
449
            $this->setNew(false);
450
451
            if ($rehydrate) {
452
                $this->ensureConsistency();
453
            }
454
455
            return $startcol + 1; // 1 = InstanceTableMap::NUM_HYDRATE_COLUMNS.
456
457
        } catch (Exception $e) {
458
            throw new PropelException(sprintf('Error populating %s object', '\\Jalle19\\StatusManager\\Database\\Instance'), 0, $e);
459
        }
460
    }
461
462
    /**
463
     * Checks and repairs the internal consistency of the object.
464
     *
465
     * This method is executed after an already-instantiated object is re-hydrated
466
     * from the database.  It exists to check any foreign keys to make sure that
467
     * the objects related to the current object are correct based on foreign key.
468
     *
469
     * You can override this method in the stub class, but you should always invoke
470
     * the base method from the overridden method (i.e. parent::ensureConsistency()),
471
     * in case your model changes.
472
     *
473
     * @throws PropelException
474
     */
475
    public function ensureConsistency()
476
    {
477
    } // ensureConsistency
478
479
    /**
480
     * Reloads this object from datastore based on primary key and (optionally) resets all associated objects.
481
     *
482
     * This will only work if the object has been saved and has a valid primary key set.
483
     *
484
     * @param      boolean $deep (optional) Whether to also de-associated any related objects.
485
     * @param      ConnectionInterface $con (optional) The ConnectionInterface connection to use.
486
     * @return void
487
     * @throws PropelException - if this object is deleted, unsaved or doesn't have pk match in db
488
     */
489 View Code Duplication
    public function reload($deep = false, ConnectionInterface $con = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
490
    {
491
        if ($this->isDeleted()) {
492
            throw new PropelException("Cannot reload a deleted object.");
493
        }
494
495
        if ($this->isNew()) {
496
            throw new PropelException("Cannot reload an unsaved object.");
497
        }
498
499
        if ($con === null) {
500
            $con = Propel::getServiceContainer()->getReadConnection(InstanceTableMap::DATABASE_NAME);
501
        }
502
503
        // We don't need to alter the object instance pool; we're just modifying this instance
504
        // already in the pool.
505
506
        $dataFetcher = ChildInstanceQuery::create(null, $this->buildPkeyCriteria())->setFormatter(ModelCriteria::FORMAT_STATEMENT)->find($con);
0 ignored issues
show
Bug introduced by
It seems like you code against a specific sub-type and not the parent class Propel\Runtime\ActiveQuery\BaseModelCriteria as the method find() does only exist in the following sub-classes of Propel\Runtime\ActiveQuery\BaseModelCriteria: Jalle19\StatusManager\Database\Base\ChannelQuery, Jalle19\StatusManager\Da...se\Base\ConnectionQuery, Jalle19\StatusManager\Database\Base\InputQuery, Jalle19\StatusManager\Database\Base\InstanceQuery, Jalle19\StatusManager\Da...\Base\SubscriptionQuery, Jalle19\StatusManager\Database\Base\UserQuery, Jalle19\StatusManager\Database\ChannelQuery, Jalle19\StatusManager\Database\ConnectionQuery, Jalle19\StatusManager\Database\InputQuery, Jalle19\StatusManager\Database\InstanceQuery, Jalle19\StatusManager\Database\SubscriptionQuery, Jalle19\StatusManager\Database\UserQuery, Propel\Runtime\ActiveQuery\ModelCriteria. Maybe you want to instanceof check for one of these explicitly?

Let’s take a look at an example:

abstract class User
{
    /** @return string */
    abstract public function getPassword();
}

class MyUser extends User
{
    public function getPassword()
    {
        // return something
    }

    public function getDisplayName()
    {
        // return some name.
    }
}

class AuthSystem
{
    public function authenticate(User $user)
    {
        $this->logger->info(sprintf('Authenticating %s.', $user->getDisplayName()));
        // do something.
    }
}

In the above example, the authenticate() method works fine as long as you just pass instances of MyUser. However, if you now also want to pass a different sub-classes of User which does not have a getDisplayName() method, the code will break.

Available Fixes

  1. Change the type-hint for the parameter:

    class AuthSystem
    {
        public function authenticate(MyUser $user) { /* ... */ }
    }
    
  2. Add an additional type-check:

    class AuthSystem
    {
        public function authenticate(User $user)
        {
            if ($user instanceof MyUser) {
                $this->logger->info(/** ... */);
            }
    
            // or alternatively
            if ( ! $user instanceof MyUser) {
                throw new \LogicException(
                    '$user must be an instance of MyUser, '
                   .'other instances are not supported.'
                );
            }
    
        }
    }
    
Note: PHP Analyzer uses reverse abstract interpretation to narrow down the types inside the if block in such a case.
  1. Add the method to the parent class:

    abstract class User
    {
        /** @return string */
        abstract public function getPassword();
    
        /** @return string */
        abstract public function getDisplayName();
    }
    
Loading history...
507
        $row = $dataFetcher->fetch();
508
        $dataFetcher->close();
509
        if (!$row) {
510
            throw new PropelException('Cannot find matching row in the database to reload object values.');
511
        }
512
        $this->hydrate($row, 0, true, $dataFetcher->getIndexType()); // rehydrate
513
514
        if ($deep) {  // also de-associate any related objects?
515
516
            $this->collUsers = null;
517
518
            $this->collConnections = null;
519
520
            $this->collInputs = null;
521
522
            $this->collChannels = null;
523
524
            $this->collSubscriptions = null;
525
526
        } // if (deep)
0 ignored issues
show
Unused Code Comprehensibility introduced by
50% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
527
    }
528
529
    /**
530
     * Removes this object from datastore and sets delete attribute.
531
     *
532
     * @param      ConnectionInterface $con
533
     * @return void
534
     * @throws PropelException
535
     * @see Instance::setDeleted()
536
     * @see Instance::isDeleted()
537
     */
538 View Code Duplication
    public function delete(ConnectionInterface $con = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
539
    {
540
        if ($this->isDeleted()) {
541
            throw new PropelException("This object has already been deleted.");
542
        }
543
544
        if ($con === null) {
545
            $con = Propel::getServiceContainer()->getWriteConnection(InstanceTableMap::DATABASE_NAME);
546
        }
547
548
        $con->transaction(function () use ($con) {
549
            $deleteQuery = ChildInstanceQuery::create()
550
                ->filterByPrimaryKey($this->getPrimaryKey());
551
            $ret = $this->preDelete($con);
552
            if ($ret) {
553
                $deleteQuery->delete($con);
554
                $this->postDelete($con);
555
                $this->setDeleted(true);
556
            }
557
        });
558
    }
559
560
    /**
561
     * Persists this object to the database.
562
     *
563
     * If the object is new, it inserts it; otherwise an update is performed.
564
     * All modified related objects will also be persisted in the doSave()
565
     * method.  This method wraps all precipitate database operations in a
566
     * single transaction.
567
     *
568
     * @param      ConnectionInterface $con
569
     * @return int             The number of rows affected by this insert/update and any referring fk objects' save() operations.
570
     * @throws PropelException
571
     * @see doSave()
572
     */
573 View Code Duplication
    public function save(ConnectionInterface $con = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
574
    {
575
        if ($this->isDeleted()) {
576
            throw new PropelException("You cannot save an object that has been deleted.");
577
        }
578
579
        if ($con === null) {
580
            $con = Propel::getServiceContainer()->getWriteConnection(InstanceTableMap::DATABASE_NAME);
581
        }
582
583
        return $con->transaction(function () use ($con) {
584
            $isInsert = $this->isNew();
585
            $ret = $this->preSave($con);
586
            if ($isInsert) {
587
                $ret = $ret && $this->preInsert($con);
588
            } else {
589
                $ret = $ret && $this->preUpdate($con);
590
            }
591
            if ($ret) {
592
                $affectedRows = $this->doSave($con);
593
                if ($isInsert) {
594
                    $this->postInsert($con);
595
                } else {
596
                    $this->postUpdate($con);
597
                }
598
                $this->postSave($con);
599
                InstanceTableMap::addInstanceToPool($this);
600
            } else {
601
                $affectedRows = 0;
602
            }
603
604
            return $affectedRows;
605
        });
606
    }
607
608
    /**
609
     * Performs the work of inserting or updating the row in the database.
610
     *
611
     * If the object is new, it inserts it; otherwise an update is performed.
612
     * All related objects are also updated in this method.
613
     *
614
     * @param      ConnectionInterface $con
615
     * @return int             The number of rows affected by this insert/update and any referring fk objects' save() operations.
616
     * @throws PropelException
617
     * @see save()
618
     */
619
    protected function doSave(ConnectionInterface $con)
620
    {
621
        $affectedRows = 0; // initialize var to track total num of affected rows
622
        if (!$this->alreadyInSave) {
623
            $this->alreadyInSave = true;
624
625 View Code Duplication
            if ($this->isNew() || $this->isModified()) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
626
                // persist changes
627
                if ($this->isNew()) {
628
                    $this->doInsert($con);
629
                    $affectedRows += 1;
630
                } else {
631
                    $affectedRows += $this->doUpdate($con);
632
                }
633
                $this->resetModified();
634
            }
635
636
            if ($this->usersScheduledForDeletion !== null) {
637
                if (!$this->usersScheduledForDeletion->isEmpty()) {
638
                    \Jalle19\StatusManager\Database\UserQuery::create()
639
                        ->filterByPrimaryKeys($this->usersScheduledForDeletion->getPrimaryKeys(false))
640
                        ->delete($con);
641
                    $this->usersScheduledForDeletion = null;
642
                }
643
            }
644
645 View Code Duplication
            if ($this->collUsers !== null) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
646
                foreach ($this->collUsers as $referrerFK) {
647
                    if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
648
                        $affectedRows += $referrerFK->save($con);
649
                    }
650
                }
651
            }
652
653
            if ($this->connectionsScheduledForDeletion !== null) {
654
                if (!$this->connectionsScheduledForDeletion->isEmpty()) {
655
                    \Jalle19\StatusManager\Database\ConnectionQuery::create()
656
                        ->filterByPrimaryKeys($this->connectionsScheduledForDeletion->getPrimaryKeys(false))
657
                        ->delete($con);
658
                    $this->connectionsScheduledForDeletion = null;
659
                }
660
            }
661
662 View Code Duplication
            if ($this->collConnections !== null) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
663
                foreach ($this->collConnections as $referrerFK) {
664
                    if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
665
                        $affectedRows += $referrerFK->save($con);
666
                    }
667
                }
668
            }
669
670
            if ($this->inputsScheduledForDeletion !== null) {
671
                if (!$this->inputsScheduledForDeletion->isEmpty()) {
672
                    \Jalle19\StatusManager\Database\InputQuery::create()
673
                        ->filterByPrimaryKeys($this->inputsScheduledForDeletion->getPrimaryKeys(false))
674
                        ->delete($con);
675
                    $this->inputsScheduledForDeletion = null;
676
                }
677
            }
678
679 View Code Duplication
            if ($this->collInputs !== null) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
680
                foreach ($this->collInputs as $referrerFK) {
681
                    if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
682
                        $affectedRows += $referrerFK->save($con);
683
                    }
684
                }
685
            }
686
687
            if ($this->channelsScheduledForDeletion !== null) {
688
                if (!$this->channelsScheduledForDeletion->isEmpty()) {
689
                    \Jalle19\StatusManager\Database\ChannelQuery::create()
690
                        ->filterByPrimaryKeys($this->channelsScheduledForDeletion->getPrimaryKeys(false))
691
                        ->delete($con);
692
                    $this->channelsScheduledForDeletion = null;
693
                }
694
            }
695
696 View Code Duplication
            if ($this->collChannels !== null) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
697
                foreach ($this->collChannels as $referrerFK) {
698
                    if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
699
                        $affectedRows += $referrerFK->save($con);
700
                    }
701
                }
702
            }
703
704 View Code Duplication
            if ($this->subscriptionsScheduledForDeletion !== null) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
705
                if (!$this->subscriptionsScheduledForDeletion->isEmpty()) {
706
                    \Jalle19\StatusManager\Database\SubscriptionQuery::create()
707
                        ->filterByPrimaryKeys($this->subscriptionsScheduledForDeletion->getPrimaryKeys(false))
708
                        ->delete($con);
709
                    $this->subscriptionsScheduledForDeletion = null;
710
                }
711
            }
712
713 View Code Duplication
            if ($this->collSubscriptions !== null) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
714
                foreach ($this->collSubscriptions as $referrerFK) {
715
                    if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
716
                        $affectedRows += $referrerFK->save($con);
717
                    }
718
                }
719
            }
720
721
            $this->alreadyInSave = false;
722
723
        }
724
725
        return $affectedRows;
726
    } // doSave()
727
728
    /**
729
     * Insert the row in the database.
730
     *
731
     * @param      ConnectionInterface $con
732
     *
733
     * @throws PropelException
734
     * @see doSave()
735
     */
736
    protected function doInsert(ConnectionInterface $con)
737
    {
738
        $modifiedColumns = array();
739
        $index = 0;
740
741
742
         // check the columns in natural order for more readable SQL queries
743
        if ($this->isColumnModified(InstanceTableMap::COL_NAME)) {
744
            $modifiedColumns[':p' . $index++]  = 'name';
745
        }
746
747
        $sql = sprintf(
748
            'INSERT INTO instance (%s) VALUES (%s)',
749
            implode(', ', $modifiedColumns),
750
            implode(', ', array_keys($modifiedColumns))
751
        );
752
753
        try {
754
            $stmt = $con->prepare($sql);
755
            foreach ($modifiedColumns as $identifier => $columnName) {
756
                switch ($columnName) {
757
                    case 'name':
758
                        $stmt->bindValue($identifier, $this->name, PDO::PARAM_STR);
759
                        break;
760
                }
761
            }
762
            $stmt->execute();
763
        } catch (Exception $e) {
764
            Propel::log($e->getMessage(), Propel::LOG_ERR);
765
            throw new PropelException(sprintf('Unable to execute INSERT statement [%s]', $sql), 0, $e);
766
        }
767
768
        $this->setNew(false);
769
    }
770
771
    /**
772
     * Update the row in the database.
773
     *
774
     * @param      ConnectionInterface $con
775
     *
776
     * @return Integer Number of updated rows
777
     * @see doSave()
778
     */
779
    protected function doUpdate(ConnectionInterface $con)
780
    {
781
        $selectCriteria = $this->buildPkeyCriteria();
782
        $valuesCriteria = $this->buildCriteria();
783
784
        return $selectCriteria->doUpdate($valuesCriteria, $con);
0 ignored issues
show
Documentation introduced by
$valuesCriteria is of type object<Propel\Runtime\ActiveQuery\Criteria>, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
785
    }
786
787
    /**
788
     * Retrieves a field from the object by name passed in as a string.
789
     *
790
     * @param      string $name name
791
     * @param      string $type The type of fieldname the $name is of:
792
     *                     one of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME
793
     *                     TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
794
     *                     Defaults to TableMap::TYPE_PHPNAME.
795
     * @return mixed Value of field.
796
     */
797 View Code Duplication
    public function getByName($name, $type = TableMap::TYPE_PHPNAME)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
798
    {
799
        $pos = InstanceTableMap::translateFieldName($name, $type, TableMap::TYPE_NUM);
800
        $field = $this->getByPosition($pos);
801
802
        return $field;
803
    }
804
805
    /**
806
     * Retrieves a field from the object by Position as specified in the xml schema.
807
     * Zero-based.
808
     *
809
     * @param      int $pos position in xml schema
810
     * @return mixed Value of field at $pos
811
     */
812
    public function getByPosition($pos)
813
    {
814
        switch ($pos) {
815
            case 0:
816
                return $this->getName();
817
                break;
0 ignored issues
show
Unused Code introduced by
break is not strictly necessary here and could be removed.

The break statement is not necessary if it is preceded for example by a return statement:

switch ($x) {
    case 1:
        return 'foo';
        break; // This break is not necessary and can be left off.
}

If you would like to keep this construct to be consistent with other case statements, you can safely mark this issue as a false-positive.

Loading history...
818
            default:
819
                return null;
820
                break;
0 ignored issues
show
Unused Code introduced by
break is not strictly necessary here and could be removed.

The break statement is not necessary if it is preceded for example by a return statement:

switch ($x) {
    case 1:
        return 'foo';
        break; // This break is not necessary and can be left off.
}

If you would like to keep this construct to be consistent with other case statements, you can safely mark this issue as a false-positive.

Loading history...
821
        } // switch()
822
    }
823
824
    /**
825
     * Exports the object as an array.
826
     *
827
     * You can specify the key type of the array by passing one of the class
828
     * type constants.
829
     *
830
     * @param     string  $keyType (optional) One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME,
831
     *                    TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
832
     *                    Defaults to TableMap::TYPE_PHPNAME.
833
     * @param     boolean $includeLazyLoadColumns (optional) Whether to include lazy loaded columns. Defaults to TRUE.
834
     * @param     array $alreadyDumpedObjects List of objects to skip to avoid recursion
835
     * @param     boolean $includeForeignObjects (optional) Whether to include hydrated related objects. Default to FALSE.
836
     *
837
     * @return array an associative array containing the field names (as keys) and field values
838
     */
839
    public function toArray($keyType = TableMap::TYPE_PHPNAME, $includeLazyLoadColumns = true, $alreadyDumpedObjects = array(), $includeForeignObjects = false)
840
    {
841
842
        if (isset($alreadyDumpedObjects['Instance'][$this->hashCode()])) {
843
            return '*RECURSION*';
844
        }
845
        $alreadyDumpedObjects['Instance'][$this->hashCode()] = true;
846
        $keys = InstanceTableMap::getFieldNames($keyType);
847
        $result = array(
848
            $keys[0] => $this->getName(),
849
        );
850
        $virtualColumns = $this->virtualColumns;
851
        foreach ($virtualColumns as $key => $virtualColumn) {
852
            $result[$key] = $virtualColumn;
853
        }
854
855
        if ($includeForeignObjects) {
856
            if (null !== $this->collUsers) {
857
858
                switch ($keyType) {
859
                    case TableMap::TYPE_CAMELNAME:
860
                        $key = 'users';
861
                        break;
862
                    case TableMap::TYPE_FIELDNAME:
863
                        $key = 'users';
864
                        break;
865
                    default:
866
                        $key = 'Users';
867
                }
868
869
                $result[$key] = $this->collUsers->toArray(null, false, $keyType, $includeLazyLoadColumns, $alreadyDumpedObjects);
870
            }
871
            if (null !== $this->collConnections) {
872
873
                switch ($keyType) {
874
                    case TableMap::TYPE_CAMELNAME:
875
                        $key = 'connections';
876
                        break;
877
                    case TableMap::TYPE_FIELDNAME:
878
                        $key = 'connections';
879
                        break;
880
                    default:
881
                        $key = 'Connections';
882
                }
883
884
                $result[$key] = $this->collConnections->toArray(null, false, $keyType, $includeLazyLoadColumns, $alreadyDumpedObjects);
885
            }
886
            if (null !== $this->collInputs) {
887
888
                switch ($keyType) {
889
                    case TableMap::TYPE_CAMELNAME:
890
                        $key = 'inputs';
891
                        break;
892
                    case TableMap::TYPE_FIELDNAME:
893
                        $key = 'inputs';
894
                        break;
895
                    default:
896
                        $key = 'Inputs';
897
                }
898
899
                $result[$key] = $this->collInputs->toArray(null, false, $keyType, $includeLazyLoadColumns, $alreadyDumpedObjects);
900
            }
901
            if (null !== $this->collChannels) {
902
903
                switch ($keyType) {
904
                    case TableMap::TYPE_CAMELNAME:
905
                        $key = 'channels';
906
                        break;
907
                    case TableMap::TYPE_FIELDNAME:
908
                        $key = 'channels';
909
                        break;
910
                    default:
911
                        $key = 'Channels';
912
                }
913
914
                $result[$key] = $this->collChannels->toArray(null, false, $keyType, $includeLazyLoadColumns, $alreadyDumpedObjects);
915
            }
916
            if (null !== $this->collSubscriptions) {
917
918
                switch ($keyType) {
919
                    case TableMap::TYPE_CAMELNAME:
920
                        $key = 'subscriptions';
921
                        break;
922
                    case TableMap::TYPE_FIELDNAME:
923
                        $key = 'subscriptions';
924
                        break;
925
                    default:
926
                        $key = 'Subscriptions';
927
                }
928
929
                $result[$key] = $this->collSubscriptions->toArray(null, false, $keyType, $includeLazyLoadColumns, $alreadyDumpedObjects);
930
            }
931
        }
932
933
        return $result;
934
    }
935
936
    /**
937
     * Sets a field from the object by name passed in as a string.
938
     *
939
     * @param  string $name
940
     * @param  mixed  $value field value
941
     * @param  string $type The type of fieldname the $name is of:
942
     *                one of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME
943
     *                TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
944
     *                Defaults to TableMap::TYPE_PHPNAME.
945
     * @return $this|\Jalle19\StatusManager\Database\Instance
946
     */
947
    public function setByName($name, $value, $type = TableMap::TYPE_PHPNAME)
948
    {
949
        $pos = InstanceTableMap::translateFieldName($name, $type, TableMap::TYPE_NUM);
950
951
        return $this->setByPosition($pos, $value);
952
    }
953
954
    /**
955
     * Sets a field from the object by Position as specified in the xml schema.
956
     * Zero-based.
957
     *
958
     * @param  int $pos position in xml schema
959
     * @param  mixed $value field value
960
     * @return $this|\Jalle19\StatusManager\Database\Instance
961
     */
962
    public function setByPosition($pos, $value)
963
    {
964
        switch ($pos) {
965
            case 0:
966
                $this->setName($value);
967
                break;
968
        } // switch()
969
970
        return $this;
971
    }
972
973
    /**
974
     * Populates the object using an array.
975
     *
976
     * This is particularly useful when populating an object from one of the
977
     * request arrays (e.g. $_POST).  This method goes through the column
978
     * names, checking to see whether a matching key exists in populated
979
     * array. If so the setByName() method is called for that column.
980
     *
981
     * You can specify the key type of the array by additionally passing one
982
     * of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME,
983
     * TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
984
     * The default key type is the column's TableMap::TYPE_PHPNAME.
985
     *
986
     * @param      array  $arr     An array to populate the object from.
987
     * @param      string $keyType The type of keys the array uses.
988
     * @return void
989
     */
990
    public function fromArray($arr, $keyType = TableMap::TYPE_PHPNAME)
991
    {
992
        $keys = InstanceTableMap::getFieldNames($keyType);
993
994
        if (array_key_exists($keys[0], $arr)) {
995
            $this->setName($arr[$keys[0]]);
996
        }
997
    }
998
999
     /**
1000
     * Populate the current object from a string, using a given parser format
1001
     * <code>
1002
     * $book = new Book();
1003
     * $book->importFrom('JSON', '{"Id":9012,"Title":"Don Juan","ISBN":"0140422161","Price":12.99,"PublisherId":1234,"AuthorId":5678}');
1004
     * </code>
1005
     *
1006
     * You can specify the key type of the array by additionally passing one
1007
     * of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME,
1008
     * TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
1009
     * The default key type is the column's TableMap::TYPE_PHPNAME.
1010
     *
1011
     * @param mixed $parser A AbstractParser instance,
1012
     *                       or a format name ('XML', 'YAML', 'JSON', 'CSV')
1013
     * @param string $data The source data to import from
1014
     * @param string $keyType The type of keys the array uses.
1015
     *
1016
     * @return $this|\Jalle19\StatusManager\Database\Instance The current object, for fluid interface
1017
     */
1018 View Code Duplication
    public function importFrom($parser, $data, $keyType = TableMap::TYPE_PHPNAME)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1019
    {
1020
        if (!$parser instanceof AbstractParser) {
1021
            $parser = AbstractParser::getParser($parser);
1022
        }
1023
1024
        $this->fromArray($parser->toArray($data), $keyType);
1025
1026
        return $this;
1027
    }
1028
1029
    /**
1030
     * Build a Criteria object containing the values of all modified columns in this object.
1031
     *
1032
     * @return Criteria The Criteria object containing all modified values.
1033
     */
1034
    public function buildCriteria()
1035
    {
1036
        $criteria = new Criteria(InstanceTableMap::DATABASE_NAME);
1037
1038
        if ($this->isColumnModified(InstanceTableMap::COL_NAME)) {
1039
            $criteria->add(InstanceTableMap::COL_NAME, $this->name);
1040
        }
1041
1042
        return $criteria;
1043
    }
1044
1045
    /**
1046
     * Builds a Criteria object containing the primary key for this object.
1047
     *
1048
     * Unlike buildCriteria() this method includes the primary key values regardless
1049
     * of whether or not they have been modified.
1050
     *
1051
     * @throws LogicException if no primary key is defined
1052
     *
1053
     * @return Criteria The Criteria object containing value(s) for primary key(s).
1054
     */
1055
    public function buildPkeyCriteria()
1056
    {
1057
        $criteria = ChildInstanceQuery::create();
1058
        $criteria->add(InstanceTableMap::COL_NAME, $this->name);
1059
1060
        return $criteria;
1061
    }
1062
1063
    /**
1064
     * If the primary key is not null, return the hashcode of the
1065
     * primary key. Otherwise, return the hash code of the object.
1066
     *
1067
     * @return int Hashcode
1068
     */
1069 View Code Duplication
    public function hashCode()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1070
    {
1071
        $validPk = null !== $this->getName();
1072
1073
        $validPrimaryKeyFKs = 0;
1074
        $primaryKeyFKs = [];
1075
1076
        if ($validPk) {
1077
            return crc32(json_encode($this->getPrimaryKey(), JSON_UNESCAPED_UNICODE));
1078
        } elseif ($validPrimaryKeyFKs) {
1079
            return crc32(json_encode($primaryKeyFKs, JSON_UNESCAPED_UNICODE));
1080
        }
1081
1082
        return spl_object_hash($this);
1083
    }
1084
1085
    /**
1086
     * Returns the primary key for this object (row).
1087
     * @return string
1088
     */
1089
    public function getPrimaryKey()
1090
    {
1091
        return $this->getName();
1092
    }
1093
1094
    /**
1095
     * Generic method to set the primary key (name column).
1096
     *
1097
     * @param       string $key Primary key.
1098
     * @return void
1099
     */
1100
    public function setPrimaryKey($key)
1101
    {
1102
        $this->setName($key);
1103
    }
1104
1105
    /**
1106
     * Returns true if the primary key for this object is null.
1107
     * @return boolean
1108
     */
1109
    public function isPrimaryKeyNull()
1110
    {
1111
        return null === $this->getName();
1112
    }
1113
1114
    /**
1115
     * Sets contents of passed object to values from current object.
1116
     *
1117
     * If desired, this method can also make copies of all associated (fkey referrers)
1118
     * objects.
1119
     *
1120
     * @param      object $copyObj An object of \Jalle19\StatusManager\Database\Instance (or compatible) type.
1121
     * @param      boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row.
1122
     * @param      boolean $makeNew Whether to reset autoincrement PKs and make the object new.
1123
     * @throws PropelException
1124
     */
1125
    public function copyInto($copyObj, $deepCopy = false, $makeNew = true)
1126
    {
1127
        $copyObj->setName($this->getName());
1128
1129
        if ($deepCopy) {
1130
            // important: temporarily setNew(false) because this affects the behavior of
1131
            // the getter/setter methods for fkey referrer objects.
1132
            $copyObj->setNew(false);
1133
1134
            foreach ($this->getUsers() as $relObj) {
1135
                if ($relObj !== $this) {  // ensure that we don't try to copy a reference to ourselves
1136
                    $copyObj->addUser($relObj->copy($deepCopy));
1137
                }
1138
            }
1139
1140
            foreach ($this->getConnections() as $relObj) {
1141
                if ($relObj !== $this) {  // ensure that we don't try to copy a reference to ourselves
1142
                    $copyObj->addConnection($relObj->copy($deepCopy));
1143
                }
1144
            }
1145
1146
            foreach ($this->getInputs() as $relObj) {
1147
                if ($relObj !== $this) {  // ensure that we don't try to copy a reference to ourselves
1148
                    $copyObj->addInput($relObj->copy($deepCopy));
1149
                }
1150
            }
1151
1152
            foreach ($this->getChannels() as $relObj) {
1153
                if ($relObj !== $this) {  // ensure that we don't try to copy a reference to ourselves
1154
                    $copyObj->addChannel($relObj->copy($deepCopy));
1155
                }
1156
            }
1157
1158
            foreach ($this->getSubscriptions() as $relObj) {
1159
                if ($relObj !== $this) {  // ensure that we don't try to copy a reference to ourselves
1160
                    $copyObj->addSubscription($relObj->copy($deepCopy));
1161
                }
1162
            }
1163
1164
        } // if ($deepCopy)
0 ignored issues
show
Unused Code Comprehensibility introduced by
67% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
1165
1166
        if ($makeNew) {
1167
            $copyObj->setNew(true);
1168
        }
1169
    }
1170
1171
    /**
1172
     * Makes a copy of this object that will be inserted as a new row in table when saved.
1173
     * It creates a new object filling in the simple attributes, but skipping any primary
1174
     * keys that are defined for the table.
1175
     *
1176
     * If desired, this method can also make copies of all associated (fkey referrers)
1177
     * objects.
1178
     *
1179
     * @param  boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row.
1180
     * @return \Jalle19\StatusManager\Database\Instance Clone of current object.
1181
     * @throws PropelException
1182
     */
1183 View Code Duplication
    public function copy($deepCopy = false)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1184
    {
1185
        // we use get_class(), because this might be a subclass
1186
        $clazz = get_class($this);
1187
        $copyObj = new $clazz();
1188
        $this->copyInto($copyObj, $deepCopy);
1189
1190
        return $copyObj;
1191
    }
1192
1193
1194
    /**
1195
     * Initializes a collection based on the name of a relation.
1196
     * Avoids crafting an 'init[$relationName]s' method name
1197
     * that wouldn't work when StandardEnglishPluralizer is used.
1198
     *
1199
     * @param      string $relationName The name of the relation to initialize
1200
     * @return void
1201
     */
1202
    public function initRelation($relationName)
1203
    {
1204
        if ('User' == $relationName) {
1205
            return $this->initUsers();
1206
        }
1207
        if ('Connection' == $relationName) {
1208
            return $this->initConnections();
1209
        }
1210
        if ('Input' == $relationName) {
1211
            return $this->initInputs();
1212
        }
1213
        if ('Channel' == $relationName) {
1214
            return $this->initChannels();
1215
        }
1216
        if ('Subscription' == $relationName) {
1217
            return $this->initSubscriptions();
1218
        }
1219
    }
1220
1221
    /**
1222
     * Clears out the collUsers collection
1223
     *
1224
     * This does not modify the database; however, it will remove any associated objects, causing
1225
     * them to be refetched by subsequent calls to accessor method.
1226
     *
1227
     * @return void
1228
     * @see        addUsers()
1229
     */
1230
    public function clearUsers()
1231
    {
1232
        $this->collUsers = null; // important to set this to NULL since that means it is uninitialized
1233
    }
1234
1235
    /**
1236
     * Reset is the collUsers collection loaded partially.
1237
     */
1238
    public function resetPartialUsers($v = true)
1239
    {
1240
        $this->collUsersPartial = $v;
1241
    }
1242
1243
    /**
1244
     * Initializes the collUsers collection.
1245
     *
1246
     * By default this just sets the collUsers collection to an empty array (like clearcollUsers());
1247
     * however, you may wish to override this method in your stub class to provide setting appropriate
1248
     * to your application -- for example, setting the initial array to the values stored in database.
1249
     *
1250
     * @param      boolean $overrideExisting If set to true, the method call initializes
1251
     *                                        the collection even if it is not empty
1252
     *
1253
     * @return void
1254
     */
1255 View Code Duplication
    public function initUsers($overrideExisting = true)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1256
    {
1257
        if (null !== $this->collUsers && !$overrideExisting) {
1258
            return;
1259
        }
1260
1261
        $collectionClassName = UserTableMap::getTableMap()->getCollectionClassName();
1262
1263
        $this->collUsers = new $collectionClassName;
1264
        $this->collUsers->setModel('\Jalle19\StatusManager\Database\User');
1265
    }
1266
1267
    /**
1268
     * Gets an array of ChildUser objects which contain a foreign key that references this object.
1269
     *
1270
     * If the $criteria is not null, it is used to always fetch the results from the database.
1271
     * Otherwise the results are fetched from the database the first time, then cached.
1272
     * Next time the same method is called without $criteria, the cached collection is returned.
1273
     * If this ChildInstance is new, it will return
1274
     * an empty collection or the current collection; the criteria is ignored on a new object.
1275
     *
1276
     * @param      Criteria $criteria optional Criteria object to narrow the query
1277
     * @param      ConnectionInterface $con optional connection object
1278
     * @return ObjectCollection|ChildUser[] List of ChildUser objects
1279
     * @throws PropelException
1280
     */
1281 View Code Duplication
    public function getUsers(Criteria $criteria = null, ConnectionInterface $con = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1282
    {
1283
        $partial = $this->collUsersPartial && !$this->isNew();
1284
        if (null === $this->collUsers || null !== $criteria  || $partial) {
1285
            if ($this->isNew() && null === $this->collUsers) {
1286
                // return empty collection
1287
                $this->initUsers();
1288
            } else {
1289
                $collUsers = ChildUserQuery::create(null, $criteria)
1290
                    ->filterByInstance($this)
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a object<Jalle19\StatusMan...ction\ObjectCollection>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1291
                    ->find($con);
0 ignored issues
show
Bug introduced by
It seems like $con defined by parameter $con on line 1281 can be null; however, Jalle19\StatusManager\Da...\Base\UserQuery::find() does not accept null, maybe add an additional type check?

It seems like you allow that null is being passed for a parameter, however the function which is called does not seem to accept null.

We recommend to add an additional type check (or disallow null for the parameter):

function notNullable(stdClass $x) { }

// Unsafe
function withoutCheck(stdClass $x = null) {
    notNullable($x);
}

// Safe - Alternative 1: Adding Additional Type-Check
function withCheck(stdClass $x = null) {
    if ($x instanceof stdClass) {
        notNullable($x);
    }
}

// Safe - Alternative 2: Changing Parameter
function withNonNullableParam(stdClass $x) {
    notNullable($x);
}
Loading history...
1292
1293
                if (null !== $criteria) {
1294
                    if (false !== $this->collUsersPartial && count($collUsers)) {
1295
                        $this->initUsers(false);
1296
1297
                        foreach ($collUsers as $obj) {
1298
                            if (false == $this->collUsers->contains($obj)) {
1299
                                $this->collUsers->append($obj);
1300
                            }
1301
                        }
1302
1303
                        $this->collUsersPartial = true;
1304
                    }
1305
1306
                    return $collUsers;
1307
                }
1308
1309
                if ($partial && $this->collUsers) {
1310
                    foreach ($this->collUsers as $obj) {
1311
                        if ($obj->isNew()) {
1312
                            $collUsers[] = $obj;
1313
                        }
1314
                    }
1315
                }
1316
1317
                $this->collUsers = $collUsers;
1318
                $this->collUsersPartial = false;
1319
            }
1320
        }
1321
1322
        return $this->collUsers;
1323
    }
1324
1325
    /**
1326
     * Sets a collection of ChildUser objects related by a one-to-many relationship
1327
     * to the current object.
1328
     * It will also schedule objects for deletion based on a diff between old objects (aka persisted)
1329
     * and new objects from the given Propel collection.
1330
     *
1331
     * @param      Collection $users A Propel collection.
1332
     * @param      ConnectionInterface $con Optional connection object
1333
     * @return $this|ChildInstance The current object (for fluent API support)
1334
     */
1335
    public function setUsers(Collection $users, ConnectionInterface $con = null)
1336
    {
1337
        /** @var ChildUser[] $usersToDelete */
1338
        $usersToDelete = $this->getUsers(new Criteria(), $con)->diff($users);
1339
1340
1341
        $this->usersScheduledForDeletion = $usersToDelete;
1342
1343
        foreach ($usersToDelete as $userRemoved) {
1344
            $userRemoved->setInstance(null);
1345
        }
1346
1347
        $this->collUsers = null;
1348
        foreach ($users as $user) {
1349
            $this->addUser($user);
1350
        }
1351
1352
        $this->collUsers = $users;
0 ignored issues
show
Documentation Bug introduced by
It seems like $users of type object<Propel\Runtime\Collection\Collection> is incompatible with the declared type object<Propel\Runtime\Co...Manager\Database\User>> of property $collUsers.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
1353
        $this->collUsersPartial = false;
1354
1355
        return $this;
1356
    }
1357
1358
    /**
1359
     * Returns the number of related User objects.
1360
     *
1361
     * @param      Criteria $criteria
1362
     * @param      boolean $distinct
1363
     * @param      ConnectionInterface $con
1364
     * @return int             Count of related User objects.
1365
     * @throws PropelException
1366
     */
1367 View Code Duplication
    public function countUsers(Criteria $criteria = null, $distinct = false, ConnectionInterface $con = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1368
    {
1369
        $partial = $this->collUsersPartial && !$this->isNew();
1370
        if (null === $this->collUsers || null !== $criteria || $partial) {
1371
            if ($this->isNew() && null === $this->collUsers) {
1372
                return 0;
1373
            }
1374
1375
            if ($partial && !$criteria) {
1376
                return count($this->getUsers());
1377
            }
1378
1379
            $query = ChildUserQuery::create(null, $criteria);
1380
            if ($distinct) {
1381
                $query->distinct();
1382
            }
1383
1384
            return $query
1385
                ->filterByInstance($this)
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a object<Jalle19\StatusMan...ction\ObjectCollection>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1386
                ->count($con);
1387
        }
1388
1389
        return count($this->collUsers);
1390
    }
1391
1392
    /**
1393
     * Method called to associate a ChildUser object to this object
1394
     * through the ChildUser foreign key attribute.
1395
     *
1396
     * @param  ChildUser $l ChildUser
1397
     * @return $this|\Jalle19\StatusManager\Database\Instance The current object (for fluent API support)
1398
     */
1399
    public function addUser(ChildUser $l)
1400
    {
1401
        if ($this->collUsers === null) {
1402
            $this->initUsers();
1403
            $this->collUsersPartial = true;
1404
        }
1405
1406
        if (!$this->collUsers->contains($l)) {
1407
            $this->doAddUser($l);
1408
1409
            if ($this->usersScheduledForDeletion and $this->usersScheduledForDeletion->contains($l)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
Using logical operators such as and instead of && is generally not recommended.

PHP has two types of connecting operators (logical operators, and boolean operators):

  Logical Operators Boolean Operator
AND - meaning and &&
OR - meaning or ||

The difference between these is the order in which they are executed. In most cases, you would want to use a boolean operator like &&, or ||.

Let’s take a look at a few examples:

// Logical operators have lower precedence:
$f = false or true;

// is executed like this:
($f = false) or true;


// Boolean operators have higher precedence:
$f = false || true;

// is executed like this:
$f = (false || true);

Logical Operators are used for Control-Flow

One case where you explicitly want to use logical operators is for control-flow such as this:

$x === 5
    or die('$x must be 5.');

// Instead of
if ($x !== 5) {
    die('$x must be 5.');
}

Since die introduces problems of its own, f.e. it makes our code hardly testable, and prevents any kind of more sophisticated error handling; you probably do not want to use this in real-world code. Unfortunately, logical operators cannot be combined with throw at this point:

// The following is currently a parse error.
$x === 5
    or throw new RuntimeException('$x must be 5.');

These limitations lead to logical operators rarely being of use in current PHP code.

Loading history...
1410
                $this->usersScheduledForDeletion->remove($this->usersScheduledForDeletion->search($l));
1411
            }
1412
        }
1413
1414
        return $this;
1415
    }
1416
1417
    /**
1418
     * @param ChildUser $user The ChildUser object to add.
1419
     */
1420
    protected function doAddUser(ChildUser $user)
1421
    {
1422
        $this->collUsers[]= $user;
1423
        $user->setInstance($this);
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a null|object<Jalle19\Stat...ager\Database\Instance>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1424
    }
1425
1426
    /**
1427
     * @param  ChildUser $user The ChildUser object to remove.
1428
     * @return $this|ChildInstance The current object (for fluent API support)
1429
     */
1430
    public function removeUser(ChildUser $user)
1431
    {
1432
        if ($this->getUsers()->contains($user)) {
1433
            $pos = $this->collUsers->search($user);
1434
            $this->collUsers->remove($pos);
1435
            if (null === $this->usersScheduledForDeletion) {
1436
                $this->usersScheduledForDeletion = clone $this->collUsers;
1437
                $this->usersScheduledForDeletion->clear();
1438
            }
1439
            $this->usersScheduledForDeletion[]= clone $user;
1440
            $user->setInstance(null);
1441
        }
1442
1443
        return $this;
1444
    }
1445
1446
    /**
1447
     * Clears out the collConnections collection
1448
     *
1449
     * This does not modify the database; however, it will remove any associated objects, causing
1450
     * them to be refetched by subsequent calls to accessor method.
1451
     *
1452
     * @return void
1453
     * @see        addConnections()
1454
     */
1455
    public function clearConnections()
1456
    {
1457
        $this->collConnections = null; // important to set this to NULL since that means it is uninitialized
1458
    }
1459
1460
    /**
1461
     * Reset is the collConnections collection loaded partially.
1462
     */
1463
    public function resetPartialConnections($v = true)
1464
    {
1465
        $this->collConnectionsPartial = $v;
1466
    }
1467
1468
    /**
1469
     * Initializes the collConnections collection.
1470
     *
1471
     * By default this just sets the collConnections collection to an empty array (like clearcollConnections());
1472
     * however, you may wish to override this method in your stub class to provide setting appropriate
1473
     * to your application -- for example, setting the initial array to the values stored in database.
1474
     *
1475
     * @param      boolean $overrideExisting If set to true, the method call initializes
1476
     *                                        the collection even if it is not empty
1477
     *
1478
     * @return void
1479
     */
1480 View Code Duplication
    public function initConnections($overrideExisting = true)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1481
    {
1482
        if (null !== $this->collConnections && !$overrideExisting) {
1483
            return;
1484
        }
1485
1486
        $collectionClassName = ConnectionTableMap::getTableMap()->getCollectionClassName();
1487
1488
        $this->collConnections = new $collectionClassName;
1489
        $this->collConnections->setModel('\Jalle19\StatusManager\Database\Connection');
1490
    }
1491
1492
    /**
1493
     * Gets an array of ChildConnection objects which contain a foreign key that references this object.
1494
     *
1495
     * If the $criteria is not null, it is used to always fetch the results from the database.
1496
     * Otherwise the results are fetched from the database the first time, then cached.
1497
     * Next time the same method is called without $criteria, the cached collection is returned.
1498
     * If this ChildInstance is new, it will return
1499
     * an empty collection or the current collection; the criteria is ignored on a new object.
1500
     *
1501
     * @param      Criteria $criteria optional Criteria object to narrow the query
1502
     * @param      ConnectionInterface $con optional connection object
1503
     * @return ObjectCollection|ChildConnection[] List of ChildConnection objects
1504
     * @throws PropelException
1505
     */
1506 View Code Duplication
    public function getConnections(Criteria $criteria = null, ConnectionInterface $con = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1507
    {
1508
        $partial = $this->collConnectionsPartial && !$this->isNew();
1509
        if (null === $this->collConnections || null !== $criteria  || $partial) {
1510
            if ($this->isNew() && null === $this->collConnections) {
1511
                // return empty collection
1512
                $this->initConnections();
1513
            } else {
1514
                $collConnections = ChildConnectionQuery::create(null, $criteria)
1515
                    ->filterByInstance($this)
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a object<Jalle19\StatusMan...ction\ObjectCollection>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1516
                    ->find($con);
0 ignored issues
show
Bug introduced by
It seems like $con defined by parameter $con on line 1506 can be null; however, Jalle19\StatusManager\Da...ConnectionQuery::find() does not accept null, maybe add an additional type check?

It seems like you allow that null is being passed for a parameter, however the function which is called does not seem to accept null.

We recommend to add an additional type check (or disallow null for the parameter):

function notNullable(stdClass $x) { }

// Unsafe
function withoutCheck(stdClass $x = null) {
    notNullable($x);
}

// Safe - Alternative 1: Adding Additional Type-Check
function withCheck(stdClass $x = null) {
    if ($x instanceof stdClass) {
        notNullable($x);
    }
}

// Safe - Alternative 2: Changing Parameter
function withNonNullableParam(stdClass $x) {
    notNullable($x);
}
Loading history...
1517
1518
                if (null !== $criteria) {
1519
                    if (false !== $this->collConnectionsPartial && count($collConnections)) {
1520
                        $this->initConnections(false);
1521
1522
                        foreach ($collConnections as $obj) {
1523
                            if (false == $this->collConnections->contains($obj)) {
1524
                                $this->collConnections->append($obj);
1525
                            }
1526
                        }
1527
1528
                        $this->collConnectionsPartial = true;
1529
                    }
1530
1531
                    return $collConnections;
1532
                }
1533
1534
                if ($partial && $this->collConnections) {
1535
                    foreach ($this->collConnections as $obj) {
1536
                        if ($obj->isNew()) {
1537
                            $collConnections[] = $obj;
1538
                        }
1539
                    }
1540
                }
1541
1542
                $this->collConnections = $collConnections;
1543
                $this->collConnectionsPartial = false;
1544
            }
1545
        }
1546
1547
        return $this->collConnections;
1548
    }
1549
1550
    /**
1551
     * Sets a collection of ChildConnection objects related by a one-to-many relationship
1552
     * to the current object.
1553
     * It will also schedule objects for deletion based on a diff between old objects (aka persisted)
1554
     * and new objects from the given Propel collection.
1555
     *
1556
     * @param      Collection $connections A Propel collection.
1557
     * @param      ConnectionInterface $con Optional connection object
1558
     * @return $this|ChildInstance The current object (for fluent API support)
1559
     */
1560 View Code Duplication
    public function setConnections(Collection $connections, ConnectionInterface $con = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1561
    {
1562
        /** @var ChildConnection[] $connectionsToDelete */
1563
        $connectionsToDelete = $this->getConnections(new Criteria(), $con)->diff($connections);
1564
1565
1566
        $this->connectionsScheduledForDeletion = $connectionsToDelete;
1567
1568
        foreach ($connectionsToDelete as $connectionRemoved) {
1569
            $connectionRemoved->setInstance(null);
1570
        }
1571
1572
        $this->collConnections = null;
1573
        foreach ($connections as $connection) {
1574
            $this->addConnection($connection);
1575
        }
1576
1577
        $this->collConnections = $connections;
0 ignored issues
show
Documentation Bug introduced by
It seems like $connections of type object<Propel\Runtime\Collection\Collection> is incompatible with the declared type object<Propel\Runtime\Co...r\Database\Connection>> of property $collConnections.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
1578
        $this->collConnectionsPartial = false;
1579
1580
        return $this;
1581
    }
1582
1583
    /**
1584
     * Returns the number of related Connection objects.
1585
     *
1586
     * @param      Criteria $criteria
1587
     * @param      boolean $distinct
1588
     * @param      ConnectionInterface $con
1589
     * @return int             Count of related Connection objects.
1590
     * @throws PropelException
1591
     */
1592 View Code Duplication
    public function countConnections(Criteria $criteria = null, $distinct = false, ConnectionInterface $con = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1593
    {
1594
        $partial = $this->collConnectionsPartial && !$this->isNew();
1595
        if (null === $this->collConnections || null !== $criteria || $partial) {
1596
            if ($this->isNew() && null === $this->collConnections) {
1597
                return 0;
1598
            }
1599
1600
            if ($partial && !$criteria) {
1601
                return count($this->getConnections());
1602
            }
1603
1604
            $query = ChildConnectionQuery::create(null, $criteria);
1605
            if ($distinct) {
1606
                $query->distinct();
1607
            }
1608
1609
            return $query
1610
                ->filterByInstance($this)
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a object<Jalle19\StatusMan...ction\ObjectCollection>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1611
                ->count($con);
1612
        }
1613
1614
        return count($this->collConnections);
1615
    }
1616
1617
    /**
1618
     * Method called to associate a ChildConnection object to this object
1619
     * through the ChildConnection foreign key attribute.
1620
     *
1621
     * @param  ChildConnection $l ChildConnection
1622
     * @return $this|\Jalle19\StatusManager\Database\Instance The current object (for fluent API support)
1623
     */
1624 View Code Duplication
    public function addConnection(ChildConnection $l)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1625
    {
1626
        if ($this->collConnections === null) {
1627
            $this->initConnections();
1628
            $this->collConnectionsPartial = true;
1629
        }
1630
1631
        if (!$this->collConnections->contains($l)) {
1632
            $this->doAddConnection($l);
1633
1634
            if ($this->connectionsScheduledForDeletion and $this->connectionsScheduledForDeletion->contains($l)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
Using logical operators such as and instead of && is generally not recommended.

PHP has two types of connecting operators (logical operators, and boolean operators):

  Logical Operators Boolean Operator
AND - meaning and &&
OR - meaning or ||

The difference between these is the order in which they are executed. In most cases, you would want to use a boolean operator like &&, or ||.

Let’s take a look at a few examples:

// Logical operators have lower precedence:
$f = false or true;

// is executed like this:
($f = false) or true;


// Boolean operators have higher precedence:
$f = false || true;

// is executed like this:
$f = (false || true);

Logical Operators are used for Control-Flow

One case where you explicitly want to use logical operators is for control-flow such as this:

$x === 5
    or die('$x must be 5.');

// Instead of
if ($x !== 5) {
    die('$x must be 5.');
}

Since die introduces problems of its own, f.e. it makes our code hardly testable, and prevents any kind of more sophisticated error handling; you probably do not want to use this in real-world code. Unfortunately, logical operators cannot be combined with throw at this point:

// The following is currently a parse error.
$x === 5
    or throw new RuntimeException('$x must be 5.');

These limitations lead to logical operators rarely being of use in current PHP code.

Loading history...
1635
                $this->connectionsScheduledForDeletion->remove($this->connectionsScheduledForDeletion->search($l));
1636
            }
1637
        }
1638
1639
        return $this;
1640
    }
1641
1642
    /**
1643
     * @param ChildConnection $connection The ChildConnection object to add.
1644
     */
1645
    protected function doAddConnection(ChildConnection $connection)
1646
    {
1647
        $this->collConnections[]= $connection;
1648
        $connection->setInstance($this);
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a null|object<Jalle19\Stat...ager\Database\Instance>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1649
    }
1650
1651
    /**
1652
     * @param  ChildConnection $connection The ChildConnection object to remove.
1653
     * @return $this|ChildInstance The current object (for fluent API support)
1654
     */
1655 View Code Duplication
    public function removeConnection(ChildConnection $connection)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1656
    {
1657
        if ($this->getConnections()->contains($connection)) {
1658
            $pos = $this->collConnections->search($connection);
1659
            $this->collConnections->remove($pos);
1660
            if (null === $this->connectionsScheduledForDeletion) {
1661
                $this->connectionsScheduledForDeletion = clone $this->collConnections;
1662
                $this->connectionsScheduledForDeletion->clear();
1663
            }
1664
            $this->connectionsScheduledForDeletion[]= clone $connection;
1665
            $connection->setInstance(null);
1666
        }
1667
1668
        return $this;
1669
    }
1670
1671
1672
    /**
1673
     * If this collection has already been initialized with
1674
     * an identical criteria, it returns the collection.
1675
     * Otherwise if this Instance is new, it will return
1676
     * an empty collection; or if this Instance has previously
1677
     * been saved, it will retrieve related Connections from storage.
1678
     *
1679
     * This method is protected by default in order to keep the public
1680
     * api reasonable.  You can provide public methods for those you
1681
     * actually need in Instance.
1682
     *
1683
     * @param      Criteria $criteria optional Criteria object to narrow the query
1684
     * @param      ConnectionInterface $con optional connection object
1685
     * @param      string $joinBehavior optional join type to use (defaults to Criteria::LEFT_JOIN)
1686
     * @return ObjectCollection|ChildConnection[] List of ChildConnection objects
1687
     */
1688 View Code Duplication
    public function getConnectionsJoinUser(Criteria $criteria = null, ConnectionInterface $con = null, $joinBehavior = Criteria::LEFT_JOIN)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1689
    {
1690
        $query = ChildConnectionQuery::create(null, $criteria);
1691
        $query->joinWith('User', $joinBehavior);
1692
1693
        return $this->getConnections($query, $con);
1694
    }
1695
1696
    /**
1697
     * Clears out the collInputs collection
1698
     *
1699
     * This does not modify the database; however, it will remove any associated objects, causing
1700
     * them to be refetched by subsequent calls to accessor method.
1701
     *
1702
     * @return void
1703
     * @see        addInputs()
1704
     */
1705
    public function clearInputs()
1706
    {
1707
        $this->collInputs = null; // important to set this to NULL since that means it is uninitialized
1708
    }
1709
1710
    /**
1711
     * Reset is the collInputs collection loaded partially.
1712
     */
1713
    public function resetPartialInputs($v = true)
1714
    {
1715
        $this->collInputsPartial = $v;
1716
    }
1717
1718
    /**
1719
     * Initializes the collInputs collection.
1720
     *
1721
     * By default this just sets the collInputs collection to an empty array (like clearcollInputs());
1722
     * however, you may wish to override this method in your stub class to provide setting appropriate
1723
     * to your application -- for example, setting the initial array to the values stored in database.
1724
     *
1725
     * @param      boolean $overrideExisting If set to true, the method call initializes
1726
     *                                        the collection even if it is not empty
1727
     *
1728
     * @return void
1729
     */
1730 View Code Duplication
    public function initInputs($overrideExisting = true)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1731
    {
1732
        if (null !== $this->collInputs && !$overrideExisting) {
1733
            return;
1734
        }
1735
1736
        $collectionClassName = InputTableMap::getTableMap()->getCollectionClassName();
1737
1738
        $this->collInputs = new $collectionClassName;
1739
        $this->collInputs->setModel('\Jalle19\StatusManager\Database\Input');
1740
    }
1741
1742
    /**
1743
     * Gets an array of ChildInput objects which contain a foreign key that references this object.
1744
     *
1745
     * If the $criteria is not null, it is used to always fetch the results from the database.
1746
     * Otherwise the results are fetched from the database the first time, then cached.
1747
     * Next time the same method is called without $criteria, the cached collection is returned.
1748
     * If this ChildInstance is new, it will return
1749
     * an empty collection or the current collection; the criteria is ignored on a new object.
1750
     *
1751
     * @param      Criteria $criteria optional Criteria object to narrow the query
1752
     * @param      ConnectionInterface $con optional connection object
1753
     * @return ObjectCollection|ChildInput[] List of ChildInput objects
1754
     * @throws PropelException
1755
     */
1756 View Code Duplication
    public function getInputs(Criteria $criteria = null, ConnectionInterface $con = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1757
    {
1758
        $partial = $this->collInputsPartial && !$this->isNew();
1759
        if (null === $this->collInputs || null !== $criteria  || $partial) {
1760
            if ($this->isNew() && null === $this->collInputs) {
1761
                // return empty collection
1762
                $this->initInputs();
1763
            } else {
1764
                $collInputs = ChildInputQuery::create(null, $criteria)
1765
                    ->filterByInstance($this)
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a object<Jalle19\StatusMan...ction\ObjectCollection>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1766
                    ->find($con);
0 ignored issues
show
Bug introduced by
It seems like $con defined by parameter $con on line 1756 can be null; however, Jalle19\StatusManager\Da...Base\InputQuery::find() does not accept null, maybe add an additional type check?

It seems like you allow that null is being passed for a parameter, however the function which is called does not seem to accept null.

We recommend to add an additional type check (or disallow null for the parameter):

function notNullable(stdClass $x) { }

// Unsafe
function withoutCheck(stdClass $x = null) {
    notNullable($x);
}

// Safe - Alternative 1: Adding Additional Type-Check
function withCheck(stdClass $x = null) {
    if ($x instanceof stdClass) {
        notNullable($x);
    }
}

// Safe - Alternative 2: Changing Parameter
function withNonNullableParam(stdClass $x) {
    notNullable($x);
}
Loading history...
1767
1768
                if (null !== $criteria) {
1769
                    if (false !== $this->collInputsPartial && count($collInputs)) {
1770
                        $this->initInputs(false);
1771
1772
                        foreach ($collInputs as $obj) {
1773
                            if (false == $this->collInputs->contains($obj)) {
1774
                                $this->collInputs->append($obj);
1775
                            }
1776
                        }
1777
1778
                        $this->collInputsPartial = true;
1779
                    }
1780
1781
                    return $collInputs;
1782
                }
1783
1784
                if ($partial && $this->collInputs) {
1785
                    foreach ($this->collInputs as $obj) {
1786
                        if ($obj->isNew()) {
1787
                            $collInputs[] = $obj;
1788
                        }
1789
                    }
1790
                }
1791
1792
                $this->collInputs = $collInputs;
1793
                $this->collInputsPartial = false;
1794
            }
1795
        }
1796
1797
        return $this->collInputs;
1798
    }
1799
1800
    /**
1801
     * Sets a collection of ChildInput objects related by a one-to-many relationship
1802
     * to the current object.
1803
     * It will also schedule objects for deletion based on a diff between old objects (aka persisted)
1804
     * and new objects from the given Propel collection.
1805
     *
1806
     * @param      Collection $inputs A Propel collection.
1807
     * @param      ConnectionInterface $con Optional connection object
1808
     * @return $this|ChildInstance The current object (for fluent API support)
1809
     */
1810 View Code Duplication
    public function setInputs(Collection $inputs, ConnectionInterface $con = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1811
    {
1812
        /** @var ChildInput[] $inputsToDelete */
1813
        $inputsToDelete = $this->getInputs(new Criteria(), $con)->diff($inputs);
1814
1815
1816
        $this->inputsScheduledForDeletion = $inputsToDelete;
1817
1818
        foreach ($inputsToDelete as $inputRemoved) {
1819
            $inputRemoved->setInstance(null);
1820
        }
1821
1822
        $this->collInputs = null;
1823
        foreach ($inputs as $input) {
1824
            $this->addInput($input);
1825
        }
1826
1827
        $this->collInputs = $inputs;
0 ignored issues
show
Documentation Bug introduced by
It seems like $inputs of type object<Propel\Runtime\Collection\Collection> is incompatible with the declared type object<Propel\Runtime\Co...anager\Database\Input>> of property $collInputs.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
1828
        $this->collInputsPartial = false;
1829
1830
        return $this;
1831
    }
1832
1833
    /**
1834
     * Returns the number of related Input objects.
1835
     *
1836
     * @param      Criteria $criteria
1837
     * @param      boolean $distinct
1838
     * @param      ConnectionInterface $con
1839
     * @return int             Count of related Input objects.
1840
     * @throws PropelException
1841
     */
1842
    public function countInputs(Criteria $criteria = null, $distinct = false, ConnectionInterface $con = null)
1843
    {
1844
        $partial = $this->collInputsPartial && !$this->isNew();
1845
        if (null === $this->collInputs || null !== $criteria || $partial) {
1846
            if ($this->isNew() && null === $this->collInputs) {
1847
                return 0;
1848
            }
1849
1850
            if ($partial && !$criteria) {
1851
                return count($this->getInputs());
1852
            }
1853
1854
            $query = ChildInputQuery::create(null, $criteria);
1855
            if ($distinct) {
1856
                $query->distinct();
1857
            }
1858
1859
            return $query
1860
                ->filterByInstance($this)
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a object<Jalle19\StatusMan...ction\ObjectCollection>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1861
                ->count($con);
1862
        }
1863
1864
        return count($this->collInputs);
1865
    }
1866
1867
    /**
1868
     * Method called to associate a ChildInput object to this object
1869
     * through the ChildInput foreign key attribute.
1870
     *
1871
     * @param  ChildInput $l ChildInput
1872
     * @return $this|\Jalle19\StatusManager\Database\Instance The current object (for fluent API support)
1873
     */
1874
    public function addInput(ChildInput $l)
1875
    {
1876
        if ($this->collInputs === null) {
1877
            $this->initInputs();
1878
            $this->collInputsPartial = true;
1879
        }
1880
1881
        if (!$this->collInputs->contains($l)) {
1882
            $this->doAddInput($l);
1883
1884
            if ($this->inputsScheduledForDeletion and $this->inputsScheduledForDeletion->contains($l)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
Using logical operators such as and instead of && is generally not recommended.

PHP has two types of connecting operators (logical operators, and boolean operators):

  Logical Operators Boolean Operator
AND - meaning and &&
OR - meaning or ||

The difference between these is the order in which they are executed. In most cases, you would want to use a boolean operator like &&, or ||.

Let’s take a look at a few examples:

// Logical operators have lower precedence:
$f = false or true;

// is executed like this:
($f = false) or true;


// Boolean operators have higher precedence:
$f = false || true;

// is executed like this:
$f = (false || true);

Logical Operators are used for Control-Flow

One case where you explicitly want to use logical operators is for control-flow such as this:

$x === 5
    or die('$x must be 5.');

// Instead of
if ($x !== 5) {
    die('$x must be 5.');
}

Since die introduces problems of its own, f.e. it makes our code hardly testable, and prevents any kind of more sophisticated error handling; you probably do not want to use this in real-world code. Unfortunately, logical operators cannot be combined with throw at this point:

// The following is currently a parse error.
$x === 5
    or throw new RuntimeException('$x must be 5.');

These limitations lead to logical operators rarely being of use in current PHP code.

Loading history...
1885
                $this->inputsScheduledForDeletion->remove($this->inputsScheduledForDeletion->search($l));
1886
            }
1887
        }
1888
1889
        return $this;
1890
    }
1891
1892
    /**
1893
     * @param ChildInput $input The ChildInput object to add.
1894
     */
1895
    protected function doAddInput(ChildInput $input)
1896
    {
1897
        $this->collInputs[]= $input;
1898
        $input->setInstance($this);
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a null|object<Jalle19\Stat...ager\Database\Instance>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1899
    }
1900
1901
    /**
1902
     * @param  ChildInput $input The ChildInput object to remove.
1903
     * @return $this|ChildInstance The current object (for fluent API support)
1904
     */
1905 View Code Duplication
    public function removeInput(ChildInput $input)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1906
    {
1907
        if ($this->getInputs()->contains($input)) {
1908
            $pos = $this->collInputs->search($input);
1909
            $this->collInputs->remove($pos);
1910
            if (null === $this->inputsScheduledForDeletion) {
1911
                $this->inputsScheduledForDeletion = clone $this->collInputs;
1912
                $this->inputsScheduledForDeletion->clear();
1913
            }
1914
            $this->inputsScheduledForDeletion[]= clone $input;
1915
            $input->setInstance(null);
1916
        }
1917
1918
        return $this;
1919
    }
1920
1921
    /**
1922
     * Clears out the collChannels collection
1923
     *
1924
     * This does not modify the database; however, it will remove any associated objects, causing
1925
     * them to be refetched by subsequent calls to accessor method.
1926
     *
1927
     * @return void
1928
     * @see        addChannels()
1929
     */
1930
    public function clearChannels()
1931
    {
1932
        $this->collChannels = null; // important to set this to NULL since that means it is uninitialized
1933
    }
1934
1935
    /**
1936
     * Reset is the collChannels collection loaded partially.
1937
     */
1938
    public function resetPartialChannels($v = true)
1939
    {
1940
        $this->collChannelsPartial = $v;
1941
    }
1942
1943
    /**
1944
     * Initializes the collChannels collection.
1945
     *
1946
     * By default this just sets the collChannels collection to an empty array (like clearcollChannels());
1947
     * however, you may wish to override this method in your stub class to provide setting appropriate
1948
     * to your application -- for example, setting the initial array to the values stored in database.
1949
     *
1950
     * @param      boolean $overrideExisting If set to true, the method call initializes
1951
     *                                        the collection even if it is not empty
1952
     *
1953
     * @return void
1954
     */
1955 View Code Duplication
    public function initChannels($overrideExisting = true)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1956
    {
1957
        if (null !== $this->collChannels && !$overrideExisting) {
1958
            return;
1959
        }
1960
1961
        $collectionClassName = ChannelTableMap::getTableMap()->getCollectionClassName();
1962
1963
        $this->collChannels = new $collectionClassName;
1964
        $this->collChannels->setModel('\Jalle19\StatusManager\Database\Channel');
1965
    }
1966
1967
    /**
1968
     * Gets an array of ChildChannel objects which contain a foreign key that references this object.
1969
     *
1970
     * If the $criteria is not null, it is used to always fetch the results from the database.
1971
     * Otherwise the results are fetched from the database the first time, then cached.
1972
     * Next time the same method is called without $criteria, the cached collection is returned.
1973
     * If this ChildInstance is new, it will return
1974
     * an empty collection or the current collection; the criteria is ignored on a new object.
1975
     *
1976
     * @param      Criteria $criteria optional Criteria object to narrow the query
1977
     * @param      ConnectionInterface $con optional connection object
1978
     * @return ObjectCollection|ChildChannel[] List of ChildChannel objects
1979
     * @throws PropelException
1980
     */
1981 View Code Duplication
    public function getChannels(Criteria $criteria = null, ConnectionInterface $con = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1982
    {
1983
        $partial = $this->collChannelsPartial && !$this->isNew();
1984
        if (null === $this->collChannels || null !== $criteria  || $partial) {
1985
            if ($this->isNew() && null === $this->collChannels) {
1986
                // return empty collection
1987
                $this->initChannels();
1988
            } else {
1989
                $collChannels = ChildChannelQuery::create(null, $criteria)
1990
                    ->filterByInstance($this)
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a object<Jalle19\StatusMan...ction\ObjectCollection>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
1991
                    ->find($con);
0 ignored issues
show
Bug introduced by
It seems like $con defined by parameter $con on line 1981 can be null; however, Jalle19\StatusManager\Da...se\ChannelQuery::find() does not accept null, maybe add an additional type check?

It seems like you allow that null is being passed for a parameter, however the function which is called does not seem to accept null.

We recommend to add an additional type check (or disallow null for the parameter):

function notNullable(stdClass $x) { }

// Unsafe
function withoutCheck(stdClass $x = null) {
    notNullable($x);
}

// Safe - Alternative 1: Adding Additional Type-Check
function withCheck(stdClass $x = null) {
    if ($x instanceof stdClass) {
        notNullable($x);
    }
}

// Safe - Alternative 2: Changing Parameter
function withNonNullableParam(stdClass $x) {
    notNullable($x);
}
Loading history...
1992
1993
                if (null !== $criteria) {
1994
                    if (false !== $this->collChannelsPartial && count($collChannels)) {
1995
                        $this->initChannels(false);
1996
1997
                        foreach ($collChannels as $obj) {
1998
                            if (false == $this->collChannels->contains($obj)) {
1999
                                $this->collChannels->append($obj);
2000
                            }
2001
                        }
2002
2003
                        $this->collChannelsPartial = true;
2004
                    }
2005
2006
                    return $collChannels;
2007
                }
2008
2009
                if ($partial && $this->collChannels) {
2010
                    foreach ($this->collChannels as $obj) {
2011
                        if ($obj->isNew()) {
2012
                            $collChannels[] = $obj;
2013
                        }
2014
                    }
2015
                }
2016
2017
                $this->collChannels = $collChannels;
2018
                $this->collChannelsPartial = false;
2019
            }
2020
        }
2021
2022
        return $this->collChannels;
2023
    }
2024
2025
    /**
2026
     * Sets a collection of ChildChannel objects related by a one-to-many relationship
2027
     * to the current object.
2028
     * It will also schedule objects for deletion based on a diff between old objects (aka persisted)
2029
     * and new objects from the given Propel collection.
2030
     *
2031
     * @param      Collection $channels A Propel collection.
2032
     * @param      ConnectionInterface $con Optional connection object
2033
     * @return $this|ChildInstance The current object (for fluent API support)
2034
     */
2035
    public function setChannels(Collection $channels, ConnectionInterface $con = null)
2036
    {
2037
        /** @var ChildChannel[] $channelsToDelete */
2038
        $channelsToDelete = $this->getChannels(new Criteria(), $con)->diff($channels);
2039
2040
2041
        $this->channelsScheduledForDeletion = $channelsToDelete;
2042
2043
        foreach ($channelsToDelete as $channelRemoved) {
2044
            $channelRemoved->setInstance(null);
2045
        }
2046
2047
        $this->collChannels = null;
2048
        foreach ($channels as $channel) {
2049
            $this->addChannel($channel);
2050
        }
2051
2052
        $this->collChannels = $channels;
0 ignored issues
show
Documentation Bug introduced by
It seems like $channels of type object<Propel\Runtime\Collection\Collection> is incompatible with the declared type object<Propel\Runtime\Co...ager\Database\Channel>> of property $collChannels.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
2053
        $this->collChannelsPartial = false;
2054
2055
        return $this;
2056
    }
2057
2058
    /**
2059
     * Returns the number of related Channel objects.
2060
     *
2061
     * @param      Criteria $criteria
2062
     * @param      boolean $distinct
2063
     * @param      ConnectionInterface $con
2064
     * @return int             Count of related Channel objects.
2065
     * @throws PropelException
2066
     */
2067 View Code Duplication
    public function countChannels(Criteria $criteria = null, $distinct = false, ConnectionInterface $con = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2068
    {
2069
        $partial = $this->collChannelsPartial && !$this->isNew();
2070
        if (null === $this->collChannels || null !== $criteria || $partial) {
2071
            if ($this->isNew() && null === $this->collChannels) {
2072
                return 0;
2073
            }
2074
2075
            if ($partial && !$criteria) {
2076
                return count($this->getChannels());
2077
            }
2078
2079
            $query = ChildChannelQuery::create(null, $criteria);
2080
            if ($distinct) {
2081
                $query->distinct();
2082
            }
2083
2084
            return $query
2085
                ->filterByInstance($this)
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a object<Jalle19\StatusMan...ction\ObjectCollection>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
2086
                ->count($con);
2087
        }
2088
2089
        return count($this->collChannels);
2090
    }
2091
2092
    /**
2093
     * Method called to associate a ChildChannel object to this object
2094
     * through the ChildChannel foreign key attribute.
2095
     *
2096
     * @param  ChildChannel $l ChildChannel
2097
     * @return $this|\Jalle19\StatusManager\Database\Instance The current object (for fluent API support)
2098
     */
2099
    public function addChannel(ChildChannel $l)
2100
    {
2101
        if ($this->collChannels === null) {
2102
            $this->initChannels();
2103
            $this->collChannelsPartial = true;
2104
        }
2105
2106
        if (!$this->collChannels->contains($l)) {
2107
            $this->doAddChannel($l);
2108
2109
            if ($this->channelsScheduledForDeletion and $this->channelsScheduledForDeletion->contains($l)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
Using logical operators such as and instead of && is generally not recommended.

PHP has two types of connecting operators (logical operators, and boolean operators):

  Logical Operators Boolean Operator
AND - meaning and &&
OR - meaning or ||

The difference between these is the order in which they are executed. In most cases, you would want to use a boolean operator like &&, or ||.

Let’s take a look at a few examples:

// Logical operators have lower precedence:
$f = false or true;

// is executed like this:
($f = false) or true;


// Boolean operators have higher precedence:
$f = false || true;

// is executed like this:
$f = (false || true);

Logical Operators are used for Control-Flow

One case where you explicitly want to use logical operators is for control-flow such as this:

$x === 5
    or die('$x must be 5.');

// Instead of
if ($x !== 5) {
    die('$x must be 5.');
}

Since die introduces problems of its own, f.e. it makes our code hardly testable, and prevents any kind of more sophisticated error handling; you probably do not want to use this in real-world code. Unfortunately, logical operators cannot be combined with throw at this point:

// The following is currently a parse error.
$x === 5
    or throw new RuntimeException('$x must be 5.');

These limitations lead to logical operators rarely being of use in current PHP code.

Loading history...
2110
                $this->channelsScheduledForDeletion->remove($this->channelsScheduledForDeletion->search($l));
2111
            }
2112
        }
2113
2114
        return $this;
2115
    }
2116
2117
    /**
2118
     * @param ChildChannel $channel The ChildChannel object to add.
2119
     */
2120
    protected function doAddChannel(ChildChannel $channel)
2121
    {
2122
        $this->collChannels[]= $channel;
2123
        $channel->setInstance($this);
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a null|object<Jalle19\Stat...ager\Database\Instance>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
2124
    }
2125
2126
    /**
2127
     * @param  ChildChannel $channel The ChildChannel object to remove.
2128
     * @return $this|ChildInstance The current object (for fluent API support)
2129
     */
2130
    public function removeChannel(ChildChannel $channel)
2131
    {
2132
        if ($this->getChannels()->contains($channel)) {
2133
            $pos = $this->collChannels->search($channel);
2134
            $this->collChannels->remove($pos);
2135
            if (null === $this->channelsScheduledForDeletion) {
2136
                $this->channelsScheduledForDeletion = clone $this->collChannels;
2137
                $this->channelsScheduledForDeletion->clear();
2138
            }
2139
            $this->channelsScheduledForDeletion[]= clone $channel;
2140
            $channel->setInstance(null);
2141
        }
2142
2143
        return $this;
2144
    }
2145
2146
    /**
2147
     * Clears out the collSubscriptions collection
2148
     *
2149
     * This does not modify the database; however, it will remove any associated objects, causing
2150
     * them to be refetched by subsequent calls to accessor method.
2151
     *
2152
     * @return void
2153
     * @see        addSubscriptions()
2154
     */
2155
    public function clearSubscriptions()
2156
    {
2157
        $this->collSubscriptions = null; // important to set this to NULL since that means it is uninitialized
2158
    }
2159
2160
    /**
2161
     * Reset is the collSubscriptions collection loaded partially.
2162
     */
2163
    public function resetPartialSubscriptions($v = true)
2164
    {
2165
        $this->collSubscriptionsPartial = $v;
2166
    }
2167
2168
    /**
2169
     * Initializes the collSubscriptions collection.
2170
     *
2171
     * By default this just sets the collSubscriptions collection to an empty array (like clearcollSubscriptions());
2172
     * however, you may wish to override this method in your stub class to provide setting appropriate
2173
     * to your application -- for example, setting the initial array to the values stored in database.
2174
     *
2175
     * @param      boolean $overrideExisting If set to true, the method call initializes
2176
     *                                        the collection even if it is not empty
2177
     *
2178
     * @return void
2179
     */
2180 View Code Duplication
    public function initSubscriptions($overrideExisting = true)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2181
    {
2182
        if (null !== $this->collSubscriptions && !$overrideExisting) {
2183
            return;
2184
        }
2185
2186
        $collectionClassName = SubscriptionTableMap::getTableMap()->getCollectionClassName();
2187
2188
        $this->collSubscriptions = new $collectionClassName;
2189
        $this->collSubscriptions->setModel('\Jalle19\StatusManager\Database\Subscription');
2190
    }
2191
2192
    /**
2193
     * Gets an array of ChildSubscription objects which contain a foreign key that references this object.
2194
     *
2195
     * If the $criteria is not null, it is used to always fetch the results from the database.
2196
     * Otherwise the results are fetched from the database the first time, then cached.
2197
     * Next time the same method is called without $criteria, the cached collection is returned.
2198
     * If this ChildInstance is new, it will return
2199
     * an empty collection or the current collection; the criteria is ignored on a new object.
2200
     *
2201
     * @param      Criteria $criteria optional Criteria object to narrow the query
2202
     * @param      ConnectionInterface $con optional connection object
2203
     * @return ObjectCollection|ChildSubscription[] List of ChildSubscription objects
2204
     * @throws PropelException
2205
     */
2206 View Code Duplication
    public function getSubscriptions(Criteria $criteria = null, ConnectionInterface $con = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2207
    {
2208
        $partial = $this->collSubscriptionsPartial && !$this->isNew();
2209
        if (null === $this->collSubscriptions || null !== $criteria  || $partial) {
2210
            if ($this->isNew() && null === $this->collSubscriptions) {
2211
                // return empty collection
2212
                $this->initSubscriptions();
2213
            } else {
2214
                $collSubscriptions = ChildSubscriptionQuery::create(null, $criteria)
2215
                    ->filterByInstance($this)
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a object<Jalle19\StatusMan...ction\ObjectCollection>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
2216
                    ->find($con);
0 ignored issues
show
Bug introduced by
It seems like $con defined by parameter $con on line 2206 can be null; however, Jalle19\StatusManager\Da...bscriptionQuery::find() does not accept null, maybe add an additional type check?

It seems like you allow that null is being passed for a parameter, however the function which is called does not seem to accept null.

We recommend to add an additional type check (or disallow null for the parameter):

function notNullable(stdClass $x) { }

// Unsafe
function withoutCheck(stdClass $x = null) {
    notNullable($x);
}

// Safe - Alternative 1: Adding Additional Type-Check
function withCheck(stdClass $x = null) {
    if ($x instanceof stdClass) {
        notNullable($x);
    }
}

// Safe - Alternative 2: Changing Parameter
function withNonNullableParam(stdClass $x) {
    notNullable($x);
}
Loading history...
2217
2218
                if (null !== $criteria) {
2219
                    if (false !== $this->collSubscriptionsPartial && count($collSubscriptions)) {
2220
                        $this->initSubscriptions(false);
2221
2222
                        foreach ($collSubscriptions as $obj) {
2223
                            if (false == $this->collSubscriptions->contains($obj)) {
2224
                                $this->collSubscriptions->append($obj);
2225
                            }
2226
                        }
2227
2228
                        $this->collSubscriptionsPartial = true;
2229
                    }
2230
2231
                    return $collSubscriptions;
2232
                }
2233
2234
                if ($partial && $this->collSubscriptions) {
2235
                    foreach ($this->collSubscriptions as $obj) {
2236
                        if ($obj->isNew()) {
2237
                            $collSubscriptions[] = $obj;
2238
                        }
2239
                    }
2240
                }
2241
2242
                $this->collSubscriptions = $collSubscriptions;
2243
                $this->collSubscriptionsPartial = false;
2244
            }
2245
        }
2246
2247
        return $this->collSubscriptions;
2248
    }
2249
2250
    /**
2251
     * Sets a collection of ChildSubscription objects related by a one-to-many relationship
2252
     * to the current object.
2253
     * It will also schedule objects for deletion based on a diff between old objects (aka persisted)
2254
     * and new objects from the given Propel collection.
2255
     *
2256
     * @param      Collection $subscriptions A Propel collection.
2257
     * @param      ConnectionInterface $con Optional connection object
2258
     * @return $this|ChildInstance The current object (for fluent API support)
2259
     */
2260
    public function setSubscriptions(Collection $subscriptions, ConnectionInterface $con = null)
2261
    {
2262
        /** @var ChildSubscription[] $subscriptionsToDelete */
2263
        $subscriptionsToDelete = $this->getSubscriptions(new Criteria(), $con)->diff($subscriptions);
2264
2265
2266
        $this->subscriptionsScheduledForDeletion = $subscriptionsToDelete;
2267
2268
        foreach ($subscriptionsToDelete as $subscriptionRemoved) {
2269
            $subscriptionRemoved->setInstance(null);
2270
        }
2271
2272
        $this->collSubscriptions = null;
2273
        foreach ($subscriptions as $subscription) {
2274
            $this->addSubscription($subscription);
2275
        }
2276
2277
        $this->collSubscriptions = $subscriptions;
0 ignored issues
show
Documentation Bug introduced by
It seems like $subscriptions of type object<Propel\Runtime\Collection\Collection> is incompatible with the declared type object<Propel\Runtime\Co...Database\Subscription>> of property $collSubscriptions.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
2278
        $this->collSubscriptionsPartial = false;
2279
2280
        return $this;
2281
    }
2282
2283
    /**
2284
     * Returns the number of related Subscription objects.
2285
     *
2286
     * @param      Criteria $criteria
2287
     * @param      boolean $distinct
2288
     * @param      ConnectionInterface $con
2289
     * @return int             Count of related Subscription objects.
2290
     * @throws PropelException
2291
     */
2292 View Code Duplication
    public function countSubscriptions(Criteria $criteria = null, $distinct = false, ConnectionInterface $con = null)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2293
    {
2294
        $partial = $this->collSubscriptionsPartial && !$this->isNew();
2295
        if (null === $this->collSubscriptions || null !== $criteria || $partial) {
2296
            if ($this->isNew() && null === $this->collSubscriptions) {
2297
                return 0;
2298
            }
2299
2300
            if ($partial && !$criteria) {
2301
                return count($this->getSubscriptions());
2302
            }
2303
2304
            $query = ChildSubscriptionQuery::create(null, $criteria);
2305
            if ($distinct) {
2306
                $query->distinct();
2307
            }
2308
2309
            return $query
2310
                ->filterByInstance($this)
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a object<Jalle19\StatusMan...ction\ObjectCollection>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
2311
                ->count($con);
2312
        }
2313
2314
        return count($this->collSubscriptions);
2315
    }
2316
2317
    /**
2318
     * Method called to associate a ChildSubscription object to this object
2319
     * through the ChildSubscription foreign key attribute.
2320
     *
2321
     * @param  ChildSubscription $l ChildSubscription
2322
     * @return $this|\Jalle19\StatusManager\Database\Instance The current object (for fluent API support)
2323
     */
2324 View Code Duplication
    public function addSubscription(ChildSubscription $l)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2325
    {
2326
        if ($this->collSubscriptions === null) {
2327
            $this->initSubscriptions();
2328
            $this->collSubscriptionsPartial = true;
2329
        }
2330
2331
        if (!$this->collSubscriptions->contains($l)) {
2332
            $this->doAddSubscription($l);
2333
2334
            if ($this->subscriptionsScheduledForDeletion and $this->subscriptionsScheduledForDeletion->contains($l)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
Using logical operators such as and instead of && is generally not recommended.

PHP has two types of connecting operators (logical operators, and boolean operators):

  Logical Operators Boolean Operator
AND - meaning and &&
OR - meaning or ||

The difference between these is the order in which they are executed. In most cases, you would want to use a boolean operator like &&, or ||.

Let’s take a look at a few examples:

// Logical operators have lower precedence:
$f = false or true;

// is executed like this:
($f = false) or true;


// Boolean operators have higher precedence:
$f = false || true;

// is executed like this:
$f = (false || true);

Logical Operators are used for Control-Flow

One case where you explicitly want to use logical operators is for control-flow such as this:

$x === 5
    or die('$x must be 5.');

// Instead of
if ($x !== 5) {
    die('$x must be 5.');
}

Since die introduces problems of its own, f.e. it makes our code hardly testable, and prevents any kind of more sophisticated error handling; you probably do not want to use this in real-world code. Unfortunately, logical operators cannot be combined with throw at this point:

// The following is currently a parse error.
$x === 5
    or throw new RuntimeException('$x must be 5.');

These limitations lead to logical operators rarely being of use in current PHP code.

Loading history...
2335
                $this->subscriptionsScheduledForDeletion->remove($this->subscriptionsScheduledForDeletion->search($l));
2336
            }
2337
        }
2338
2339
        return $this;
2340
    }
2341
2342
    /**
2343
     * @param ChildSubscription $subscription The ChildSubscription object to add.
2344
     */
2345
    protected function doAddSubscription(ChildSubscription $subscription)
2346
    {
2347
        $this->collSubscriptions[]= $subscription;
2348
        $subscription->setInstance($this);
0 ignored issues
show
Documentation introduced by
$this is of type this<Jalle19\StatusManag...Database\Base\Instance>, but the function expects a null|object<Jalle19\Stat...ager\Database\Instance>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
2349
    }
2350
2351
    /**
2352
     * @param  ChildSubscription $subscription The ChildSubscription object to remove.
2353
     * @return $this|ChildInstance The current object (for fluent API support)
2354
     */
2355
    public function removeSubscription(ChildSubscription $subscription)
2356
    {
2357
        if ($this->getSubscriptions()->contains($subscription)) {
2358
            $pos = $this->collSubscriptions->search($subscription);
2359
            $this->collSubscriptions->remove($pos);
2360
            if (null === $this->subscriptionsScheduledForDeletion) {
2361
                $this->subscriptionsScheduledForDeletion = clone $this->collSubscriptions;
2362
                $this->subscriptionsScheduledForDeletion->clear();
2363
            }
2364
            $this->subscriptionsScheduledForDeletion[]= clone $subscription;
2365
            $subscription->setInstance(null);
2366
        }
2367
2368
        return $this;
2369
    }
2370
2371
2372
    /**
2373
     * If this collection has already been initialized with
2374
     * an identical criteria, it returns the collection.
2375
     * Otherwise if this Instance is new, it will return
2376
     * an empty collection; or if this Instance has previously
2377
     * been saved, it will retrieve related Subscriptions from storage.
2378
     *
2379
     * This method is protected by default in order to keep the public
2380
     * api reasonable.  You can provide public methods for those you
2381
     * actually need in Instance.
2382
     *
2383
     * @param      Criteria $criteria optional Criteria object to narrow the query
2384
     * @param      ConnectionInterface $con optional connection object
2385
     * @param      string $joinBehavior optional join type to use (defaults to Criteria::LEFT_JOIN)
2386
     * @return ObjectCollection|ChildSubscription[] List of ChildSubscription objects
2387
     */
2388 View Code Duplication
    public function getSubscriptionsJoinInput(Criteria $criteria = null, ConnectionInterface $con = null, $joinBehavior = Criteria::LEFT_JOIN)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2389
    {
2390
        $query = ChildSubscriptionQuery::create(null, $criteria);
2391
        $query->joinWith('Input', $joinBehavior);
2392
2393
        return $this->getSubscriptions($query, $con);
2394
    }
2395
2396
2397
    /**
2398
     * If this collection has already been initialized with
2399
     * an identical criteria, it returns the collection.
2400
     * Otherwise if this Instance is new, it will return
2401
     * an empty collection; or if this Instance has previously
2402
     * been saved, it will retrieve related Subscriptions from storage.
2403
     *
2404
     * This method is protected by default in order to keep the public
2405
     * api reasonable.  You can provide public methods for those you
2406
     * actually need in Instance.
2407
     *
2408
     * @param      Criteria $criteria optional Criteria object to narrow the query
2409
     * @param      ConnectionInterface $con optional connection object
2410
     * @param      string $joinBehavior optional join type to use (defaults to Criteria::LEFT_JOIN)
2411
     * @return ObjectCollection|ChildSubscription[] List of ChildSubscription objects
2412
     */
2413 View Code Duplication
    public function getSubscriptionsJoinUser(Criteria $criteria = null, ConnectionInterface $con = null, $joinBehavior = Criteria::LEFT_JOIN)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2414
    {
2415
        $query = ChildSubscriptionQuery::create(null, $criteria);
2416
        $query->joinWith('User', $joinBehavior);
2417
2418
        return $this->getSubscriptions($query, $con);
2419
    }
2420
2421
2422
    /**
2423
     * If this collection has already been initialized with
2424
     * an identical criteria, it returns the collection.
2425
     * Otherwise if this Instance is new, it will return
2426
     * an empty collection; or if this Instance has previously
2427
     * been saved, it will retrieve related Subscriptions from storage.
2428
     *
2429
     * This method is protected by default in order to keep the public
2430
     * api reasonable.  You can provide public methods for those you
2431
     * actually need in Instance.
2432
     *
2433
     * @param      Criteria $criteria optional Criteria object to narrow the query
2434
     * @param      ConnectionInterface $con optional connection object
2435
     * @param      string $joinBehavior optional join type to use (defaults to Criteria::LEFT_JOIN)
2436
     * @return ObjectCollection|ChildSubscription[] List of ChildSubscription objects
2437
     */
2438 View Code Duplication
    public function getSubscriptionsJoinChannel(Criteria $criteria = null, ConnectionInterface $con = null, $joinBehavior = Criteria::LEFT_JOIN)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2439
    {
2440
        $query = ChildSubscriptionQuery::create(null, $criteria);
2441
        $query->joinWith('Channel', $joinBehavior);
2442
2443
        return $this->getSubscriptions($query, $con);
2444
    }
2445
2446
    /**
2447
     * Clears the current object, sets all attributes to their default values and removes
2448
     * outgoing references as well as back-references (from other objects to this one. Results probably in a database
2449
     * change of those foreign objects when you call `save` there).
2450
     */
2451
    public function clear()
2452
    {
2453
        $this->name = null;
2454
        $this->alreadyInSave = false;
2455
        $this->clearAllReferences();
2456
        $this->resetModified();
2457
        $this->setNew(true);
2458
        $this->setDeleted(false);
2459
    }
2460
2461
    /**
2462
     * Resets all references and back-references to other model objects or collections of model objects.
2463
     *
2464
     * This method is used to reset all php object references (not the actual reference in the database).
2465
     * Necessary for object serialisation.
2466
     *
2467
     * @param      boolean $deep Whether to also clear the references on all referrer objects.
2468
     */
2469
    public function clearAllReferences($deep = false)
2470
    {
2471
        if ($deep) {
2472
            if ($this->collUsers) {
2473
                foreach ($this->collUsers as $o) {
2474
                    $o->clearAllReferences($deep);
2475
                }
2476
            }
2477
            if ($this->collConnections) {
2478
                foreach ($this->collConnections as $o) {
2479
                    $o->clearAllReferences($deep);
2480
                }
2481
            }
2482
            if ($this->collInputs) {
2483
                foreach ($this->collInputs as $o) {
2484
                    $o->clearAllReferences($deep);
2485
                }
2486
            }
2487
            if ($this->collChannels) {
2488
                foreach ($this->collChannels as $o) {
2489
                    $o->clearAllReferences($deep);
2490
                }
2491
            }
2492
            if ($this->collSubscriptions) {
2493
                foreach ($this->collSubscriptions as $o) {
2494
                    $o->clearAllReferences($deep);
2495
                }
2496
            }
2497
        } // if ($deep)
0 ignored issues
show
Unused Code Comprehensibility introduced by
67% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
2498
2499
        $this->collUsers = null;
2500
        $this->collConnections = null;
2501
        $this->collInputs = null;
2502
        $this->collChannels = null;
2503
        $this->collSubscriptions = null;
2504
    }
2505
2506
    /**
2507
     * Return the string representation of this object
2508
     *
2509
     * @return string
2510
     */
2511
    public function __toString()
2512
    {
2513
        return (string) $this->exportTo(InstanceTableMap::DEFAULT_STRING_FORMAT);
2514
    }
2515
2516
    /**
2517
     * Code to be run before persisting the object
2518
     * @param  ConnectionInterface $con
2519
     * @return boolean
2520
     */
2521
    public function preSave(ConnectionInterface $con = null)
0 ignored issues
show
Unused Code introduced by
The parameter $con is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2522
    {
2523
        return true;
2524
    }
2525
2526
    /**
2527
     * Code to be run after persisting the object
2528
     * @param ConnectionInterface $con
2529
     */
2530
    public function postSave(ConnectionInterface $con = null)
0 ignored issues
show
Unused Code introduced by
The parameter $con is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2531
    {
2532
2533
    }
2534
2535
    /**
2536
     * Code to be run before inserting to database
2537
     * @param  ConnectionInterface $con
2538
     * @return boolean
2539
     */
2540
    public function preInsert(ConnectionInterface $con = null)
0 ignored issues
show
Unused Code introduced by
The parameter $con is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2541
    {
2542
        return true;
2543
    }
2544
2545
    /**
2546
     * Code to be run after inserting to database
2547
     * @param ConnectionInterface $con
2548
     */
2549
    public function postInsert(ConnectionInterface $con = null)
0 ignored issues
show
Unused Code introduced by
The parameter $con is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2550
    {
2551
2552
    }
2553
2554
    /**
2555
     * Code to be run before updating the object in database
2556
     * @param  ConnectionInterface $con
2557
     * @return boolean
2558
     */
2559
    public function preUpdate(ConnectionInterface $con = null)
0 ignored issues
show
Unused Code introduced by
The parameter $con is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2560
    {
2561
        return true;
2562
    }
2563
2564
    /**
2565
     * Code to be run after updating the object in database
2566
     * @param ConnectionInterface $con
2567
     */
2568
    public function postUpdate(ConnectionInterface $con = null)
0 ignored issues
show
Unused Code introduced by
The parameter $con is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2569
    {
2570
2571
    }
2572
2573
    /**
2574
     * Code to be run before deleting the object in database
2575
     * @param  ConnectionInterface $con
2576
     * @return boolean
2577
     */
2578
    public function preDelete(ConnectionInterface $con = null)
0 ignored issues
show
Unused Code introduced by
The parameter $con is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2579
    {
2580
        return true;
2581
    }
2582
2583
    /**
2584
     * Code to be run after deleting the object in database
2585
     * @param ConnectionInterface $con
2586
     */
2587
    public function postDelete(ConnectionInterface $con = null)
0 ignored issues
show
Unused Code introduced by
The parameter $con is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
2588
    {
2589
2590
    }
2591
2592
2593
    /**
2594
     * Derived method to catches calls to undefined methods.
2595
     *
2596
     * Provides magic import/export method support (fromXML()/toXML(), fromYAML()/toYAML(), etc.).
2597
     * Allows to define default __call() behavior if you overwrite __call()
2598
     *
2599
     * @param string $name
2600
     * @param mixed  $params
2601
     *
2602
     * @return array|string
2603
     */
2604 View Code Duplication
    public function __call($name, $params)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2605
    {
2606
        if (0 === strpos($name, 'get')) {
2607
            $virtualColumn = substr($name, 3);
2608
            if ($this->hasVirtualColumn($virtualColumn)) {
2609
                return $this->getVirtualColumn($virtualColumn);
2610
            }
2611
2612
            $virtualColumn = lcfirst($virtualColumn);
2613
            if ($this->hasVirtualColumn($virtualColumn)) {
2614
                return $this->getVirtualColumn($virtualColumn);
2615
            }
2616
        }
2617
2618
        if (0 === strpos($name, 'from')) {
2619
            $format = substr($name, 4);
2620
2621
            return $this->importFrom($format, reset($params));
0 ignored issues
show
Bug Best Practice introduced by
The return type of return $this->importFrom...ormat, reset($params)); (Jalle19\StatusManager\Database\Base\Instance) is incompatible with the return type documented by Jalle19\StatusManager\Da...e\Base\Instance::__call of type array|string.

If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design.

Let’s take a look at an example:

class Author {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

abstract class Post {
    public function getAuthor() {
        return 'Johannes';
    }
}

class BlogPost extends Post {
    public function getAuthor() {
        return new Author('Johannes');
    }
}

class ForumPost extends Post { /* ... */ }

function my_function(Post $post) {
    echo strtoupper($post->getAuthor());
}

Our function my_function expects a Post object, and outputs the author of the post. The base class Post returns a simple string and outputting a simple string will work just fine. However, the child class BlogPost which is a sub-type of Post instead decided to return an object, and is therefore violating the SOLID principles. If a BlogPost were passed to my_function, PHP would not complain, but ultimately fail when executing the strtoupper call in its body.

Loading history...
2622
        }
2623
2624
        if (0 === strpos($name, 'to')) {
2625
            $format = substr($name, 2);
2626
            $includeLazyLoadColumns = isset($params[0]) ? $params[0] : true;
2627
2628
            return $this->exportTo($format, $includeLazyLoadColumns);
2629
        }
2630
2631
        throw new BadMethodCallException(sprintf('Call to undefined method: %s.', $name));
2632
    }
2633
2634
}
2635