/** * Open playlist by full path, including filename. * @param String $fullPath * @return Playlist */ private function openPlaylist($fullPath) { $playlist = new Playlist(); if ($fullPath) { $xml = @simplexml_load_file($fullPath, 'SimpleXMLElement', LIBXML_NOCDATA); if (!$xml) { throw new Exception("Error loading Playlist on '" . $fullPath . "'."); } $attributes = $xml->attributes(); $playlist->setFilename((string) basename($fullPath)); $playlist->setPath((string) dirname($fullPath)); if ($attributes['name']) { $playlist->setName((string) $attributes['name']); } if ($attributes['description']) { $playlist->setDescription((string) $attributes['description']); } //Get playlist links foreach ($xml->children() as $second_gen) { $playlistLink = new PlaylistLink(); //Get node attributes $attributes = $second_gen->attributes(); $playlistLink->setKey((string) $attributes['key']); if ($attributes['type']) { $playlistLink->setType((string) $attributes['type']); } if ($attributes['thumbnail']) { $playlistLink->setThumbnail((string) $attributes['thumbnail']); } //Get child nodes if ($second_gen->title) { $playlistLink->setTitle((string) $second_gen->title); } if ($second_gen->description) { $playlistLink->setDescription((string) $second_gen->description); } if ($second_gen->format) { $playlistLink->setFormat((string) $second_gen->format); } if ($second_gen->filename) { $playlistLink->setFilename((string) $second_gen->filename); } if ($second_gen->link) { $playlistLink->setLink((string) $second_gen->link); } if ($second_gen->language) { $playlistLink->setLanguage((string) $second_gen->language); } //Get ids $order = 1; $second_gen = $second_gen->part; foreach ($second_gen->children() as $third_gen) { $attributes = $third_gen->attributes(); if ($attributes['order']) { $playlistLink->addId((int) $attributes['order'], (string) $third_gen); } else { ++$order; $playlistLink->addId((int) $order, (string) $third_gen); } } //Add link to playlist $playlist->addPlaylistLink($playlistLink); } } return $playlist; }