Exemplo n.º 1
0
 /**
  * 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;
 }