phpsa /
datastore
| 1 | <?php |
||||
| 2 | |||||
| 3 | namespace Phpsa\Datastore; |
||||
| 4 | |||||
| 5 | use ReflectionClass; |
||||
| 6 | use Illuminate\Support\Facades\View; |
||||
| 7 | |||||
| 8 | use Phpsa\Datastore\DatastoreException; |
||||
| 9 | use Phpsa\Datastore\Datastore; |
||||
| 10 | use Phpsa\Datastore\Models\DatastorePages; |
||||
| 11 | use Phpsa\Datastore\Ams\AutoCallBackAdderAsset; |
||||
| 12 | use Phpsa\Datastore\Ams\AutoCallBackAsset; |
||||
| 13 | use Phpsa\Datastore\Ams\AutoCompleteAsset; |
||||
| 14 | use Phpsa\Datastore\Ams\BooleanAsset; |
||||
| 15 | use Phpsa\Datastore\Ams\DatepickerAsset; |
||||
| 16 | use Phpsa\Datastore\Ams\DropdownAsset; |
||||
| 17 | use Phpsa\Datastore\Ams\FileAsset; |
||||
| 18 | use Phpsa\Datastore\Ams\HeadingAsset; |
||||
| 19 | use Phpsa\Datastore\Ams\HtmlAsset; |
||||
| 20 | use Phpsa\Datastore\Ams\IdentityAsset; |
||||
| 21 | use Phpsa\Datastore\Ams\ImageAsset; |
||||
| 22 | use Phpsa\Datastore\Ams\MetatextAsset; |
||||
| 23 | use Phpsa\Datastore\Ams\StringAsset; |
||||
| 24 | use Phpsa\Datastore\Ams\SubHeadingAsset; |
||||
| 25 | use Phpsa\Datastore\Ams\TextAsset; |
||||
| 26 | |||||
| 27 | |||||
| 28 | use Illuminate\Support\Str; |
||||
| 29 | |||||
| 30 | /** |
||||
| 31 | * Asset class - this is an abstract basis for the assets that shou |
||||
| 32 | * |
||||
| 33 | * @author Craig Smith <[email protected]> |
||||
| 34 | */ |
||||
| 35 | class Asset{ |
||||
| 36 | |||||
| 37 | /** |
||||
| 38 | * Constants for the different asset types! |
||||
| 39 | */ |
||||
| 40 | const ASSET = "asset"; |
||||
| 41 | const PROP = "property"; |
||||
| 42 | |||||
| 43 | |||||
| 44 | const AUTOCALLBACKADDER = AutoCallBackAdderAsset::class; // ajax powered autocomplete backed on a callback |
||||
| 45 | const AUTOCALLBACK = AutoCallBackAsset::class; // ajax powered autocomplete backed on a callback |
||||
| 46 | const AUTOCOMPLETE = AutoCompleteAsset::class; |
||||
| 47 | const BOOL = BooleanAsset::class; |
||||
| 48 | const DATEPICKER = DatepickerAsset::class; |
||||
| 49 | const DROPDOWN = DropdownAsset::class; |
||||
| 50 | const FILE = FileAsset::class; |
||||
| 51 | const HEADING = HeadingAsset::class; |
||||
| 52 | const HTML = HtmlAsset::class; |
||||
| 53 | const IDENTITY = IdentityAsset::class; |
||||
| 54 | const IMG = ImageAsset::class; |
||||
| 55 | const METATEXT = MetatextAsset::class; |
||||
| 56 | const STRING = StringAsset::class; |
||||
| 57 | const SUBHEADING = SubHeadingAsset::class; |
||||
| 58 | const TEXT = TextAsset::class; |
||||
| 59 | |||||
| 60 | |||||
| 61 | const FOLDER = "amsFolderAsset"; |
||||
| 62 | |||||
| 63 | /** |
||||
| 64 | * help tips ypou may want to include properties |
||||
| 65 | * |
||||
| 66 | * @var string |
||||
| 67 | */ |
||||
| 68 | public $help = null; |
||||
| 69 | |||||
| 70 | /** |
||||
| 71 | * Sets the required rule for a property |
||||
| 72 | * |
||||
| 73 | * @var bool |
||||
| 74 | */ |
||||
| 75 | public $required = true; |
||||
| 76 | |||||
| 77 | /** |
||||
| 78 | * which property is the actual value name for your asset - target one of the properties |
||||
| 79 | * |
||||
| 80 | * @var string |
||||
| 81 | */ |
||||
| 82 | public $value_equals = null; |
||||
| 83 | |||||
| 84 | /** |
||||
| 85 | * Assets namespace, most often extended as an asset, however may be a property if adding a new input type. |
||||
| 86 | * |
||||
| 87 | * @var string |
||||
| 88 | */ |
||||
| 89 | public $namespace = self::ASSET; |
||||
| 90 | |||||
| 91 | /** |
||||
| 92 | * Generally left alone unless overrideing to be a property then should have the instance class |
||||
| 93 | * |
||||
| 94 | * @var string |
||||
| 95 | */ |
||||
| 96 | public $type = 'asset'; |
||||
| 97 | |||||
| 98 | /** |
||||
| 99 | * Properties for thie asset - used to define the property assets to use to build up the asset |
||||
| 100 | * |
||||
| 101 | * @var array |
||||
| 102 | */ |
||||
| 103 | public $properties = array(); |
||||
| 104 | |||||
| 105 | /** |
||||
| 106 | * Public name - This is used to identify |
||||
| 107 | * |
||||
| 108 | * @var [type] |
||||
|
0 ignored issues
–
show
Documentation
Bug
introduced
by
Loading history...
|
|||||
| 109 | */ |
||||
| 110 | public $name = null; |
||||
| 111 | |||||
| 112 | /** |
||||
| 113 | * just a shortname to use instead of the full $name above |
||||
| 114 | * |
||||
| 115 | * @var string |
||||
| 116 | */ |
||||
| 117 | public $shortname = null; |
||||
| 118 | |||||
| 119 | /** |
||||
| 120 | * the max number of instances, 0 means unlimited - normally used for presets like the robots.txt |
||||
| 121 | * |
||||
| 122 | * @var int |
||||
| 123 | */ |
||||
| 124 | public $max_instances = 0; |
||||
| 125 | |||||
| 126 | /** |
||||
| 127 | * IE if private is true, we do not show the page link block... and idsable the meta |
||||
| 128 | * but if private is false, we show the page link and let meta decide for itself: |
||||
| 129 | * @var bool |
||||
| 130 | */ |
||||
| 131 | public $private = false; |
||||
| 132 | |||||
| 133 | /** |
||||
| 134 | * @deprecated Initial - |
||||
| 135 | * @TODO - Remove from here and from teh database object |
||||
| 136 | * |
||||
| 137 | * @var [type] |
||||
|
0 ignored issues
–
show
|
|||||
| 138 | */ |
||||
| 139 | public $embedded = null; |
||||
| 140 | |||||
| 141 | /** |
||||
| 142 | * @deprecated version |
||||
| 143 | * * @TODO - Remove from here and from teh database object |
||||
| 144 | * @var [type] |
||||
|
0 ignored issues
–
show
|
|||||
| 145 | */ |
||||
| 146 | public $theme = null; |
||||
| 147 | |||||
| 148 | /** |
||||
| 149 | * set to 'off' to turn it off |
||||
| 150 | * |
||||
| 151 | * @var [type] |
||||
|
0 ignored issues
–
show
|
|||||
| 152 | */ |
||||
| 153 | public $meta_description = null; |
||||
| 154 | |||||
| 155 | /** |
||||
| 156 | * set to 'off' to turn it off |
||||
| 157 | * |
||||
| 158 | * @var [type] |
||||
|
0 ignored issues
–
show
|
|||||
| 159 | */ |
||||
| 160 | public $meta_keywords = null; |
||||
| 161 | |||||
| 162 | /** |
||||
| 163 | * set to 'off' to turn it off |
||||
| 164 | * |
||||
| 165 | * @var [type] |
||||
|
0 ignored issues
–
show
|
|||||
| 166 | */ |
||||
| 167 | public $page_css = null; |
||||
| 168 | |||||
| 169 | /** |
||||
| 170 | * set to 'off' to turn it off |
||||
| 171 | * |
||||
| 172 | * @var [type] |
||||
|
0 ignored issues
–
show
|
|||||
| 173 | */ |
||||
| 174 | public $page_js = null; |
||||
| 175 | |||||
| 176 | |||||
| 177 | public $options = false; // Options for the element -- should actually be removed from the database table most likely |
||||
| 178 | public $status_equals = null; // does the asset has a status linked to a prop |
||||
| 179 | public $start_date = null; // does the asset has a start date linked to a prop |
||||
| 180 | public $end_date = null; // does the asset has an end date linked to a prop |
||||
| 181 | public $comment_equals = null; // does the asset allow comments (linked to a specific property - similar to status_equals) |
||||
| 182 | public $warning = null; // field for warnings - deprected in favour of validation_messages |
||||
| 183 | //public $published = null; //published status |
||||
| 184 | //public $validation_messages = null //validation messages |
||||
| 185 | |||||
| 186 | public $key = null; |
||||
| 187 | public $module = null; |
||||
| 188 | public $value = null; |
||||
| 189 | public $status = null; |
||||
| 190 | public $meta = false; // ancillary meta info/data - similar to options |
||||
| 191 | public $callback = null; |
||||
| 192 | |||||
| 193 | /** |
||||
| 194 | * Link a child asset in on teh form, this will alllwo you to create a set of children on the form. |
||||
| 195 | * |
||||
| 196 | * @var [type] |
||||
|
0 ignored issues
–
show
|
|||||
| 197 | */ |
||||
| 198 | public $children = null; |
||||
| 199 | |||||
| 200 | /** |
||||
| 201 | * Is this a child only asset? if marked as true does not auto display on menu options and can only be linked in as a child property to an asset. |
||||
| 202 | * |
||||
| 203 | * @var bool |
||||
| 204 | */ |
||||
| 205 | public $is_child = false; |
||||
| 206 | |||||
| 207 | /** |
||||
| 208 | * Asset that can be a child, ie an article belonging to a category |
||||
| 209 | * |
||||
| 210 | * @var [type] |
||||
|
0 ignored issues
–
show
|
|||||
| 211 | */ |
||||
| 212 | public $accept = null; |
||||
| 213 | |||||
| 214 | /** |
||||
| 215 | * assets that can be children, a value means it is limited to that many children, -1 means unlimited |
||||
| 216 | * @TodO update this to better display with a selct / multiSelect null / 0 / -1 or any falsy is unlimited, else it is limited to that number... |
||||
| 217 | * @var [type] |
||||
|
0 ignored issues
–
show
|
|||||
| 218 | */ |
||||
| 219 | public $accept_limit = null; |
||||
| 220 | |||||
| 221 | |||||
| 222 | /** |
||||
| 223 | * generate the route for this asset |
||||
| 224 | * Overwrite this in your own assets to generate your own route |
||||
| 225 | */ |
||||
| 226 | public static function route(DatastorePages $record, $route = null){ |
||||
| 227 | if(null === $route){ |
||||
| 228 | $route = 'frontend.ams.page.slug'; |
||||
| 229 | } |
||||
| 230 | $page = $record->page; |
||||
|
0 ignored issues
–
show
|
|||||
| 231 | return route($route, ['slug' => $page->slug]); |
||||
| 232 | } |
||||
| 233 | |||||
| 234 | /** |
||||
| 235 | * holds the about information - should be overwritten by most Assets |
||||
| 236 | * @abstract - should be extended in children |
||||
| 237 | */ |
||||
| 238 | public static function about() |
||||
| 239 | { |
||||
| 240 | throw new DatastoreException("All Assets require an about method to describe them"); |
||||
| 241 | } |
||||
| 242 | |||||
| 243 | /** |
||||
| 244 | * this is an overridable method used to create the value equals based on the field to use |
||||
| 245 | * @param string $value |
||||
| 246 | * @return string |
||||
| 247 | */ |
||||
| 248 | public static function valueEquals($value) |
||||
| 249 | { |
||||
| 250 | return $value; |
||||
| 251 | } |
||||
| 252 | |||||
| 253 | /** |
||||
| 254 | * Get our Default properties for this asset |
||||
| 255 | * |
||||
| 256 | * @return array |
||||
| 257 | */ |
||||
| 258 | public static function getDefaultProperties(){ |
||||
| 259 | $obj = new ReflectionClass(get_called_class()); |
||||
| 260 | return $obj->getDefaultProperties(); |
||||
| 261 | } |
||||
| 262 | |||||
| 263 | /** |
||||
| 264 | * returns the label for the asset public identifier |
||||
| 265 | * |
||||
| 266 | * @todo - test if we still actually use this!!! |
||||
| 267 | * @deprecated initially ? |
||||
| 268 | * @return string |
||||
| 269 | */ |
||||
| 270 | public static function getValueLabel() |
||||
| 271 | { |
||||
| 272 | $props = self::getDefaultProperties(); |
||||
| 273 | if(empty($props['value_equals']) || empty($props['properties'][$props['value_equals']]['name'])){ |
||||
| 274 | throw new DatastoreException("value_equals is a required parameter"); |
||||
| 275 | } |
||||
| 276 | |||||
| 277 | $out = $props['properties'][$props['value_equals']]['name']; |
||||
| 278 | unset($obj, $props); |
||||
|
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
|
|||||
| 279 | return $out; |
||||
| 280 | } |
||||
| 281 | |||||
| 282 | /** |
||||
| 283 | * Gets information on the asset |
||||
| 284 | * |
||||
| 285 | * @param mixed $lookup - property to lookup or false for all |
||||
| 286 | * @return mixed - array of properties, string or false. |
||||
| 287 | */ |
||||
| 288 | public static function getInfo($lookup = false) |
||||
| 289 | { |
||||
| 290 | $props = self::getDefaultProperties(); |
||||
| 291 | |||||
| 292 | if ($lookup) |
||||
| 293 | { |
||||
| 294 | if (isset($props[$lookup])) |
||||
| 295 | { |
||||
| 296 | $out = $props[$lookup]; |
||||
| 297 | unset($obj, $props); |
||||
|
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
|
|||||
| 298 | return $out; |
||||
| 299 | } |
||||
| 300 | else |
||||
| 301 | { |
||||
| 302 | unset($obj, $props); |
||||
| 303 | return false; |
||||
| 304 | } |
||||
| 305 | } |
||||
| 306 | unset($obj); |
||||
| 307 | return $props; |
||||
| 308 | } |
||||
| 309 | |||||
| 310 | /** |
||||
| 311 | * Returns the Assets view path syntax |
||||
| 312 | * |
||||
| 313 | * @param string $type |
||||
| 314 | * |
||||
| 315 | * @return string |
||||
| 316 | */ |
||||
| 317 | public static function getAssetView(string $type = 'render') : string |
||||
| 318 | { |
||||
| 319 | $className = class_basename(get_called_class()); |
||||
| 320 | $ns = str_replace('\\', '', __NAMESPACE__); |
||||
| 321 | return Str::kebab($ns) . "::{$type}." . Str::kebab($className); |
||||
| 322 | } |
||||
| 323 | |||||
| 324 | /** |
||||
| 325 | * Creates the asset form |
||||
| 326 | * |
||||
| 327 | * @param array $args - form data |
||||
| 328 | * @param boolean $injectedform - if is a sub-form of another asset |
||||
| 329 | * @return string - the form html |
||||
| 330 | * @TODO :: todo not workin gyet |
||||
| 331 | * Should most likely parse throug to blade or laravel somewhere |
||||
| 332 | */ |
||||
| 333 | public static function form($args, $injectedform = false) |
||||
| 334 | { |
||||
| 335 | $template = self::getAssetView('form'); |
||||
| 336 | if (empty($args['unique_id'])) |
||||
| 337 | { |
||||
| 338 | $args['unique_id'] = uniqid(); |
||||
| 339 | } |
||||
| 340 | $data['data'] = $args; |
||||
|
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
|
|||||
| 341 | $data['asset_classname'] = $injectedform; |
||||
| 342 | return View::make($template, $data)->render(); |
||||
| 343 | } |
||||
| 344 | |||||
| 345 | /** |
||||
| 346 | * Renders the asset's markup |
||||
| 347 | * |
||||
| 348 | * @param array $args |
||||
| 349 | * @param string $params |
||||
| 350 | * @return string |
||||
| 351 | * * Should most likely parse throug to blade or laravel somewhere |
||||
| 352 | */ |
||||
| 353 | public static function render($args = [], $params = false) |
||||
| 354 | { |
||||
| 355 | |||||
| 356 | if(is_string($params)){ |
||||
| 357 | $template = $params; |
||||
| 358 | } else { |
||||
| 359 | $template = is_array($params) && !empty($params['view']) ? $params['view'] : self::getAssetView(); |
||||
|
0 ignored issues
–
show
|
|||||
| 360 | } |
||||
| 361 | |||||
| 362 | $params['assetClass'] = get_called_class(); |
||||
| 363 | $args['params'] = $params; |
||||
| 364 | |||||
| 365 | return View::exists($template) ? View::make($template, $args)->render() : static::html($args); |
||||
|
0 ignored issues
–
show
The method
html() does not exist on Phpsa\Datastore\Asset. It seems like you code against a sub-type of said class. However, the method does not exist in Phpsa\Datastore\Ams\BlockAsset or Phpsa\Datastore\Ams\TestAsset or Phpsa\Datastore\Ams\ContentAsset or Phpsa\Datastore\Ams\Article\ItemAsset or Phpsa\Datastore\Ams\Article\CategoryAsset or Phpsa\Datastore\Ams\RobotsTxtAsset or Phpsa\Datastore\Ams\TabAsset or Phpsa\Datastore\Ams\TabsAsset. Are you sure you never get one of those?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
| 366 | } |
||||
| 367 | |||||
| 368 | /** |
||||
| 369 | * Retrieve the current assets namespace |
||||
| 370 | * @return string - current namespace |
||||
| 371 | */ |
||||
| 372 | public static function getNamespace() |
||||
| 373 | { |
||||
| 374 | return self::getInfo('namespace'); |
||||
|
0 ignored issues
–
show
|
|||||
| 375 | } |
||||
| 376 | |||||
| 377 | /** |
||||
| 378 | * Creates a new Asset Instance |
||||
| 379 | * @param string $className |
||||
| 380 | * @param array $args |
||||
| 381 | * @return Asset |
||||
| 382 | * @TODO Use Namespacing to autoload!!! |
||||
| 383 | */ |
||||
| 384 | public static function factory($className, $args = array()) |
||||
| 385 | { |
||||
| 386 | $ref = new ReflectionClass($className); |
||||
| 387 | return $ref->newInstanceArgs($args); |
||||
| 388 | } |
||||
| 389 | |||||
| 390 | /** |
||||
| 391 | * gets the url path for the asset |
||||
| 392 | * |
||||
| 393 | * @param [type] $className |
||||
|
0 ignored issues
–
show
|
|||||
| 394 | * |
||||
| 395 | * @return void |
||||
| 396 | * @author Craig Smith <[email protected]> |
||||
| 397 | */ |
||||
| 398 | public static function getPath($className = null){ |
||||
| 399 | if(null === $className) { |
||||
| 400 | $className = get_called_class(); |
||||
| 401 | } |
||||
| 402 | return Helpers::getPath($className); |
||||
|
0 ignored issues
–
show
Are you sure the usage of
Phpsa\Datastore\Helpers::getPath($className) targeting Phpsa\Datastore\Helpers::getPath() seems to always return null.
This check looks for function or method calls that always return null and whose return value is used. class A
{
function getObject()
{
return null;
}
}
$a = new A();
if ($a->getObject()) {
The method The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes. Loading history...
|
|||||
| 403 | } |
||||
| 404 | |||||
| 405 | } |