/** * Returns an array of subdef matching * * @param string|string[] $devices the matching device (see databox_subdef::DEVICE_*) * @param string|string[] $mimes the matching mime types * @return media_subdef[] */ public function getSubdfefByDeviceAndMime($devices = null, $mimes = null) { $subdefNames = $subdefs = []; $availableSubdefs = $this->get_subdefs(); if (isset($availableSubdefs['document'])) { $mime_ok = !$mimes || in_array($availableSubdefs['document']->get_mime(), (array) $mimes); $devices_ok = !$devices || array_intersect($availableSubdefs['document']->getDevices(), (array) $devices); if ($mime_ok && $devices_ok) { $subdefs['document'] = $availableSubdefs['document']; } } $searchDevices = array_merge((array) $devices, (array) databox_subdef::DEVICE_ALL); $type = $this->isStory() ? 'image' : $this->get_type(); foreach ($this->databox->get_subdef_structure() as $group => $databoxSubdefs) { if ($type != $group) { continue; } foreach ($databoxSubdefs as $databoxSubdef) { if ($devices && !array_intersect($databoxSubdef->getDevices(), $searchDevices)) { continue; } array_push($subdefNames, $databoxSubdef->get_name()); } } foreach ($availableSubdefs as $subdef) { if (!in_array($subdef->get_name(), $subdefNames)) { continue; } if ($mimes && !in_array($subdef->get_mime(), (array) $mimes)) { continue; } $subdefs[$subdef->get_name()] = $subdef; } return $subdefs; }