Completed
Push — master ( 364b5f...db455e )
by
unknown
04:01
created

code/cms/ModelAdminEcommerceBaseClass.php (5 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
/**
4
 * @see: http://doc.silverstripe.org/framework/en/reference/ModelAdmin
5
 *
6
 * @author Nicolaas [at] sunnyside up . co .nz
7
 */
8
class ModelAdminEcommerceBaseClass extends ModelAdmin
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
9
{
10
11
    /**
12
     * @return array Map of class name to an array of 'title' (see {@link $managed_models})
0 ignored issues
show
Should the return type not be array|integer|double|boolean?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
13
     */
14
    public function getManagedModels()
15
    {
16
        if ($this->class === 'ModelAdminEcommerceBaseClass') {
17
            //never used
18
            return array('NothingGoesHere' => array('title' => 'All Orders'));
19
        }
20
        return parent::getManagedModels();
21
    }
22
23
    /**
24
     * Change this variable if you don't want the Import from CSV form to appear.
25
     * This variable can be a boolean or an array.
26
     * If array, you can list className you want the form to appear on. i.e. array('myClassOne','myClasstwo').
27
     */
28
    public $showImportForm = false;
29
30
    /**
31
     *
32
     * @param DataObject $record
33
     *
34
     * @return Form
0 ignored issues
show
Should the return type not be SS_HTTPResponse|null|CMSForm?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
35
     */
36
    public function oneItemForm($record)
37
    {
38
        Config::inst()->update('LeftAndMain', 'tree_class', $record->ClassName);
39
        $form = LeftAndMain::getEditForm($record);
0 ignored issues
show
$record is of type object<DataObject>, but the function expects a integer|null.

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...
40
        $idField = HiddenField::create('ID')->setValue($record->ID);
41
        $cssField = LiteralField::create(
42
            'oneItemFormCSS',
43
            '
44
                <style>
45
                    .cms-content-view .ui-tabs-nav {
46
                        margin-left: 0!important;
47
                    }
48
                    .cms-content-view .Actions {
49
                        position: fixed;
50
                        bottom: 16px;
51
                        right:  16px;
52
                    }
53
                </style>
54
            '
55
        );
56
        $form->Fields()->push($idField);
0 ignored issues
show
The method Fields does only exist in CMSForm, but not in SS_HTTPResponse.

It seems like the method you are trying to call exists only in some of the possible types.

Let’s take a look at an example:

class A
{
    public function foo() { }
}

class B extends A
{
    public function bar() { }
}

/**
 * @param A|B $x
 */
function someFunction($x)
{
    $x->foo(); // This call is fine as the method exists in A and B.
    $x->bar(); // This method only exists in B and might cause an error.
}

Available Fixes

  1. Add an additional type-check:

    /**
     * @param A|B $x
     */
    function someFunction($x)
    {
        $x->foo();
    
        if ($x instanceof B) {
            $x->bar();
        }
    }
    
  2. Only allow a single type to be passed if the variable comes from a parameter:

    function someFunction(B $x) { /** ... */ }
    
Loading history...
57
        $form->Fields()->push($cssField);
58
        return $form;
59
    }
60
61
    /**
62
     * Define which fields are used in the {@link getEditForm} GridField export.
63
     * By default, it uses the summary fields from the model definition.
64
     *
65
     * @return array
66
     */
67
    public function getExportFields()
68
    {
69
        $obj = Injector::inst()->get($this->modelClass);
70
        if ($obj->hasMethod('getExportFields')) {
71
            return $obj->getExportFields();
72
        }
73
        return $obj->summaryFields();
74
    }
75
}
76