Completed
Push — master ( 8d6c09...33443d )
by Sam
05:30 queued 40s
created

Connection   F

Complexity

Total Complexity 218

Size/Duplication

Total Lines 1554
Duplicated Lines 21.3 %

Coupling/Cohesion

Components 1
Dependencies 15

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 218
c 1
b 0
f 0
lcom 1
cbo 15
dl 331
loc 1554
rs 0.6314

69 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A isModified() 0 4 1
A isColumnModified() 0 4 2
A getModifiedColumns() 0 4 2
A isNew() 0 4 1
A setNew() 0 4 1
A isDeleted() 0 4 1
A setDeleted() 0 4 1
A resetModified() 10 10 3
B equals() 16 16 5
A getVirtualColumns() 0 4 1
A hasVirtualColumn() 0 4 1
A getVirtualColumn() 8 8 2
A setVirtualColumn() 0 6 1
A log() 0 4 1
A exportTo() 8 8 2
A __sleep() 14 14 2
A getId() 0 4 1
A getInstanceName() 0 4 1
A getUserId() 0 4 1
A getPeer() 0 4 1
A getStarted() 8 8 3
A getType() 0 4 1
A setId() 0 13 3
B setInstanceName() 17 17 5
B setUserId() 17 17 5
A setPeer() 0 13 3
B setStarted() 12 12 7
A setType() 0 13 3
A hasOnlyDefaultValues() 0 5 1
F hydrate() 0 35 15
B ensureConsistency() 6 9 5
B reload() 0 31 6
A delete() 21 21 4
C save() 34 34 8
C doSave() 22 42 11
F doInsert() 3 75 18
A doUpdate() 0 7 1
A getByName() 7 7 1
C getByPosition() 0 26 7
C toArray() 35 60 11
A setByName() 0 6 1
C setByPosition() 0 25 7
C fromArray() 0 23 7
A importFrom() 10 10 2
C buildCriteria() 0 25 7
A buildPkeyCriteria() 0 7 1
A hashCode() 15 15 3
A getPrimaryKey() 0 4 1
A setPrimaryKey() 0 4 1
A isPrimaryKeyNull() 0 4 1
A copyInto() 0 12 2
A copy() 9 9 1
A setInstance() 0 19 3
A getInstance() 15 15 4
A setUser() 0 19 3
A getUser() 15 15 3
A clear() 0 20 3
A clearAllReferences() 0 8 2
A __toString() 0 4 1
A preSave() 0 4 1
A postSave() 0 4 1
A preInsert() 0 4 1
A postInsert() 0 4 1
A preUpdate() 0 4 1
A postUpdate() 0 4 1
A preDelete() 0 4 1
A postDelete() 0 4 1
C __call() 29 29 7

How to fix   Duplicated Code    Complexity   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

Complex Class

 Tip:   Before tackling complexity, make sure that you eliminate any duplication first. This often can reduce the size of classes significantly.

Complex classes like Connection often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use Connection, and based on these observations, apply Extract Interface, too.

