Completed
Push — master ( 7a9199...ba482a )
by Aimeos
01:46
created

Standard::getItems()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 19
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 19
rs 9.4285
cc 2
eloc 13
nc 2
nop 3
1
<?php
2
3
/**
4
 * @license LGPLv3, http://opensource.org/licenses/LGPL-3.0
5
 * @copyright Aimeos (aimeos.org), 2016-2017
6
 * @package Admin
7
 * @subpackage JsonAdm
8
 */
9
10
11
namespace Aimeos\Admin\JsonAdm\Locale\Site;
12
13
use Psr\Http\Message\ServerRequestInterface;
14
use Psr\Http\Message\ResponseInterface;
15
16
17
/**
18
 * JSON API locale site  client
19
 *
20
 * @package Admin
21
 * @subpackage JsonAdm
22
 */
23
class Standard
24
	extends \Aimeos\Admin\JsonAdm\Standard
0 ignored issues
show
Coding Style introduced by
The extends keyword must be on the same line as the class name
Loading history...
Coding Style introduced by
Expected 0 spaces between "Standard" and comma; 1 found
Loading history...
25
	implements \Aimeos\Admin\JsonAdm\Common\Iface
0 ignored issues
show
Coding Style introduced by
The implements keyword must be on the same line as the class name
Loading history...
26
{
27
	/** admin/jsonadm/locale/site/decorators/excludes
28
	 * Excludes decorators added by the "common" option from the JSON API clients
29
	 *
30
	 * Decorators extend the functionality of a class by adding new aspects
31
	 * (e.g. log what is currently done), executing the methods of the underlying
32
	 * class only in certain conditions (e.g. only for logged in users) or
33
	 * modify what is returned to the caller.
34
	 *
35
	 * This option allows you to remove a decorator added via
36
	 * "admin/jsonadm/common/decorators/default" before they are wrapped
37
	 * around the Jsonadm client.
38
	 *
39
	 *  admin/jsonadm/decorators/excludes = array( 'decorator1' )
40
	 *
41
	 * This would remove the decorator named "decorator1" from the list of
42
	 * common decorators ("\Aimeos\Admin\JsonAdm\Common\Decorator\*") added via
43
	 * "admin/jsonadm/common/decorators/default" for the JSON API client.
44
	 *
45
	 * @param array List of decorator names
46
	 * @since 2016.01
47
	 * @category Developer
48
	 * @see admin/jsonadm/common/decorators/default
49
	 * @see admin/jsonadm/locale/site/decorators/global
50
	 * @see admin/jsonadm/locale/site/decorators/local
51
	 */
52
53
	/** admin/jsonadm/locale/site/decorators/global
54
	 * Adds a list of globally available decorators only to the Jsonadm client
55
	 *
56
	 * Decorators extend the functionality of a class by adding new aspects
57
	 * (e.g. log what is currently done), executing the methods of the underlying
58
	 * class only in certain conditions (e.g. only for logged in users) or
59
	 * modify what is returned to the caller.
60
	 *
61
	 * This option allows you to wrap global decorators
62
	 * ("\Aimeos\Admin\Jsonadm\Common\Decorator\*") around the Jsonadm
63
	 * client.
64
	 *
65
	 *  admin/jsonadm/locale/site/decorators/global = array( 'decorator1' )
66
	 *
67
	 * This would add the decorator named "decorator1" defined by
68
	 * "\Aimeos\Admin\Jsonadm\Common\Decorator\Decorator1" only to the
69
	 * "locale/site " Jsonadm client.
70
	 *
71
	 * @param array List of decorator names
72
	 * @since 2016.01
73
	 * @category Developer
74
	 * @see admin/jsonadm/common/decorators/default
75
	 * @see admin/jsonadm/locale/site/decorators/excludes
76
	 * @see admin/jsonadm/locale/site/decorators/local
77
	 */
78
79
	/** admin/jsonadm/locale/site/decorators/local
80
	 * Adds a list of local decorators only to the Jsonadm client
81
	 *
82
	 * Decorators extend the functionality of a class by adding new aspects
83
	 * (e.g. log what is currently done), executing the methods of the underlying
84
	 * class only in certain conditions (e.g. only for logged in users) or
85
	 * modify what is returned to the caller.
86
	 *
87
	 * This option allows you to wrap local decorators
88
	 * ("\Aimeos\Admin\Jsonadm\Catalog\Decorator\*") around the Jsonadm
89
	 * client.
90
	 *
91
	 *  admin/jsonadm/locale/site/decorators/local = array( 'decorator2' )
92
	 *
93
	 * This would add the decorator named "decorator2" defined by
94
	 * "\Aimeos\Admin\Jsonadm\Catalog\Decorator\Decorator2" only to the
95
	 * "locale/site " Jsonadm client.
96
	 *
97
	 * @param array List of decorator names
98
	 * @since 2016.01
99
	 * @category Developer
100
	 * @see admin/jsonadm/common/decorators/default
101
	 * @see admin/jsonadm/locale/site/decorators/excludes
102
	 * @see admin/jsonadm/locale/site/decorators/global
103
	 */
104
105
106
	/**
107
	 * Returns the requested resource or the resource list
108
	 *
109
	 * @param \Psr\Http\Message\ServerRequestInterface $request Request object
110
	 * @param \Psr\Http\Message\ResponseInterface $response Response object
111
	 * @return \Psr\Http\Message\ResponseInterface Modified response object
112
	 */
113
	public function get( ServerRequestInterface $request, ResponseInterface $response )
114
	{
115
		/** admin/jsonadm/partials/locale/site/template-data
116
		 * Relative path to the data partial template file for the locale site  client
117
		 *
118
		 * Partials are templates which are reused in other templates and generate
119
		 * reoccuring blocks filled with data from the assigned values. The data
120
		 * partial creates the "data" part for the JSON API response.
121
		 *
122
		 * The partial template files are usually stored in the templates/partials/ folder
123
		 * of the core or the extensions. The configured path to the partial file must
124
		 * be relative to the templates/ folder, e.g. "partials/data-standard.php".
125
		 *
126
		 * @param string Relative path to the template file
127
		 * @since 2016.07
128
		 * @category Developer
129
		 */
130
		$this->getView()->assign( array( 'partial-data' => 'admin/jsonadm/partials/locale/site/template-data' ) );
131
132
		return parent::get( $request, $response );
133
	}
134
135
136
	/**
137
	 * Retrieves the item or items and adds the data to the view
138
	 *
139
	 * @param \Aimeos\MW\View\Iface $view View instance
140
	 * @param \Psr\Http\Message\ServerRequestInterface $request Request object
141
	 * @param \Psr\Http\Message\ResponseInterface $response Response object
142
	 * @return \Psr\Http\Message\ResponseInterface Modified response object
143
	 */
144
	protected function getItems( \Aimeos\MW\View\Iface $view, ServerRequestInterface $request, ResponseInterface $response )
145
	{
146
		$manager = \Aimeos\MShop\Factory::createManager( $this->getContext(), 'locale/site' );
147
		$search = $this->initCriteria( $manager->createSearch(), $view->param() );
148
		$total = 1;
149
150
		if( ( $id = $view->param( 'id' ) ) == null ) {
151
			$view->data = $manager->searchItems( $search, [], $total );
152
		} else {
153
			$view->data = $manager->getTree( $id, [], \Aimeos\MW\Tree\Manager\Base::LEVEL_ONE, $search );
154
		}
155
156
		$view->childItems = [];
157
		$view->listItems = [];
158
		$view->refItems = [];
159
		$view->total = $total;
160
161
		return $response;
162
	}
163
164
165
	/**
166
	 * Saves and returns the new or updated item
167
	 *
168
	 * @param \Aimeos\MShop\Common\Manager\Iface $manager Manager responsible for the items
169
	 * @param \stdClass $entry Object including "id" and "attributes" elements
170
	 * @return \Aimeos\MShop\Common\Item\Iface New or updated item
171
	 */
172
	protected function saveEntry( \Aimeos\MShop\Common\Manager\Iface $manager, \stdClass $entry )
173
	{
174
		if( isset( $entry->id ) )
175
		{
176
			$item = $manager->getItem( $entry->id );
177
			$item = $this->addItemData( $manager, $item, $entry, $item->getResourceType() );
178
			$item = $manager->saveItem( $item );
0 ignored issues
show
Bug introduced by
Are you sure the assignment to $item is correct as $manager->saveItem($item) (which targets Aimeos\MShop\Common\Manager\Iface::saveItem()) seems to always return null.

This check looks for function or method calls that always return null and whose return value is assigned to a variable.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
$object = $a->getObject();

The method getObject() can return nothing but null, so it makes no sense to assign that value to a variable.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
179
		}
180
		else
181
		{
182
			$item = $manager->createItem();
183
			$item = $this->addItemData( $manager, $item, $entry, $item->getResourceType() );
184
			$manager->insertItem( $item );
185
		}
186
187
		if( isset( $entry->relationships ) ) {
188
			$this->saveRelationships( $manager, $item, $entry->relationships );
0 ignored issues
show
Bug introduced by
It seems like $item defined by $manager->saveItem($item) on line 178 can be null; however, Aimeos\Admin\JsonAdm\Base::saveRelationships() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
189
		}
190
191
		return $manager->getItem( $item->getId() );
192
	}
193
}
194