Source of file ArrayMethods.php
Size: 1,601 Bytes - Last Modified: 2021-12-24T07:10:31+00:00
/var/www/docs.ssmods.com/process/src/src/ArrayMethods.php
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | <?php namespace Sunnysideup\OrmExtras; use SilverStripe\Core\ClassInfo; use SilverStripe\ORM\DataObject; use SilverStripe\Versioned\Versioned; class ArrayMethods { /** * return an array of ids that can be ued for ORM filters... * * @param mixed $array - hopefully an array */ public static function filter_array($array): array { if (! is_array($array)) { $array = []; } if (0 === count($array)) { $array = [0 => 0]; } return array_values(array_unique($array)); } /** * creates a sort string from a list of ID arrays... * * @param array $ids - list of product IDs */ public static function create_sort_statement_from_id_array(array $ids, ?string $className = ''): string { $ids = ArrayMethods::filter_array($ids); $ifStatement = 'CASE '; $count = 0; $stage = self::get_stage(); $dataClasses = ClassInfo::dataClassesFor($className); $table = DataObject::getSchema()->tableName(array_shift($dataClasses)); foreach ($ids as $id) { $ifStatement .= ' WHEN "' . $table . $stage . "\".\"ID\" = {$id} THEN {$count}"; ++$count; } return $ifStatement . ' END'; } /** * Returns a versioned record stage table suffix (i.e "" or "_Live"). * * @return string */ protected static function get_stage() { $stage = ''; if ('Live' === Versioned::get_stage()) { $stage = '_Live'; } return $stage; } } |