function xmlEncode(array $array, &$parentObject) { static $section; foreach ($array as $key => $value) { switch (true) { case is_array($array[key($array)]): if (!is_numeric($key)) { $node = $parentObject->addChild($key); xmlEncode($value, $node); } else { $node = $parentObject->addChild($section); foreach ($value as $k => $v) { $node->addChild($k, htmldecode($v)); } } break; case is_array($value): $section = $key; xmlEncode($value, $parentObject); break; default: $parentObject->addChild($key, htmldecode($value)); } } }
/** * Creates an XSPF compliant playlist and returns it for playing * * @author Kevin Ingolfsland * @version 1/2/07 * @since 1/2/07 * @param $list The list of tracks to use when making the playlist * @param $return Returns the porperly formated list */ function SERVICE_CREATE_PLAYLIST_XSPF($list) { global $allow_resample, $this_site, $root_dir, $web_root; // Let's setup Smarty $smarty = smartySetup(); // This playlist type supports the following media types: $supported = "asf|wma|wmv|wm|asx|wax|wvx|wpl|dvr-ms|wmd|avi|mpg|mpeg|m1v|mp2|mp3|mpa|mpe|mpv2|m3u|ogg|mid|midi|rmi|aif|aifc|aiff|au|snd|wav|ivf|flac|mpc|wv|m4a|"; // Let's define our variables $i = 0; foreach ($list->getList() as $track) { // Should we play this? if ((stristr($track->getPath("String"), ".lofi.") or stristr($track->getPath("String"), ".clip.")) and $_SESSION['jz_play_all_tracks'] != true) { continue; } // Now let's get the extension to be sure it can be played $pArr = explode("/", $track->getPath("String")); $eArr = explode(".", $pArr[count($pArr) - 1]); $ext = $eArr[count($eArr) - 1]; if (!stristr($supported, $ext . "|")) { continue; } // Let's get the meta $meta = $track->getMeta(); // Now let's figure out the full track name $trackn = $track->getFileName("user"); if (!stristr($trackn, "mediabroadcast.php")) { $track->increasePlayCount(); } $tArr[$i]['link'] = xmlEncode($trackn); if ($meta['artist'] != "" and $meta['artist'] != "-") { $tArr[$i]['artist'] = xmlEncode($meta['artist']) . " - "; } else { $tArr[$i]['artist'] = ""; } $tArr[$i]['album'] = xmlEncode($meta['album']); $tArr[$i]['genre'] = xmlEncode($meta['genre']); $tArr[$i]['track'] = xmlEncode($meta['title']); $tArr[$i]['length'] = xmlEncode($meta['length']); $tArr[$i]['path'] = rawurlencode($track->getPath("String")); $tArr[$i]['url'] = $this_site . $root_dir; $i++; } $smarty->assign('this_site', $this_site); $smarty->assign('root_dir', $root_dir); $smarty->assign('tracks', $tArr); $smarty->assign('totalTracks', $i); // Now let's include the template $smarty->display(SMARTY_ROOT . 'templates/playlists/xspf.tpl'); }
/** * Ajax方式返回数据到客户端 * @access protected * @param mixed $data 要返回的数据 * @param String $type AJAX返回数据格式 * @param int $json_option 传递给json_encode的option参数 * @return void */ function ajaxReturn($data, $type = '', $json_option = 0) { if (empty($type)) { $type = 'JSON'; } switch (strtoupper($type)) { case 'JSON': // 返回JSON数据格式到客户端 包含状态信息 header('Content-Type:application/json; charset=utf-8'); exit(json_encode($data, $json_option)); case 'XML': // 返回xml格式数据 header('Content-Type:text/xml; charset=utf-8'); exit(xmlEncode($data)); case 'EVAL': // 返回可执行的js脚本 header('Content-Type:text/html; charset=utf-8'); exit($data); default: // 用于扩展其他返回格式数据 exit; } }
function xmlEncode($mixed, $domElement = null, $DOMDocument = null) { if (is_null($DOMDocument)) { $DOMDocument = new DOMDocument(); $DOMDocument->formatOutput = true; $node = $DOMDocument->createElement("Response"); $DOMDocument->appendChild($node); xmlEncode($mixed, $node, $DOMDocument); return $DOMDocument->saveXML(); } else { if (is_array($mixed)) { foreach ($mixed as $index => $mixedElement) { if (is_int($index)) { if ($index == 0) { $node = $domElement; } else { $node = $DOMDocument->createElement($domElement->tagName); $domElement->parentNode->appendChild($node); } } else { $plural = $DOMDocument->createElement($index); $domElement->appendChild($plural); $node = $plural; if (rtrim($index, 's') !== $index && $index != "status" && $index != "fps") { $singular = $DOMDocument->createElement(rtrim($index, 's')); $plural->appendChild($singular); $node = $singular; } } xmlEncode($mixedElement, $node, $DOMDocument); } } else { $domElement->appendChild($DOMDocument->createTextNode($mixed)); } } }