1
<?php
2
3
namespace Jalle19\StatusManager\Database\Base;
4
5
use \DateTime;
6
use \Exception;
7
use \PDO;
8
use Jalle19\StatusManager\Database\ConnectionQuery as ChildConnectionQuery;
9
use Jalle19\StatusManager\Database\Instance as ChildInstance;
10
use Jalle19\StatusManager\Database\InstanceQuery as ChildInstanceQuery;
11
use Jalle19\StatusManager\Database\User as ChildUser;
12
use Jalle19\StatusManager\Database\UserQuery as ChildUserQuery;
13
use Jalle19\StatusManager\Database\Map\ConnectionTableMap;
14
use Propel\Runtime\Propel;
15
use Propel\Runtime\ActiveQuery\Criteria;
16
use Propel\Runtime\ActiveQuery\ModelCriteria;
17
use Propel\Runtime\ActiveRecord\ActiveRecordInterface;
18
use Propel\Runtime\Collection\Collection;
19
use Propel\Runtime\Connection\ConnectionInterface;
20
use Propel\Runtime\Exception\BadMethodCallException;
21
use Propel\Runtime\Exception\LogicException;
22
use Propel\Runtime\Exception\PropelException;
23
use Propel\Runtime\Map\TableMap;
24
use Propel\Runtime\Parser\AbstractParser;
25
use Propel\Runtime\Util\PropelDateTime;
26
27
/**
28
 * Base class that represents a row from the 'connection' table.
29
 *
30
 *
31
 *
32
* @package    propel.generator.Jalle19.StatusManager.Database.Base
33
*/
34
abstract class Connection implements ActiveRecordInterface
35
{
36
    /**
37
     * TableMap class name
38
     */
39
    const TABLE_MAP = '\\Jalle19\\StatusManager\\Database\\Map\\ConnectionTableMap';
40
41
42
    /**
43
     * attribute to determine if this object has previously been saved.
44
     * @var boolean
45
     */
46
    protected $new = true;
47
48
    /**
49
     * attribute to determine whether this object has been deleted.
50
     * @var boolean
51
     */
52
    protected $deleted = false;
53
54
    /**
55
     * The columns that have been modified in current object.
56
     * Tracking modified columns allows us to only update modified columns.
57
     * @var array
58
     */
59
    protected $modifiedColumns = array();
60
61
    /**
62
     * The (virtual) columns that are added at runtime
63
     * The formatters can add supplementary columns based on a resultset
64
     * @var array
65
     */
66
    protected $virtualColumns = array();
67
68
    /**
69
     * The value for the id field.
70
     *
71
     * @var        int
72
     */
73
    protected $id;
74
75
    /**
76
     * The value for the instance_name field.
77
     *
78
     * @var        string
79
     */
80
    protected $instance_name;
81
82
    /**
83
     * The value for the user_id field.
84
     *
85
     * @var        int
86
     */
87
    protected $user_id;
88
89
    /**
90
     * The value for the peer field.
91
     *
92
     * @var        string
93
     */
94
    protected $peer;
95
96
    /**
97
     * The value for the started field.
98
     *
99
     * @var        \DateTime
100
     */
101
    protected $started;
102
103
    /**
104
     * The value for the type field.
105
     *
106
     * @var        string
107
     */
108
    protected $type;
109
110
    /**
111
     * @var        ChildInstance
112
     */
113
    protected $aInstance;
114
115
    /**
116
     * @var        ChildUser
117
     */
118
    protected $aUser;
119
120
    /**
121
     * Flag to prevent endless save loop, if this object is referenced
122
     * by another object which falls in this transaction.
123
     *
124
     * @var boolean
125
     */
126
    protected $alreadyInSave = false;
127
128
    /**
129
     * Initializes internal state of Jalle19\StatusManager\Database\Base\Connection object.
130
     */
131
    public function __construct()
132
    {
133
    }
134
135
    /**
136
     * Returns whether the object has been modified.
137
     *
138
     * @return boolean True if the object has been modified.
139
     */
140
    public function isModified()
141
    {
142
        return !!$this->modifiedColumns;
143
    }
144
145
    /**
146
     * Has specified column been modified?
147
     *
148
     * @param  string  $col column fully qualified name (TableMap::TYPE_COLNAME), e.g. Book::AUTHOR_ID
149
     * @return boolean True if $col has been modified.
150
     */
151
    public function isColumnModified($col)
152
    {
153
        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...
154
    }
155
156
    /**
157
     * Get the columns that have been modified in this object.
158
     * @return array A unique list of the modified column names for this object.
159
     */
160
    public function getModifiedColumns()
161
    {
162
        return $this->modifiedColumns ? array_keys($this->modifiedColumns) : [];
163
    }
164
165
    /**
166
     * Returns whether the object has ever been saved.  This will
167
     * be false, if the object was retrieved from storage or was created
168
     * and then saved.
169
     *
170
     * @return boolean true, if the object has never been persisted.
171
     */
172
    public function isNew()
173
    {
174
        return $this->new;
175
    }
176
177
    /**
178
     * Setter for the isNew attribute.  This method will be called
179
     * by Propel-generated children and objects.
180
     *
181
     * @param boolean $b the state of the object.
182
     */
183
    public function setNew($b)
184
    {
185
        $this->new = (boolean) $b;
186
    }
187
188
    /**
189
     * Whether this object has been deleted.
190
     * @return boolean The deleted state of this object.
191
     */
192
    public function isDeleted()
193
    {
194
        return $this->deleted;
195
    }
196
197
    /**
198
     * Specify whether this object has been deleted.
199
     * @param  boolean $b The deleted state of this object.
200
     * @return void
201
     */
202
    public function setDeleted($b)
203
    {
204
        $this->deleted = (boolean) $b;
205
    }
206
207
    /**
208
     * Sets the modified state for the object to be false.
209
     * @param  string $col If supplied, only the specified column is reset.
210
     * @return void
211
     */
212 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...
213
    {
214
        if (null !== $col) {
215
            if (isset($this->modifiedColumns[$col])) {
216
                unset($this->modifiedColumns[$col]);
217
            }
218
        } else {
219
            $this->modifiedColumns = array();
220
        }
221
    }
222
223
    /**
224
     * Compares this with another <code>Connection</code> instance.  If
225
     * <code>obj</code> is an instance of <code>Connection</code>, delegates to
226
     * <code>equals(Connection)</code>.  Otherwise, returns <code>false</code>.
227
     *
228
     * @param  mixed   $obj The object to compare to.
229
     * @return boolean Whether equal to the object specified.
230
     */
231 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...
232
    {
233
        if (!$obj instanceof static) {
234
            return false;
235
        }
236
237
        if ($this === $obj) {
238
            return true;
239
        }
240
241
        if (null === $this->getPrimaryKey() || null === $obj->getPrimaryKey()) {
242
            return false;
243
        }
244
245
        return $this->getPrimaryKey() === $obj->getPrimaryKey();
246
    }
247
248
    /**
249
     * Get the associative array of the virtual columns in this object
250
     *
251
     * @return array
252
     */
253
    public function getVirtualColumns()
254
    {
255
        return $this->virtualColumns;
256
    }
257
258
    /**
259
     * Checks the existence of a virtual column in this object
260
     *
261
     * @param  string  $name The virtual column name
262
     * @return boolean
263
     */
264
    public function hasVirtualColumn($name)
265
    {
266
        return array_key_exists($name, $this->virtualColumns);
267
    }
268
269
    /**
270
     * Get the value of a virtual column in this object
271
     *
272
     * @param  string $name The virtual column name
273
     * @return mixed
274
     *
275
     * @throws PropelException
276
     */
277 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...
278
    {
279
        if (!$this->hasVirtualColumn($name)) {
280
            throw new PropelException(sprintf('Cannot get value of inexistent virtual column %s.', $name));
281
        }
282
283
        return $this->virtualColumns[$name];
284
    }
285
286
    /**
287
     * Set the value of a virtual column in this object
288
     *
289
     * @param string $name  The virtual column name
290
     * @param mixed  $value The value to give to the virtual column
291
     *
292
     * @return $this|Connection The current object, for fluid interface
293
     */
294
    public function setVirtualColumn($name, $value)
295
    {
296
        $this->virtualColumns[$name] = $value;
297
298
        return $this;
299
    }
300
301
    /**
302
     * Logs a message using Propel::log().
303
     *
304
     * @param  string  $msg
305
     * @param  int     $priority One of the Propel::LOG_* logging levels
306
     * @return boolean
307
     */
308
    protected function log($msg, $priority = Propel::LOG_INFO)
309
    {
310
        return Propel::log(get_class($this) . ': ' . $msg, $priority);
311
    }
312
313
    /**
314
     * Export the current object properties to a string, using a given parser format
315
     * <code>
316
     * $book = BookQuery::create()->findPk(9012);
317
     * echo $book->exportTo('JSON');
318
     *  => {"Id":9012,"Title":"Don Juan","ISBN":"0140422161","Price":12.99,"PublisherId":1234,"AuthorId":5678}');
319
     * </code>
320
     *
321
     * @param  mixed   $parser                 A AbstractParser instance, or a format name ('XML', 'YAML', 'JSON', 'CSV')
322
     * @param  boolean $includeLazyLoadColumns (optional) Whether to include lazy load(ed) columns. Defaults to TRUE.
323
     * @return string  The exported data
324
     */
325 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...
326
    {
327
        if (!$parser instanceof AbstractParser) {
328
            $parser = AbstractParser::getParser($parser);
329
        }
330
331
        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...e\Connection::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...
332
    }
333
334
    /**
335
     * Clean up internal collections prior to serializing
336
     * Avoids recursive loops that turn into segmentation faults when serializing
337
     */
338 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...
339
    {
340
        $this->clearAllReferences();
341
342
        $cls = new \ReflectionClass($this);
343
        $propertyNames = [];
344
        $serializableProperties = array_diff($cls->getProperties(), $cls->getProperties(\ReflectionProperty::IS_STATIC));
345
346
        foreach($serializableProperties as $property) {
347
            $propertyNames[] = $property->getName();
348
        }
349
350
        return $propertyNames;
351
    }
352
353
    /**
354
     * Get the [id] column value.
355
     *
356
     * @return int
357
     */
358
    public function getId()
359
    {
360
        return $this->id;
361
    }
362
363
    /**
364
     * Get the [instance_name] column value.
365
     *
366
     * @return string
367
     */
368
    public function getInstanceName()
369
    {
370
        return $this->instance_name;
371
    }
372
373
    /**
374
     * Get the [user_id] column value.
375
     *
376
     * @return int
377
     */
378
    public function getUserId()
379
    {
380
        return $this->user_id;
381
    }
382
383
    /**
384
     * Get the [peer] column value.
385
     *
386
     * @return string
387
     */
388
    public function getPeer()
389
    {
390
        return $this->peer;
391
    }
392
393
    /**
394
     * Get the [optionally formatted] temporal [started] column value.
395
     *
396
     *
397
     * @param      string $format The date/time format string (either date()-style or strftime()-style).
398
     *                            If format is NULL, then the raw DateTime object will be returned.
399
     *
400
     * @return string|DateTime Formatted date/time value as string or DateTime object (if format is NULL), NULL if column is NULL
401
     *
402
     * @throws PropelException - if unable to parse/validate the date/time value.
403
     */
404 View Code Duplication
    public function getStarted($format = 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...
405
    {
406
        if ($format === null) {
407
            return $this->started;
408
        } else {
409
            return $this->started instanceof \DateTime ? $this->started->format($format) : null;
410
        }
411
    }
412
413
    /**
414
     * Get the [type] column value.
415
     *
416
     * @return string
417
     */
418
    public function getType()
419
    {
420
        return $this->type;
421
    }
422
423
    /**
424
     * Set the value of [id] column.
425
     *
426
     * @param int $v new value
427
     * @return $this|\Jalle19\StatusManager\Database\Connection The current object (for fluent API support)
428
     */
429
    public function setId($v)
430
    {
431
        if ($v !== null) {
432
            $v = (int) $v;
433
        }
434
435
        if ($this->id !== $v) {
436
            $this->id = $v;
437
            $this->modifiedColumns[ConnectionTableMap::COL_ID] = true;
438
        }
439
440
        return $this;
441
    } // setId()
442
443
    /**
444
     * Set the value of [instance_name] column.
445
     *
446
     * @param string $v new value
447
     * @return $this|\Jalle19\StatusManager\Database\Connection The current object (for fluent API support)
448
     */
449 View Code Duplication
    public function setInstanceName($v)
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...
450
    {
451
        if ($v !== null) {
452
            $v = (string) $v;
453
        }
454
455
        if ($this->instance_name !== $v) {
456
            $this->instance_name = $v;
457
            $this->modifiedColumns[ConnectionTableMap::COL_INSTANCE_NAME] = true;
458
        }
459
460
        if ($this->aInstance !== null && $this->aInstance->getName() !== $v) {
461
            $this->aInstance = null;
462
        }
463
464
        return $this;
465
    } // setInstanceName()
466
467
    /**
468
     * Set the value of [user_id] column.
469
     *
470
     * @param int $v new value
471
     * @return $this|\Jalle19\StatusManager\Database\Connection The current object (for fluent API support)
472
     */
473 View Code Duplication
    public function setUserId($v)
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...
474
    {
475
        if ($v !== null) {
476
            $v = (int) $v;
477
        }
478
479
        if ($this->user_id !== $v) {
480
            $this->user_id = $v;
481
            $this->modifiedColumns[ConnectionTableMap::COL_USER_ID] = true;
482
        }
483
484
        if ($this->aUser !== null && $this->aUser->getId() !== $v) {
485
            $this->aUser = null;
486
        }
487
488
        return $this;
489
    } // setUserId()
490
491
    /**
492
     * Set the value of [peer] column.
493
     *
494
     * @param string $v new value
495
     * @return $this|\Jalle19\StatusManager\Database\Connection The current object (for fluent API support)
496
     */
497
    public function setPeer($v)
498
    {
499
        if ($v !== null) {
500
            $v = (string) $v;
501
        }
502
503
        if ($this->peer !== $v) {
504
            $this->peer = $v;
505
            $this->modifiedColumns[ConnectionTableMap::COL_PEER] = true;
506
        }
507
508
        return $this;
509
    } // setPeer()
510
511
    /**
512
     * Sets the value of [started] column to a normalized version of the date/time value specified.
513
     *
514
     * @param  mixed $v string, integer (timestamp), or \DateTime value.
515
     *               Empty strings are treated as NULL.
516
     * @return $this|\Jalle19\StatusManager\Database\Connection The current object (for fluent API support)
517
     */
518 View Code Duplication
    public function setStarted($v)
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...
519
    {
520
        $dt = PropelDateTime::newInstance($v, null, 'DateTime');
521
        if ($this->started !== null || $dt !== null) {
522
            if ($this->started === null || $dt === null || $dt->format("Y-m-d H:i:s") !== $this->started->format("Y-m-d H:i:s")) {
523
                $this->started = $dt === null ? null : clone $dt;
524
                $this->modifiedColumns[ConnectionTableMap::COL_STARTED] = true;
525
            }
526
        } // if either are not null
527
528
        return $this;
529
    } // setStarted()
530
531
    /**
532
     * Set the value of [type] column.
533
     *
534
     * @param string $v new value
535
     * @return $this|\Jalle19\StatusManager\Database\Connection The current object (for fluent API support)
536
     */
537
    public function setType($v)
538
    {
539
        if ($v !== null) {
540
            $v = (string) $v;
541
        }
542
543
        if ($this->type !== $v) {
544
            $this->type = $v;
545
            $this->modifiedColumns[ConnectionTableMap::COL_TYPE] = true;
546
        }
547
548
        return $this;
549
    } // setType()
550
551
    /**
552
     * Indicates whether the columns in this object are only set to default values.
553
     *
554
     * This method can be used in conjunction with isModified() to indicate whether an object is both
555
     * modified _and_ has some values set which are non-default.
556
     *
557
     * @return boolean Whether the columns in this object are only been set with default values.
558
     */
559
    public function hasOnlyDefaultValues()
560
    {
561
        // otherwise, everything was equal, so return TRUE
562
        return true;
563
    } // hasOnlyDefaultValues()
564
565
    /**
566
     * Hydrates (populates) the object variables with values from the database resultset.
567
     *
568
     * An offset (0-based "start column") is specified so that objects can be hydrated
569
     * with a subset of the columns in the resultset rows.  This is needed, for example,
570
     * for results of JOIN queries where the resultset row includes columns from two or
571
     * more tables.
572
     *
573
     * @param array   $row       The row returned by DataFetcher->fetch().
574
     * @param int     $startcol  0-based offset column which indicates which restultset column to start with.
575
     * @param boolean $rehydrate Whether this object is being re-hydrated from the database.
576
     * @param string  $indexType The index type of $row. Mostly DataFetcher->getIndexType().
577
                                  One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME
578
     *                            TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
579
     *
580
     * @return int             next starting column
581
     * @throws PropelException - Any caught Exception will be rewrapped as a PropelException.
582
     */
583
    public function hydrate($row, $startcol = 0, $rehydrate = false, $indexType = TableMap::TYPE_NUM)
584
    {
585
        try {
586
587
            $col = $row[TableMap::TYPE_NUM == $indexType ? 0 + $startcol : ConnectionTableMap::translateFieldName('Id', TableMap::TYPE_PHPNAME, $indexType)];
588
            $this->id = (null !== $col) ? (int) $col : null;
589
590
            $col = $row[TableMap::TYPE_NUM == $indexType ? 1 + $startcol : ConnectionTableMap::translateFieldName('InstanceName', TableMap::TYPE_PHPNAME, $indexType)];
591
            $this->instance_name = (null !== $col) ? (string) $col : null;
592
593
            $col = $row[TableMap::TYPE_NUM == $indexType ? 2 + $startcol : ConnectionTableMap::translateFieldName('UserId', TableMap::TYPE_PHPNAME, $indexType)];
594
            $this->user_id = (null !== $col) ? (int) $col : null;
595
596
            $col = $row[TableMap::TYPE_NUM == $indexType ? 3 + $startcol : ConnectionTableMap::translateFieldName('Peer', TableMap::TYPE_PHPNAME, $indexType)];
597
            $this->peer = (null !== $col) ? (string) $col : null;
598
599
            $col = $row[TableMap::TYPE_NUM == $indexType ? 4 + $startcol : ConnectionTableMap::translateFieldName('Started', TableMap::TYPE_PHPNAME, $indexType)];
600
            $this->started = (null !== $col) ? PropelDateTime::newInstance($col, null, 'DateTime') : null;
601
602
            $col = $row[TableMap::TYPE_NUM == $indexType ? 5 + $startcol : ConnectionTableMap::translateFieldName('Type', TableMap::TYPE_PHPNAME, $indexType)];
603
            $this->type = (null !== $col) ? (string) $col : null;
604
            $this->resetModified();
605
606
            $this->setNew(false);
607
608
            if ($rehydrate) {
609
                $this->ensureConsistency();
610
            }
611
612
            return $startcol + 6; // 6 = ConnectionTableMap::NUM_HYDRATE_COLUMNS.
613
614
        } catch (Exception $e) {
615
            throw new PropelException(sprintf('Error populating %s object', '\\Jalle19\\StatusManager\\Database\\Connection'), 0, $e);
616
        }
617
    }
618
619
    /**
620
     * Checks and repairs the internal consistency of the object.
621
     *
622
     * This method is executed after an already-instantiated object is re-hydrated
623
     * from the database.  It exists to check any foreign keys to make sure that
624
     * the objects related to the current object are correct based on foreign key.
625
     *
626
     * You can override this method in the stub class, but you should always invoke
627
     * the base method from the overridden method (i.e. parent::ensureConsistency()),
628
     * in case your model changes.
629
     *
630
     * @throws PropelException
631
     */
632
    public function ensureConsistency()
633
    {
634 View Code Duplication
        if ($this->aInstance !== null && $this->instance_name !== $this->aInstance->getName()) {
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...
635
            $this->aInstance = null;
636
        }
637 View Code Duplication
        if ($this->aUser !== null && $this->user_id !== $this->aUser->getId()) {
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...
638
            $this->aUser = null;
639
        }
640
    } // ensureConsistency
641
642
    /**
643
     * Reloads this object from datastore based on primary key and (optionally) resets all associated objects.
644
     *
645
     * This will only work if the object has been saved and has a valid primary key set.
646
     *
647
     * @param      boolean $deep (optional) Whether to also de-associated any related objects.
648
     * @param      ConnectionInterface $con (optional) The ConnectionInterface connection to use.
649
     * @return void
650
     * @throws PropelException - if this object is deleted, unsaved or doesn't have pk match in db
651
     */
652
    public function reload($deep = false, ConnectionInterface $con = null)
653
    {
654
        if ($this->isDeleted()) {
655
            throw new PropelException("Cannot reload a deleted object.");
656
        }
657
658
        if ($this->isNew()) {
659
            throw new PropelException("Cannot reload an unsaved object.");
660
        }
661
662
        if ($con === null) {
663
            $con = Propel::getServiceContainer()->getReadConnection(ConnectionTableMap::DATABASE_NAME);
664
        }
665
666
        // We don't need to alter the object instance pool; we're just modifying this instance
667
        // already in the pool.
668
669
        $dataFetcher = ChildConnectionQuery::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\InstanceQuery, Jalle19\StatusManager\Da...\Base\SubscriptionQuery, Jalle19\StatusManager\Database\Base\UserQuery, Jalle19\StatusManager\Database\ChannelQuery, Jalle19\StatusManager\Database\ConnectionQuery, 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...
670
        $row = $dataFetcher->fetch();
671
        $dataFetcher->close();
672
        if (!$row) {
673
            throw new PropelException('Cannot find matching row in the database to reload object values.');
674
        }
675
        $this->hydrate($row, 0, true, $dataFetcher->getIndexType()); // rehydrate
676
677
        if ($deep) {  // also de-associate any related objects?
678
679
            $this->aInstance = null;
680
            $this->aUser = null;
681
        } // 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...
682
    }
683
684
    /**
685
     * Removes this object from datastore and sets delete attribute.
686
     *
687
     * @param      ConnectionInterface $con
688
     * @return void
689
     * @throws PropelException
690
     * @see Connection::setDeleted()
691
     * @see Connection::isDeleted()
692
     */
693 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...
694
    {
695
        if ($this->isDeleted()) {
696
            throw new PropelException("This object has already been deleted.");
697
        }
698
699
        if ($con === null) {
700
            $con = Propel::getServiceContainer()->getWriteConnection(ConnectionTableMap::DATABASE_NAME);
701
        }
702
703
        $con->transaction(function () use ($con) {
704
            $deleteQuery = ChildConnectionQuery::create()
705
                ->filterByPrimaryKey($this->getPrimaryKey());
706
            $ret = $this->preDelete($con);
707
            if ($ret) {
708
                $deleteQuery->delete($con);
709
                $this->postDelete($con);
710
                $this->setDeleted(true);
711
            }
712
        });
713
    }
714
715
    /**
716
     * Persists this object to the database.
717
     *
718
     * If the object is new, it inserts it; otherwise an update is performed.
719
     * All modified related objects will also be persisted in the doSave()
720
     * method.  This method wraps all precipitate database operations in a
721
     * single transaction.
722
     *
723
     * @param      ConnectionInterface $con
724
     * @return int             The number of rows affected by this insert/update and any referring fk objects' save() operations.
725
     * @throws PropelException
726
     * @see doSave()
727
     */
728 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...
729
    {
730
        if ($this->isDeleted()) {
731
            throw new PropelException("You cannot save an object that has been deleted.");
732
        }
733
734
        if ($con === null) {
735
            $con = Propel::getServiceContainer()->getWriteConnection(ConnectionTableMap::DATABASE_NAME);
736
        }
737
738
        return $con->transaction(function () use ($con) {
739
            $isInsert = $this->isNew();
740
            $ret = $this->preSave($con);
741
            if ($isInsert) {
742
                $ret = $ret && $this->preInsert($con);
743
            } else {
744
                $ret = $ret && $this->preUpdate($con);
745
            }
746
            if ($ret) {
747
                $affectedRows = $this->doSave($con);
748
                if ($isInsert) {
749
                    $this->postInsert($con);
750
                } else {
751
                    $this->postUpdate($con);
752
                }
753
                $this->postSave($con);
754
                ConnectionTableMap::addInstanceToPool($this);
755
            } else {
756
                $affectedRows = 0;
757
            }
758
759
            return $affectedRows;
760
        });
761
    }
762
763
    /**
764
     * Performs the work of inserting or updating the row in the database.
765
     *
766
     * If the object is new, it inserts it; otherwise an update is performed.
767
     * All related objects are also updated in this method.
768
     *
769
     * @param      ConnectionInterface $con
770
     * @return int             The number of rows affected by this insert/update and any referring fk objects' save() operations.
771
     * @throws PropelException
772
     * @see save()
773
     */
774
    protected function doSave(ConnectionInterface $con)
775
    {
776
        $affectedRows = 0; // initialize var to track total num of affected rows
777
        if (!$this->alreadyInSave) {
778
            $this->alreadyInSave = true;
779
780
            // We call the save method on the following object(s) if they
781
            // were passed to this object by their corresponding set
782
            // method.  This object relates to these object(s) by a
783
            // foreign key reference.
784
785 View Code Duplication
            if ($this->aInstance !== 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...
786
                if ($this->aInstance->isModified() || $this->aInstance->isNew()) {
787
                    $affectedRows += $this->aInstance->save($con);
788
                }
789
                $this->setInstance($this->aInstance);
790
            }
791
792 View Code Duplication
            if ($this->aUser !== 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...
793
                if ($this->aUser->isModified() || $this->aUser->isNew()) {
794
                    $affectedRows += $this->aUser->save($con);
795
                }
796
                $this->setUser($this->aUser);
797
            }
798
799 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...
800
                // persist changes
801
                if ($this->isNew()) {
802
                    $this->doInsert($con);
803
                    $affectedRows += 1;
804
                } else {
805
                    $affectedRows += $this->doUpdate($con);
806
                }
807
                $this->resetModified();
808
            }
809
810
            $this->alreadyInSave = false;
811
812
        }
813
814
        return $affectedRows;
815
    } // doSave()
816
817
    /**
818
     * Insert the row in the database.
819
     *
820
     * @param      ConnectionInterface $con
821
     *
822
     * @throws PropelException
823
     * @see doSave()
824
     */
825
    protected function doInsert(ConnectionInterface $con)
826
    {
827
        $modifiedColumns = array();
828
        $index = 0;
829
830
        $this->modifiedColumns[ConnectionTableMap::COL_ID] = true;
831
        if (null !== $this->id) {
832
            throw new PropelException('Cannot insert a value for auto-increment primary key (' . ConnectionTableMap::COL_ID . ')');
833
        }
834
835
         // check the columns in natural order for more readable SQL queries
836
        if ($this->isColumnModified(ConnectionTableMap::COL_ID)) {
837
            $modifiedColumns[':p' . $index++]  = 'id';
838
        }
839
        if ($this->isColumnModified(ConnectionTableMap::COL_INSTANCE_NAME)) {
840
            $modifiedColumns[':p' . $index++]  = 'instance_name';
841
        }
842
        if ($this->isColumnModified(ConnectionTableMap::COL_USER_ID)) {
843
            $modifiedColumns[':p' . $index++]  = 'user_id';
844
        }
845
        if ($this->isColumnModified(ConnectionTableMap::COL_PEER)) {
846
            $modifiedColumns[':p' . $index++]  = 'peer';
847
        }
848
        if ($this->isColumnModified(ConnectionTableMap::COL_STARTED)) {
849
            $modifiedColumns[':p' . $index++]  = 'started';
850
        }
851
        if ($this->isColumnModified(ConnectionTableMap::COL_TYPE)) {
852
            $modifiedColumns[':p' . $index++]  = 'type';
853
        }
854
855
        $sql = sprintf(
856
            'INSERT INTO connection (%s) VALUES (%s)',
857
            implode(', ', $modifiedColumns),
858
            implode(', ', array_keys($modifiedColumns))
859
        );
860
861
        try {
862
            $stmt = $con->prepare($sql);
863
            foreach ($modifiedColumns as $identifier => $columnName) {
864
                switch ($columnName) {
865
                    case 'id':
866
                        $stmt->bindValue($identifier, $this->id, PDO::PARAM_INT);
867
                        break;
868
                    case 'instance_name':
869
                        $stmt->bindValue($identifier, $this->instance_name, PDO::PARAM_STR);
870
                        break;
871
                    case 'user_id':
872
                        $stmt->bindValue($identifier, $this->user_id, PDO::PARAM_INT);
873
                        break;
874
                    case 'peer':
875
                        $stmt->bindValue($identifier, $this->peer, PDO::PARAM_STR);
876
                        break;
877 View Code Duplication
                    case 'started':
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...
878
                        $stmt->bindValue($identifier, $this->started ? $this->started->format("Y-m-d H:i:s") : null, PDO::PARAM_STR);
879
                        break;
880
                    case 'type':
881
                        $stmt->bindValue($identifier, $this->type, PDO::PARAM_STR);
882
                        break;
883
                }
884
            }
885
            $stmt->execute();
886
        } catch (Exception $e) {
887
            Propel::log($e->getMessage(), Propel::LOG_ERR);
888
            throw new PropelException(sprintf('Unable to execute INSERT statement [%s]', $sql), 0, $e);
889
        }
890
891
        try {
892
            $pk = $con->lastInsertId();
893
        } catch (Exception $e) {
894
            throw new PropelException('Unable to get autoincrement id.', 0, $e);
895
        }
896
        $this->setId($pk);
897
898
        $this->setNew(false);
899
    }
900
901
    /**
902
     * Update the row in the database.
903
     *
904
     * @param      ConnectionInterface $con
905
     *
906
     * @return Integer Number of updated rows
907
     * @see doSave()
908
     */
909
    protected function doUpdate(ConnectionInterface $con)
910
    {
911
        $selectCriteria = $this->buildPkeyCriteria();
912
        $valuesCriteria = $this->buildCriteria();
913
914
        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...
915
    }
916
917
    /**
918
     * Retrieves a field from the object by name passed in as a string.
919
     *
920
     * @param      string $name name
921
     * @param      string $type The type of fieldname the $name is of:
922
     *                     one of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME
923
     *                     TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
924
     *                     Defaults to TableMap::TYPE_PHPNAME.
925
     * @return mixed Value of field.
926
     */
927 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...
928
    {
929
        $pos = ConnectionTableMap::translateFieldName($name, $type, TableMap::TYPE_NUM);
930
        $field = $this->getByPosition($pos);
931
932
        return $field;
933
    }
934
935
    /**
936
     * Retrieves a field from the object by Position as specified in the xml schema.
937
     * Zero-based.
938
     *
939
     * @param      int $pos position in xml schema
940
     * @return mixed Value of field at $pos
941
     */
942
    public function getByPosition($pos)
943
    {
944
        switch ($pos) {
945
            case 0:
946
                return $this->getId();
947
                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...
948
            case 1:
949
                return $this->getInstanceName();
950
                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...
951
            case 2:
952
                return $this->getUserId();
953
                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...
954
            case 3:
955
                return $this->getPeer();
956
                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...
957
            case 4:
958
                return $this->getStarted();
959
                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...
960
            case 5:
961
                return $this->getType();
962
                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...
963
            default:
964
                return null;
965
                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...
966
        } // switch()
967
    }
968
969
    /**
970
     * Exports the object as an array.
971
     *
972
     * You can specify the key type of the array by passing one of the class
973
     * type constants.
974
     *
975
     * @param     string  $keyType (optional) One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME,
976
     *                    TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
977
     *                    Defaults to TableMap::TYPE_PHPNAME.
978
     * @param     boolean $includeLazyLoadColumns (optional) Whether to include lazy loaded columns. Defaults to TRUE.
979
     * @param     array $alreadyDumpedObjects List of objects to skip to avoid recursion
980
     * @param     boolean $includeForeignObjects (optional) Whether to include hydrated related objects. Default to FALSE.
981
     *
982
     * @return array an associative array containing the field names (as keys) and field values
983
     */
984
    public function toArray($keyType = TableMap::TYPE_PHPNAME, $includeLazyLoadColumns = true, $alreadyDumpedObjects = array(), $includeForeignObjects = false)
985
    {
986
987
        if (isset($alreadyDumpedObjects['Connection'][$this->hashCode()])) {
988
            return '*RECURSION*';
989
        }
990
        $alreadyDumpedObjects['Connection'][$this->hashCode()] = true;
991
        $keys = ConnectionTableMap::getFieldNames($keyType);
992
        $result = array(
993
            $keys[0] => $this->getId(),
994
            $keys[1] => $this->getInstanceName(),
995
            $keys[2] => $this->getUserId(),
996
            $keys[3] => $this->getPeer(),
997
            $keys[4] => $this->getStarted(),
998
            $keys[5] => $this->getType(),
999
        );
1000 View Code Duplication
        if ($result[$keys[4]] instanceof \DateTime) {
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...
1001
            $result[$keys[4]] = $result[$keys[4]]->format('c');
1002
        }
1003
1004
        $virtualColumns = $this->virtualColumns;
1005
        foreach ($virtualColumns as $key => $virtualColumn) {
1006
            $result[$key] = $virtualColumn;
1007
        }
1008
1009 View Code Duplication
        if ($includeForeignObjects) {
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...
1010
            if (null !== $this->aInstance) {
1011
1012
                switch ($keyType) {
1013
                    case TableMap::TYPE_CAMELNAME:
1014
                        $key = 'instance';
1015
                        break;
1016
                    case TableMap::TYPE_FIELDNAME:
1017
                        $key = 'instance';
1018
                        break;
1019
                    default:
1020
                        $key = 'Instance';
1021
                }
1022
1023
                $result[$key] = $this->aInstance->toArray($keyType, $includeLazyLoadColumns,  $alreadyDumpedObjects, true);
1024
            }
1025
            if (null !== $this->aUser) {
1026
1027
                switch ($keyType) {
1028
                    case TableMap::TYPE_CAMELNAME:
1029
                        $key = 'user';
1030
                        break;
1031
                    case TableMap::TYPE_FIELDNAME:
1032
                        $key = 'user';
1033
                        break;
1034
                    default:
1035
                        $key = 'User';
1036
                }
1037
1038
                $result[$key] = $this->aUser->toArray($keyType, $includeLazyLoadColumns,  $alreadyDumpedObjects, true);
1039
            }
1040
        }
1041
1042
        return $result;
1043
    }
1044
1045
    /**
1046
     * Sets a field from the object by name passed in as a string.
1047
     *
1048
     * @param  string $name
1049
     * @param  mixed  $value field value
1050
     * @param  string $type The type of fieldname the $name is of:
1051
     *                one of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME
1052
     *                TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
1053
     *                Defaults to TableMap::TYPE_PHPNAME.
1054
     * @return $this|\Jalle19\StatusManager\Database\Connection
1055
     */
1056
    public function setByName($name, $value, $type = TableMap::TYPE_PHPNAME)
1057
    {
1058
        $pos = ConnectionTableMap::translateFieldName($name, $type, TableMap::TYPE_NUM);
1059
1060
        return $this->setByPosition($pos, $value);
1061
    }
1062
1063
    /**
1064
     * Sets a field from the object by Position as specified in the xml schema.
1065
     * Zero-based.
1066
     *
1067
     * @param  int $pos position in xml schema
1068
     * @param  mixed $value field value
1069
     * @return $this|\Jalle19\StatusManager\Database\Connection
1070
     */
1071
    public function setByPosition($pos, $value)
1072
    {
1073
        switch ($pos) {
1074
            case 0:
1075
                $this->setId($value);
1076
                break;
1077
            case 1:
1078
                $this->setInstanceName($value);
1079
                break;
1080
            case 2:
1081
                $this->setUserId($value);
1082
                break;
1083
            case 3:
1084
                $this->setPeer($value);
1085
                break;
1086
            case 4:
1087
                $this->setStarted($value);
1088
                break;
1089
            case 5:
1090
                $this->setType($value);
1091
                break;
1092
        } // switch()
1093
1094
        return $this;
1095
    }
1096
1097
    /**
1098
     * Populates the object using an array.
1099
     *
1100
     * This is particularly useful when populating an object from one of the
1101
     * request arrays (e.g. $_POST).  This method goes through the column
1102
     * names, checking to see whether a matching key exists in populated
1103
     * array. If so the setByName() method is called for that column.
1104
     *
1105
     * You can specify the key type of the array by additionally passing one
1106
     * of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME,
1107
     * TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
1108
     * The default key type is the column's TableMap::TYPE_PHPNAME.
1109
     *
1110
     * @param      array  $arr     An array to populate the object from.
1111
     * @param      string $keyType The type of keys the array uses.
1112
     * @return void
1113
     */
1114
    public function fromArray($arr, $keyType = TableMap::TYPE_PHPNAME)
1115
    {
1116
        $keys = ConnectionTableMap::getFieldNames($keyType);
1117
1118
        if (array_key_exists($keys[0], $arr)) {
1119
            $this->setId($arr[$keys[0]]);
1120
        }
1121
        if (array_key_exists($keys[1], $arr)) {
1122
            $this->setInstanceName($arr[$keys[1]]);
1123
        }
1124
        if (array_key_exists($keys[2], $arr)) {
1125
            $this->setUserId($arr[$keys[2]]);
1126
        }
1127
        if (array_key_exists($keys[3], $arr)) {
1128
            $this->setPeer($arr[$keys[3]]);
1129
        }
1130
        if (array_key_exists($keys[4], $arr)) {
1131
            $this->setStarted($arr[$keys[4]]);
1132
        }
1133
        if (array_key_exists($keys[5], $arr)) {
1134
            $this->setType($arr[$keys[5]]);
1135
        }
1136
    }
1137
1138
     /**
1139
     * Populate the current object from a string, using a given parser format
1140
     * <code>
1141
     * $book = new Book();
1142
     * $book->importFrom('JSON', '{"Id":9012,"Title":"Don Juan","ISBN":"0140422161","Price":12.99,"PublisherId":1234,"AuthorId":5678}');
1143
     * </code>
1144
     *
1145
     * You can specify the key type of the array by additionally passing one
1146
     * of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_CAMELNAME,
1147
     * TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM.
1148
     * The default key type is the column's TableMap::TYPE_PHPNAME.
1149
     *
1150
     * @param mixed $parser A AbstractParser instance,
1151
     *                       or a format name ('XML', 'YAML', 'JSON', 'CSV')
1152
     * @param string $data The source data to import from
1153
     * @param string $keyType The type of keys the array uses.
1154
     *
1155
     * @return $this|\Jalle19\StatusManager\Database\Connection The current object, for fluid interface
1156
     */
1157 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...
1158
    {
1159
        if (!$parser instanceof AbstractParser) {
1160
            $parser = AbstractParser::getParser($parser);
1161
        }
1162
1163
        $this->fromArray($parser->toArray($data), $keyType);
1164
1165
        return $this;
1166
    }
1167
1168
    /**
1169
     * Build a Criteria object containing the values of all modified columns in this object.
1170
     *
1171
     * @return Criteria The Criteria object containing all modified values.
1172
     */
1173
    public function buildCriteria()
1174
    {
1175
        $criteria = new Criteria(ConnectionTableMap::DATABASE_NAME);
1176
1177
        if ($this->isColumnModified(ConnectionTableMap::COL_ID)) {
1178
            $criteria->add(ConnectionTableMap::COL_ID, $this->id);
1179
        }
1180
        if ($this->isColumnModified(ConnectionTableMap::COL_INSTANCE_NAME)) {
1181
            $criteria->add(ConnectionTableMap::COL_INSTANCE_NAME, $this->instance_name);
1182
        }
1183
        if ($this->isColumnModified(ConnectionTableMap::COL_USER_ID)) {
1184
            $criteria->add(ConnectionTableMap::COL_USER_ID, $this->user_id);
1185
        }
1186
        if ($this->isColumnModified(ConnectionTableMap::COL_PEER)) {
1187
            $criteria->add(ConnectionTableMap::COL_PEER, $this->peer);
1188
        }
1189
        if ($this->isColumnModified(ConnectionTableMap::COL_STARTED)) {
1190
            $criteria->add(ConnectionTableMap::COL_STARTED, $this->started);
1191
        }
1192
        if ($this->isColumnModified(ConnectionTableMap::COL_TYPE)) {
1193
            $criteria->add(ConnectionTableMap::COL_TYPE, $this->type);
1194
        }
1195
1196
        return $criteria;
1197
    }
1198
1199
    /**
1200
     * Builds a Criteria object containing the primary key for this object.
1201
     *
1202
     * Unlike buildCriteria() this method includes the primary key values regardless
1203
     * of whether or not they have been modified.
1204
     *
1205
     * @throws LogicException if no primary key is defined
1206
     *
1207
     * @return Criteria The Criteria object containing value(s) for primary key(s).
1208
     */
1209
    public function buildPkeyCriteria()
1210
    {
1211
        $criteria = ChildConnectionQuery::create();
1212
        $criteria->add(ConnectionTableMap::COL_ID, $this->id);
1213
1214
        return $criteria;
1215
    }
1216
1217
    /**
1218
     * If the primary key is not null, return the hashcode of the
1219
     * primary key. Otherwise, return the hash code of the object.
1220
     *
1221
     * @return int Hashcode
1222
     */
1223 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...
1224
    {
1225
        $validPk = null !== $this->getId();
1226
1227
        $validPrimaryKeyFKs = 0;
1228
        $primaryKeyFKs = [];
1229
1230
        if ($validPk) {
1231
            return crc32(json_encode($this->getPrimaryKey(), JSON_UNESCAPED_UNICODE));
1232
        } elseif ($validPrimaryKeyFKs) {
1233
            return crc32(json_encode($primaryKeyFKs, JSON_UNESCAPED_UNICODE));
1234
        }
1235
1236
        return spl_object_hash($this);
1237
    }
1238
1239
    /**
1240
     * Returns the primary key for this object (row).
1241
     * @return int
1242
     */
1243
    public function getPrimaryKey()
1244
    {
1245
        return $this->getId();
1246
    }
1247
1248
    /**
1249
     * Generic method to set the primary key (id column).
1250
     *
1251
     * @param       int $key Primary key.
1252
     * @return void
1253
     */
1254
    public function setPrimaryKey($key)
1255
    {
1256
        $this->setId($key);
1257
    }
1258
1259
    /**
1260
     * Returns true if the primary key for this object is null.
1261
     * @return boolean
1262
     */
1263
    public function isPrimaryKeyNull()
1264
    {
1265
        return null === $this->getId();
1266
    }
1267
1268
    /**
1269
     * Sets contents of passed object to values from current object.
1270
     *
1271
     * If desired, this method can also make copies of all associated (fkey referrers)
1272
     * objects.
1273
     *
1274
     * @param      object $copyObj An object of \Jalle19\StatusManager\Database\Connection (or compatible) type.
1275
     * @param      boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row.
1276
     * @param      boolean $makeNew Whether to reset autoincrement PKs and make the object new.
1277
     * @throws PropelException
1278
     */
1279
    public function copyInto($copyObj, $deepCopy = false, $makeNew = true)
0 ignored issues
show
Unused Code introduced by
The parameter $deepCopy 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...
1280
    {
1281
        $copyObj->setInstanceName($this->getInstanceName());
1282
        $copyObj->setUserId($this->getUserId());
1283
        $copyObj->setPeer($this->getPeer());
1284
        $copyObj->setStarted($this->getStarted());
1285
        $copyObj->setType($this->getType());
1286
        if ($makeNew) {
1287
            $copyObj->setNew(true);
1288
            $copyObj->setId(NULL); // this is a auto-increment column, so set to default value
1289
        }
1290
    }
1291
1292
    /**
1293
     * Makes a copy of this object that will be inserted as a new row in table when saved.
1294
     * It creates a new object filling in the simple attributes, but skipping any primary
1295
     * keys that are defined for the table.
1296
     *
1297
     * If desired, this method can also make copies of all associated (fkey referrers)
1298
     * objects.
1299
     *
1300
     * @param  boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row.
1301
     * @return \Jalle19\StatusManager\Database\Connection Clone of current object.
1302
     * @throws PropelException
1303
     */
1304 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...
1305
    {
1306
        // we use get_class(), because this might be a subclass
1307
        $clazz = get_class($this);
1308
        $copyObj = new $clazz();
1309
        $this->copyInto($copyObj, $deepCopy);
1310
1311
        return $copyObj;
1312
    }
1313
1314
    /**
1315
     * Declares an association between this object and a ChildInstance object.
1316
     *
1317
     * @param  ChildInstance $v
1318
     * @return $this|\Jalle19\StatusManager\Database\Connection The current object (for fluent API support)
1319
     * @throws PropelException
1320
     */
1321
    public function setInstance(ChildInstance $v = null)
1322
    {
1323
        if ($v === null) {
1324
            $this->setInstanceName(NULL);
1325
        } else {
1326
            $this->setInstanceName($v->getName());
1327
        }
1328
1329
        $this->aInstance = $v;
1330
1331
        // Add binding for other direction of this n:n relationship.
1332
        // If this object has already been added to the ChildInstance object, it will not be re-added.
1333
        if ($v !== null) {
1334
            $v->addConnection($this);
0 ignored issues
show
Compatibility introduced by
$this of type object<Jalle19\StatusMan...tabase\Base\Connection> is not a sub-type of object<Jalle19\StatusManager\Database\Connection>. It seems like you assume a child class of the class Jalle19\StatusManager\Database\Base\Connection to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
1335
        }
1336
1337
1338
        return $this;
1339
    }
1340
1341
1342
    /**
1343
     * Get the associated ChildInstance object
1344
     *
1345
     * @param  ConnectionInterface $con Optional Connection object.
1346
     * @return ChildInstance The associated ChildInstance object.
1347
     * @throws PropelException
1348
     */
1349 View Code Duplication
    public function getInstance(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...
1350
    {
1351
        if ($this->aInstance === null && (($this->instance_name !== "" && $this->instance_name !== null))) {
1352
            $this->aInstance = ChildInstanceQuery::create()->findPk($this->instance_name, $con);
1353
            /* The following can be used additionally to
1354
                guarantee the related object contains a reference
1355
                to this object.  This level of coupling may, however, be
1356
                undesirable since it could result in an only partially populated collection
1357
                in the referenced object.
1358
                $this->aInstance->addConnections($this);
1359
             */
1360
        }
1361
1362
        return $this->aInstance;
1363
    }
1364
1365
    /**
1366
     * Declares an association between this object and a ChildUser object.
1367
     *
1368
     * @param  ChildUser $v
1369
     * @return $this|\Jalle19\StatusManager\Database\Connection The current object (for fluent API support)
1370
     * @throws PropelException
1371
     */
1372
    public function setUser(ChildUser $v = null)
1373
    {
1374
        if ($v === null) {
1375
            $this->setUserId(NULL);
1376
        } else {
1377
            $this->setUserId($v->getId());
1378
        }
1379
1380
        $this->aUser = $v;
1381
1382
        // Add binding for other direction of this n:n relationship.
1383
        // If this object has already been added to the ChildUser object, it will not be re-added.
1384
        if ($v !== null) {
1385
            $v->addConnection($this);
0 ignored issues
show
Compatibility introduced by
$this of type object<Jalle19\StatusMan...tabase\Base\Connection> is not a sub-type of object<Jalle19\StatusManager\Database\Connection>. It seems like you assume a child class of the class Jalle19\StatusManager\Database\Base\Connection to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
1386
        }
1387
1388
1389
        return $this;
1390
    }
1391
1392
1393
    /**
1394
     * Get the associated ChildUser object
1395
     *
1396
     * @param  ConnectionInterface $con Optional Connection object.
1397
     * @return ChildUser The associated ChildUser object.
1398
     * @throws PropelException
1399
     */
1400 View Code Duplication
    public function getUser(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...
1401
    {
1402
        if ($this->aUser === null && ($this->user_id !== null)) {
1403
            $this->aUser = ChildUserQuery::create()->findPk($this->user_id, $con);
1404
            /* The following can be used additionally to
1405
                guarantee the related object contains a reference
1406
                to this object.  This level of coupling may, however, be
1407
                undesirable since it could result in an only partially populated collection
1408
                in the referenced object.
1409
                $this->aUser->addConnections($this);
1410
             */
1411
        }
1412
1413
        return $this->aUser;
1414
    }
1415
1416
    /**
1417
     * Clears the current object, sets all attributes to their default values and removes
1418
     * outgoing references as well as back-references (from other objects to this one. Results probably in a database
1419
     * change of those foreign objects when you call `save` there).
1420
     */
1421
    public function clear()
1422
    {
1423
        if (null !== $this->aInstance) {
1424
            $this->aInstance->removeConnection($this);
0 ignored issues
show
Compatibility introduced by
$this of type object<Jalle19\StatusMan...tabase\Base\Connection> is not a sub-type of object<Jalle19\StatusManager\Database\Connection>. It seems like you assume a child class of the class Jalle19\StatusManager\Database\Base\Connection to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
1425
        }
1426
        if (null !== $this->aUser) {
1427
            $this->aUser->removeConnection($this);
0 ignored issues
show
Compatibility introduced by
$this of type object<Jalle19\StatusMan...tabase\Base\Connection> is not a sub-type of object<Jalle19\StatusManager\Database\Connection>. It seems like you assume a child class of the class Jalle19\StatusManager\Database\Base\Connection to be always present.

This check looks for parameters that are defined as one type in their type hint or doc comment but seem to be used as a narrower type, i.e an implementation of an interface or a subclass.

Consider changing the type of the parameter or doing an instanceof check before assuming your parameter is of the expected type.

Loading history...
1428
        }
1429
        $this->id = null;
1430
        $this->instance_name = null;
1431
        $this->user_id = null;
1432
        $this->peer = null;
1433
        $this->started = null;
1434
        $this->type = null;
1435
        $this->alreadyInSave = false;
1436
        $this->clearAllReferences();
1437
        $this->resetModified();
1438
        $this->setNew(true);
1439
        $this->setDeleted(false);
1440
    }
1441
1442
    /**
1443
     * Resets all references and back-references to other model objects or collections of model objects.
1444
     *
1445
     * This method is used to reset all php object references (not the actual reference in the database).
1446
     * Necessary for object serialisation.
1447
     *
1448
     * @param      boolean $deep Whether to also clear the references on all referrer objects.
1449
     */
1450
    public function clearAllReferences($deep = false)
1451
    {
1452
        if ($deep) {
0 ignored issues
show
Unused Code introduced by
This if statement is empty and can be removed.

This check looks for the bodies of if statements that have no statements or where all statements have been commented out. This may be the result of changes for debugging or the code may simply be obsolete.

These if bodies can be removed. If you have an empty if but statements in the else branch, consider inverting the condition.

if (rand(1, 6) > 3) {
//print "Check failed";
} else {
    print "Check succeeded";
}

could be turned into

if (rand(1, 6) <= 3) {
    print "Check succeeded";
}

This is much more concise to read.

Loading history...
1453
        } // 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...
1454
1455
        $this->aInstance = null;
1456
        $this->aUser = null;
1457
    }
1458
1459
    /**
1460
     * Return the string representation of this object
1461
     *
1462
     * @return string
1463
     */
1464
    public function __toString()
1465
    {
1466
        return (string) $this->exportTo(ConnectionTableMap::DEFAULT_STRING_FORMAT);
1467
    }
1468
1469
    /**
1470
     * Code to be run before persisting the object
1471
     * @param  ConnectionInterface $con
1472
     * @return boolean
1473
     */
1474
    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...
1475
    {
1476
        return true;
1477
    }
1478
1479
    /**
1480
     * Code to be run after persisting the object
1481
     * @param ConnectionInterface $con
1482
     */
1483
    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...
1484
    {
1485
1486
    }
1487
1488
    /**
1489
     * Code to be run before inserting to database
1490
     * @param  ConnectionInterface $con
1491
     * @return boolean
1492
     */
1493
    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...
1494
    {
1495
        return true;
1496
    }
1497
1498
    /**
1499
     * Code to be run after inserting to database
1500
     * @param ConnectionInterface $con
1501
     */
1502
    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...
1503
    {
1504
1505
    }
1506
1507
    /**
1508
     * Code to be run before updating the object in database
1509
     * @param  ConnectionInterface $con
1510
     * @return boolean
1511
     */
1512
    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...
1513
    {
1514
        return true;
1515
    }
1516
1517
    /**
1518
     * Code to be run after updating the object in database
1519
     * @param ConnectionInterface $con
1520
     */
1521
    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...
1522
    {
1523
1524
    }
1525
1526
    /**
1527
     * Code to be run before deleting the object in database
1528
     * @param  ConnectionInterface $con
1529
     * @return boolean
1530
     */
1531
    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...
1532
    {
1533
        return true;
1534
    }
1535
1536
    /**
1537
     * Code to be run after deleting the object in database
1538
     * @param ConnectionInterface $con
1539
     */
1540
    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...
1541
    {
1542
1543
    }
1544
1545
1546
    /**
1547
     * Derived method to catches calls to undefined methods.
1548
     *
1549
     * Provides magic import/export method support (fromXML()/toXML(), fromYAML()/toYAML(), etc.).
1550
     * Allows to define default __call() behavior if you overwrite __call()
1551
     *
1552
     * @param string $name
1553
     * @param mixed  $params
1554
     *
1555
     * @return array|string
1556
     */
1557 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...
1558
    {
1559
        if (0 === strpos($name, 'get')) {
1560
            $virtualColumn = substr($name, 3);
1561
            if ($this->hasVirtualColumn($virtualColumn)) {
1562
                return $this->getVirtualColumn($virtualColumn);
1563
            }
1564
1565
            $virtualColumn = lcfirst($virtualColumn);
1566
            if ($this->hasVirtualColumn($virtualColumn)) {
1567
                return $this->getVirtualColumn($virtualColumn);
1568
            }
1569
        }
1570
1571
        if (0 === strpos($name, 'from')) {
1572
            $format = substr($name, 4);
1573
1574
            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\Connection) is incompatible with the return type documented by Jalle19\StatusManager\Da...Base\Connection::__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...
1575
        }
1576
1577
        if (0 === strpos($name, 'to')) {
1578
            $format = substr($name, 2);
1579
            $includeLazyLoadColumns = isset($params[0]) ? $params[0] : true;
1580
1581
            return $this->exportTo($format, $includeLazyLoadColumns);
1582
        }
1583
1584
        throw new BadMethodCallException(sprintf('Call to undefined method: %s.', $name));
1585
    }
1586
1587
}
1588