function getNewsFromAgency() { //Retrieve recent news and set them into context $newest_news_url = sprintf("http://www.xeshoppingmall.com/?module=newsagency&act=getNewsagencyArticle&inst=notice&top=6&loc=%s", _XE_LOCATION_); $cache_file = sprintf("%sfiles/cache/nstore_news.%s.cache.php", _XE_PATH_, _XE_LOCATION_); if (!file_exists($cache_file) || filemtime($cache_file) + 60 * 60 < time()) { // Considering if data cannot be retrieved due to network problem, modify filemtime to prevent trying to reload again when refreshing textmessageistration page // Ensure to access the textmessageistration page even though news cannot be displayed FileHandler::writeFile($cache_file, ''); FileHandler::getRemoteFile($newest_news_url, $cache_file, null, 1, 'GET', 'text/html', array('REQUESTURL' => getFullUrl(''))); } if (file_exists($cache_file)) { $oXml = new XmlParser(); $buff = $oXml->parse(FileHandler::readFile($cache_file)); $item = $buff->zbxe_news->item; if ($item) { if (!is_array($item)) { $item = array($item); } foreach ($item as $key => $val) { $obj = null; $obj->title = $val->body; $obj->date = $val->attrs->date; $obj->url = $val->attrs->url; $news[] = $obj; } return $news; } } }
/** * @brief 위젯의 실행 부분 * * ./widgets/위젯/conf/info.xml 에 선언한 extra_vars를 args로 받는다 * 결과를 만든후 print가 아니라 return 해주어야 한다 **/ function proc($args) { // 위젯 자체적으로 설정한 변수들을 체크 $title = $args->title; $PAGE_LIMIT = $args->page_limit ? $args->page_limit : 10; // 날짜 형태 $DATE_FORMAT = $args->date_format ? $args->date_format : "Y-m-d H:i:s"; $buff = $this->rss_request($args->rss_url); if (!is_string($buff) or !$buff) { return Context::getLang('msg_fail_to_request_open'); } $encoding = preg_match("/<\\?xml.*encoding=\"(.+)\".*\\?>/i", $buff, $matches); if ($encoding && !preg_match("/UTF-8/i", $matches[1])) { $buff = trim(iconv($matches[1] == "ks_c_5601-1987" ? "EUC-KR" : $matches[1], "UTF-8", $buff)); } $buff = preg_replace("/<\\?xml.*\\?>/i", "", $buff); $oXmlParser = new XmlParser(); $xml_doc = $oXmlParser->parse($buff); $rss->title = $xml_doc->rss->channel->title->body; $rss->link = $xml_doc->rss->channel->link->body; $items = $xml_doc->rss->channel->item; if (!$items) { return Context::getLang('msg_invalid_format'); } if ($items && !is_array($items)) { $items = array($items); } $rss_list = array(); foreach ($items as $key => $value) { if ($key >= $PAGE_LIMIT) { break; } unset($item); foreach ($value as $key2 => $value2) { if (is_array($value2)) { $value2 = array_shift($value2); } $item->{$key2} = $value2->body; } $date = $item->pubdate; $item->date = $date ? date($DATE_FORMAT, strtotime($date)) : ''; $array_date[$key] = strtotime($date); $item->description = preg_replace('!<a href=!is', '<a onclick="window.open(this.href);return false" href=', $item->description); $rss_list[$key] = $item; } array_multisort($array_date, SORT_DESC, $rss_list); $widget_info->rss = $rss; $widget_info->rss_list = $rss_list; $widget_info->title = $title; $widget_info->rss_height = $args->rss_height ? $args->rss_height : 200; $widget_info->subject_cut_size = $args->subject_cut_size; Context::set('widget_info', $widget_info); // 템플릿의 스킨 경로를 지정 (skin, colorset에 따른 값을 설정) $tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin); Context::set('colorset', $args->colorset); // 템플릿 컴파일 $oTemplate =& TemplateHandler::getInstance(); $output = $oTemplate->compile($tpl_path, 'list'); return $output; }
public function testParseWithIntegerIndexedArray() { $testXml = simplexml_load_file('./tests/raw/test_feed.xml'); $parser = new XmlParser($testXml); $results = $parser->parse(); $this->assertTrue(isset($results['rss']['channel'])); }
/** * check easy install * @return void */ function checkEasyinstall() { $lastTime = (int) FileHandler::readFile($this->easyinstallCheckFile); if ($lastTime > $_SERVER['REQUEST_TIME'] - 60 * 60 * 24 * 30) { return; } $oAutoinstallModel = getModel('autoinstall'); $params = array(); $params["act"] = "getResourceapiLastupdate"; $body = XmlGenerater::generate($params); $buff = FileHandler::getRemoteResource(_XE_DOWNLOAD_SERVER_, $body, 3, "POST", "application/xml"); $xml_lUpdate = new XmlParser(); $lUpdateDoc = $xml_lUpdate->parse($buff); $updateDate = $lUpdateDoc->response->updatedate->body; if (!$updateDate) { $this->_markingCheckEasyinstall(); return; } $item = $oAutoinstallModel->getLatestPackage(); if (!$item || $item->updatedate < $updateDate) { $oController = getAdminController('autoinstall'); $oController->_updateinfo(); } $this->_markingCheckEasyinstall(); }
/** * General armory fetch class * Returns XML, HTML or an array of the parsed XML page * * @param int $type * @param string $character * @param string $guild * @param string $realm * @param int $item_id * @param string $fetch_type * @return array */ function fetchArmory($type = false, $character = false, $guild = false, $realm = false, $item_id = false, $fetch_type = 'array') { global $roster; $url = $this->_makeUrl($type, false, $item_id, $character, $realm, $guild); if ($fetch_type == 'html') { $this->setUserAgent('Opera/9.22 (X11; Linux i686; U; en)'); } if ($this->_requestXml($url)) { if ($fetch_type == 'array') { // parse and return array $this->_initXmlParser(); $this->xmlParser->Parse($this->xml); $data = $this->xmlParser->getParsedData(); } elseif ($fetch_type == 'simpleClass') { // parse and return SimpleClass object $this->_initSimpleParser(); $data = $this->simpleParser->parse($this->xml); } else { // unparsed fetches return $this->xml; } return $data; } else { trigger_error('RosterArmory:: Failed to fetch ' . $url); return false; } }
function getLicenseFromAgency($prodid, &$has_license = TRUE, &$expiration = NULL) { $has_license = TRUE; $oLicenseModel =& getModel('license'); $config = $oLicenseModel->getModuleConfig(); if ($prodid == 'nstore') { $user_id = $config->user_id; $serial_number = $config->serial_number; } else { if ($prodid == 'nstore_digital') { $user_id = $config->d_user_id; $serial_number = $config->d_serial_number; } else { $user_id = $config->e_user_id; $serial_number = $config->e_serial_number; } } $cache_file = $this->checkLicense($prodid, $user_id, $serial_number); if (file_exists($cache_file)) { $oXml = new XmlParser(); $buff = $oXml->parse(FileHandler::readFile($cache_file)); // user $userObj = $buff->drm->user; if ($userObj) { $user = $userObj->body; if ($user != $user_id) { $this->checkLicense($prodid, $user_id, $serial_number, TRUE); return TRUE; } } // serial $serialObj = $buff->drm->serial; if ($serialObj) { $serial = $serialObj->body; if ($serial != $serial_number) { $this->checkLicense($prodid, $user_id, $serial_number, TRUE); return TRUE; } } // license $licenseObj = $buff->drm->license; if ($licenseObj) { $license = $licenseObj->body; if ($license == 'none') { $url = getUrl('act', 'dispLicenseAdminConfig'); Context::set(sprintf('%s_MESSAGE_TYPE', strtoupper($prodid)), 'error'); Context::set(sprintf('%s_MESSAGE', strtoupper($prodid)), Context::getLang('not_registered')); $has_license = FALSE; } } // expiration $expirationObj = $buff->drm->expiration; if ($expirationObj) { $expiration = $expirationObj->body; } } return FALSE; }
/** * Load a xml file specified by a filename and parse it to Return the resultant data object * @param string $filename a file path of file * @return array Returns a data object containing data extracted from a xml file or NULL if a specified file does not exist */ function loadXmlFile($filename) { if (!file_exists($filename)) { return; } $buff = FileHandler::readFile($filename); $oXmlParser = new XmlParser(); return $oXmlParser->parse($buff); }
function _setGrantByWidgetSequence($matches) { $buff = trim($matches[0]); $oXmlParser = new XmlParser(); $xml_doc = $oXmlParser->parse(trim($buff)); $widget_sequence = $vars->widget_sequence; if ($widget_sequence) { $_SESSION['magic_content_grant'][$widget_sequence] = true; } }
/** * Request data to server and returns result * * @param array $params Request data * @return object */ function getXmlDoc(&$params) { $body = XmlGenerater::generate($params); $buff = FileHandler::getRemoteResource(_XE_DOWNLOAD_SERVER_, $body, 3, "POST", "application/xml"); if (!$buff) { return; } $xml = new XmlParser(); $xmlDoc = $xml->parse($buff); return $xmlDoc; }
/** * Request data to server and returns result * * @param array $params Request data * @return object */ function getXmlDoc(&$params) { $body = XmlGenerater::generate($params); $request_config = array('ssl_verify_peer' => FALSE, 'ssl_verify_host' => FALSE); $buff = FileHandler::getRemoteResource(_XE_DOWNLOAD_SERVER_, $body, 3, "POST", "application/xml", array(), array(), array(), $request_config); if (!$buff) { return; } $xml = new XmlParser(); $xmlDoc = $xml->parse($buff); return $xmlDoc; }
/** * @brief naver map open api에서 주소를 찾는 함수 **/ function search_address() { $address = Context::get('address'); if (!$address) { return new Object(-1, 'msg_not_exists_addr'); } Context::loadLang($this->component_path . "lang"); // 지정된 서버에 요청을 시도한다 $address = urlencode(iconv("UTF-8", "EUC-KR", $address)); $query_string = sprintf('/api/geocode.php?key=%s&query=%s', $this->api_key, $address); $fp = fsockopen('maps.naver.com', 80, $errno, $errstr); if (!$fp) { return new Object(-1, 'msg_fail_to_socket_open'); } fputs($fp, "GET {$query_string} HTTP/1.0\r\n"); fputs($fp, "Host: maps.naver.com\r\n\r\n"); $buff = ''; while (!feof($fp)) { $str = fgets($fp, 1024); if (trim($str) == '') { $start = true; } if ($start) { $buff .= trim($str); } } fclose($fp); $buff = trim(iconv("EUC-KR", "UTF-8", $buff)); $buff = str_replace('<?xml version="1.0" encoding="euc-kr" ?>', '', $buff); $oXmlParser = new XmlParser(); $xml_doc = $oXmlParser->parse($buff); //If a Naver OpenApi Error message exists. if ($xml_doc->error->error_code->body || $xml_doc->error->message->body) { return new Object(-1, 'NAVER OpenAPI Error' . "\n" . 'Code : ' . $xml_doc->error->error_code->body . "\n" . 'Message : ' . $xml_doc->error->message->body); } if ($xml_doc->geocode->total->body == 0) { return new Object(-1, 'msg_no_result'); } $addrs = $xml_doc->geocode->item; if (!is_array($addrs)) { $addrs = array($addrs); } $addrs_count = count($addrs); $address_list = array(); for ($i = 0; $i < $addrs_count; $i++) { $item = $addrs[$i]; $address_list[] = sprintf("%s,%s,%s", $item->point->x->body, $item->point->y->body, $item->address->body); } $this->add("address_list", implode("\n", $address_list)); }
/** * Update easy install information * * @return void */ function _updateinfo() { $oModel =& getModel('autoinstall'); $item = $oModel->getLatestPackage(); if ($item) { $params["updatedate"] = $item->updatedate; } $params["act"] = "getResourceapiUpdate"; $body = XmlGenerater::generate($params); $buff = FileHandler::getRemoteResource(_XE_DOWNLOAD_SERVER_, $body, 3, "POST", "application/xml"); $xml = new XmlParser(); $xmlDoc = $xml->parse($buff); $this->updateCategory($xmlDoc); $this->updatePackages($xmlDoc); $this->checkInstalled(); }
/** * Returns table information * * Used for finding column type info (string/numeric) <br /> * Obtains the table info from XE's XML schema files * * @param object $query_id * @param bool $table_name * @return array */ function getTableInfo($query_id, $table_name) { $column_type = array(); $module = ''; $id_args = explode('.', $query_id); if (count($id_args) == 2) { $target = 'modules'; $module = $id_args[0]; $id = $id_args[1]; } else { if (count($id_args) == 3) { $target = $id_args[0]; $targetList = array('modules' => 1, 'addons' => 1, 'widgets' => 1); if (!isset($targetList[$target])) { return; } $module = $id_args[1]; $id = $id_args[2]; } } // get column properties from the table $table_file = sprintf('%s%s/%s/schemas/%s.xml', _XE_PATH_, 'modules', $module, $table_name); if (!file_exists($table_file)) { $searched_list = FileHandler::readDir(_XE_PATH_ . 'modules'); $searched_count = count($searched_list); for ($i = 0; $i < $searched_count; $i++) { $table_file = sprintf('%s%s/%s/schemas/%s.xml', _XE_PATH_, 'modules', $searched_list[$i], $table_name); if (file_exists($table_file)) { break; } } } if (file_exists($table_file)) { $table_xml = FileHandler::readFile($table_file); $xml_parser = new XmlParser(); $table_obj = $xml_parser->parse($table_xml); if ($table_obj->table) { if (isset($table_obj->table->column) && !is_array($table_obj->table->column)) { $table_obj->table->column = array($table_obj->table->column); } foreach ($table_obj->table->column as $k => $v) { $column_type[$v->attrs->name] = $v->attrs->type; } } } return $column_type; }
/** * Converts XML into an array, respecting namespaces, attributes, and text values. * * @return array */ public function parse() { $namespaces = $this->xml->getDocNamespaces(); $namespaces[''] = null; //add base (empty) namespace $attributes = $this->getAttributes($namespaces); //get child nodes from all namespaces $tags = array(); foreach ($namespaces as $prefix => $namespace) { foreach ($this->xml->children($namespace) as $childXml) { $new_parser = new XmlParser($childXml, $this->options); $child = $new_parser->parse(); list($childTag, $childProperties) = each($child); //add namespace prefix, if any if ($prefix) { $childTag = $prefix . $this->namespaceSeparator . $childTag; } if (!isset($tags[$childTag])) { $alwaysArray = $this->options['alwaysArray']; $autoArray = $this->options['autoArray']; $tags[$childTag] = $childProperties; if (in_array($childTag, $alwaysArray) || !$autoArray) { $tags[$childTag] = [$childProperties]; } } elseif ($this->isIntegerIndexedArray($tags[$childTag])) { $tags[$childTag][] = $childProperties; } else { //key exists so convert to integer indexed array with previous value in position 0 $tags[$childTag] = array($tags[$childTag], $childProperties); } } } //get text content of node $textContent = array(); $plainText = trim((string) $this->xml); if ($plainText !== '') { $textContent[$this->options['textContent']] = $plainText; } //stick it all together $properties = $plainText; if (!$this->options['autoText'] || $attributes || $tags || $plainText === '') { $properties = array_merge($attributes, $tags, $textContent); } //return node as array return array($this->xml->getName() => $properties); }
/** * Update easy install information * * @return void */ function _updateinfo() { $oModel = getModel('autoinstall'); $item = $oModel->getLatestPackage(); if ($item) { $params["updatedate"] = $item->updatedate; } $params["act"] = "getResourceapiUpdate"; $body = XmlGenerater::generate($params); $request_config = array('ssl_verify_peer' => FALSE, 'ssl_verify_host' => FALSE); $buff = FileHandler::getRemoteResource(_XE_DOWNLOAD_SERVER_, $body, 3, "POST", "application/xml", array(), array(), array(), $request_config); $xml = new XmlParser(); $xmlDoc = $xml->parse($buff); $this->updateCategory($xmlDoc); $this->updatePackages($xmlDoc); $this->checkInstalled(); $oAdminController = getAdminController('admin'); $output = $oAdminController->cleanFavorite(); }
function editPost($postid, $oDocument, $category = null) { $oXmlParser = new XmlParser(); $output = $this->getUsersBlogs(); if (!$output->toBool()) { return $output; } $this->blogid = $output->get('blogid'); $input = sprintf('<?xml version="1.0"?>' . '<methodcall>' . '<methodname>blogger.editPost</methodname>' . '<params>' . '<param><value><string>%s</string></value></param>' . '<param><value><string>%s</string></value></param>' . '<param><value><string>%s</string></value></param>' . '<param><value><string>%s</string></value></param>' . '<param><value><string>%s<string></value></param>' . '<param><value><boolean>1</boolean></value></param>' . '</params>' . '</methodcall>', '0123456789ABCDEF', $postid, $this->user_id, $this->password, str_replace(array('&', '<', '>'), array('&', '<', '>'), $oDocument->get('content'))); $output = $this->_request($this->url, $input, 'application/octet-stream', 'POST'); $xmlDoc = $oXmlParser->parse($output); if (isset($xmlDoc->methodresponse->fault)) { $code = $xmlDoc->methodresponse->fault->value->struct->member[0]->value->int->body; $message = $xmlDoc->methodresponse->fault->value->struct->member[1]->value->string->body; return new Object($code, $message); } $output = new Object(); $output->add('postid', $postid); return $output; }
/** * Convert a WMS GetCapabilities to Metador data object. * @param $xml * @param $conf * @return array */ public function loadWMS($xml, $conf) { // read version $parser = new XmlParser($xml, new XmlParserFunctions()); $parser->loadSchema(file_get_contents($conf['wmsimport']['path'] . 'wmsversion.json')); $version = $parser->parse(); unset($parser); // read metadata $parser = new XmlParser($xml, new XmlParserFunctions()); switch ($version["version"]) { case "1.1.1": $parser->loadSchema(file_get_contents($conf['wmsimport']['path'] . 'wms_1-1-1.json')); break; case "1.3.0": $parser->loadSchema(file_get_contents($conf['wmsimport']['path'] . 'wms_1-3-0.json')); break; } $array = $parser->parse(); return isset($array['p']) ? $array['p'] : array(); }
/** * @brief Display Super Admin Dashboard **/ function dispTextmessageAdminIndex() { $oTextmessageModel = getModel('textmessage'); $config = $oTextmessageModel->getConfig(); if (!$config) { Context::set('isSetupCompleted', false); } else { Context::set('isSetupCompleted', true); } Context::set('config', $config); //Retrieve recent news and set them into context $newest_news_url = sprintf("http://www.coolsms.co.kr/?module=newsagency&act=getNewsagencyArticle&inst=notice&loc=%s", _XE_LOCATION_); $cache_file = sprintf("%sfiles/cache/cool_news.%s.cache.php", _XE_PATH_, _XE_LOCATION_); if (!file_exists($cache_file) || filemtime($cache_file) + 60 * 60 < time()) { // Considering if data cannot be retrieved due to network problem, modify filemtime to prevent trying to reload again when refreshing textmessageistration page // Ensure to access the textmessage registration page even though news cannot be displayed FileHandler::writeFile($cache_file, ''); FileHandler::getRemoteFile($newest_news_url, $cache_file, null, 1, 'GET', 'text/html', array('REQUESTURL' => getFullUrl(''))); } if (file_exists($cache_file)) { $oXml = new XmlParser(); $buff = $oXml->parse(FileHandler::readFile($cache_file)); $item = $buff->zbxe_news->item; if ($item) { if (!is_array($item)) { $item = array($item); } foreach ($item as $key => $val) { $obj = new stdClass(); $obj->title = $val->body; $obj->date = $val->attrs->date; $obj->url = $val->attrs->url; $news[] = $obj; } Context::set('news', $news); } Context::set('released_version', $buff->zbxe_news->attrs->released_version); Context::set('download_link', $buff->zbxe_news->attrs->download_link); } $this->setTemplateFile('index'); }
/** * Set extra variables * @param resource $fp * @return array */ function importExtraVars($fp) { $buff = null; while (!feof($fp)) { $buff .= $str = trim(fgets($fp, 1024)); if (trim($str) == '</extra_vars>') { break; } } if (!$buff) { return array(); } $buff = '<extra_vars>' . $buff; $oXmlParser = new XmlParser(); $xmlDoc = $this->oXmlParser->parse($buff); if (!count($xmlDoc->extra_vars->key)) { return array(); } $index = 1; foreach ($xmlDoc->extra_vars->key as $k => $v) { unset($vobj); if ($v->var_idx) { $vobj->var_idx = base64_decode($v->var_idx->body); $vobj->lang_code = base64_decode($v->lang_code->body); $vobj->value = base64_decode($v->value->body); $vobj->eid = base64_decode($v->eid->body); } else { if ($v->body) { $vobj->var_idx = $index; $vobj->lang_code = Context::getLangType(); $vobj->value = base64_decode($v->body); $vobj->eid = 'extra_vars' . $index; } } $extra_vars["extra_vars" . $index] = $vobj; $index++; } return $extra_vars; }
/** * Get document_srl of document associated with an article page */ public function getPageDocumentSrl($page_content) { $buff = trim($page_content); $oXmlParser = new XmlParser(); $xml_doc = $oXmlParser->parse(trim($buff)); $document_srl = $xml_doc->img->attrs->document_srl; return $document_srl; }
/** * Create table by using the schema xml * * type : number, varchar, tinytext, text, bigtext, char, date, \n * opt : notnull, default, size\n * index : primary key, index, unique\n * @param string $xml_doc xml schema contents * @return void|object */ function _createTable($xml_doc) { // xml parsing $oXml = new XmlParser(); $xml_obj = $oXml->parse($xml_doc); // Create a table schema $table_name = $xml_obj->table->attrs->name; if ($this->isTableExists($table_name)) { return; } $table_name = $this->prefix . $table_name; if (!is_array($xml_obj->table->column)) { $columns[] = $xml_obj->table->column; } else { $columns = $xml_obj->table->column; } $primary_list = array(); $unique_list = array(); $index_list = array(); foreach ($columns as $column) { $name = $column->attrs->name; $type = $column->attrs->type; $size = $column->attrs->size; $notnull = $column->attrs->notnull; $primary_key = $column->attrs->primary_key; $index = $column->attrs->index; $unique = $column->attrs->unique; $default = $column->attrs->default; $auto_increment = $column->attrs->auto_increment; $column_schema[] = sprintf('`%s` %s%s %s %s %s', $name, $this->column_type[$type], $size ? '(' . $size . ')' : '', isset($default) ? "default '" . $default . "'" : '', $notnull ? 'not null' : '', $auto_increment ? 'auto_increment' : ''); if ($primary_key) { $primary_list[] = $name; } else { if ($unique) { $unique_list[$unique][] = $name; } else { if ($index) { $index_list[$index][] = $name; } } } } if (count($primary_list)) { $column_schema[] = sprintf("primary key (%s)", '`' . implode($primary_list, '`,`') . '`'); } if (count($unique_list)) { foreach ($unique_list as $key => $val) { $column_schema[] = sprintf("unique %s (%s)", $key, '`' . implode($val, '`,`') . '`'); } } if (count($index_list)) { foreach ($index_list as $key => $val) { $column_schema[] = sprintf("index %s (%s)", $key, '`' . implode($val, '`,`') . '`'); } } $schema = sprintf('create table `%s` (%s%s) %s;', $this->addQuotes($table_name), "\n", implode($column_schema, ",\n"), "ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci"); $output = $this->_query($schema); if (!$output) { return false; } }
function soo_search() { $soo_display_set = trim($this->soo_display); $q_sort = urlencode(trim(Context::get('q_sort'))); $query = urlencode(trim(Context::get('query'))); $soo_result_start = urlencode(Context::get('soo_result_start')); if (!$soo_display_set) { $soo_display_set = '20'; } if (!$soo_result_start) { $soo_result_start = '1'; } $uri = sprintf('http://gdata.youtube.com/feeds/api/videos?q=%s&start-index=%s&max-results=%s&orderby=%s&v=2&alt=rss', $query, $soo_result_start, $soo_display_set, $q_sort); $rss = ''; $rss = FileHandler::getRemoteResource($uri, null, 3, 'GET', 'application/xml'); $rss = preg_replace("/<\\?xml([.^>]*)\\?>/i", "", $rss); $oXmlParser = new XmlParser(); $xml_doc = $oXmlParser->parse($rss); $error_code = trim($xml_doc->errors->error->code->body); $error_message = trim($xml_doc->errors->error->internalreason->body); if ($error_message) { return new Object(-1, '::Youtube API Error::' . "\n" . $error_code . "\n" . $error_message); } $total_result_no = trim($xml_doc->rss->channel->{'opensearch:totalresults'}->body); $soo_result_start = trim($xml_doc->rss->channel->{'opensearch:startindex'}->body); $soo_search_display = trim($xml_doc->rss->channel->{'opensearch:itemsperpage'}->body); if ($total_result_no >= $soo_result_start + $soo_search_display) { $soo_next_page = $soo_result_start + $soo_display_set; } else { $soo_next_page = "1"; } if ($soo_result_start != '1') { $soo_before_page = $soo_result_start - $soo_display_set; } else { $soo_before_page = "1"; } $soo_results = $xml_doc->rss->channel->item; if (!is_array($soo_results)) { $soo_results = array($soo_results); } $soo_results_count = count($soo_results); $soo_result_start_end = trim($soo_result_start . ' - ' . ($soo_result_start + $soo_results_count - 1)); $soo_list = array(); for ($i = 0; $i < $soo_results_count; $i++) { $item = $soo_results[$i]; $item_images = $item->{'media:group'}->{'media:thumbnail'}; if (!is_array($item_images)) { $item_images = array($item_images); } $item_published = explode('T', $item->{'media:group'}->{'yt:uploaded'}->body); $item_updated = explode('T', $item->{'atom:updated'}->body); $item_second = $item->{'media:group'}->{'yt:duration'}->attrs->seconds % 60; $item_minute = intval($item->{'media:group'}->{'yt:duration'}->attrs->seconds / 60) % 60; $item_hour = intval(intval($item->{'media:group'}->{'yt:duration'}->attrs->seconds / 60) / 60); if (!is_array($item->{'media:group'}->{'media:content'})) { $item->{'media:group'}->{'media:content'} = array($item->{'media:group'}->{'media:content'}); } $soo_list[] = sprintf("%s,[[soo]],%s,[[soo]],%s,[[soo]],%s,[[soo]],%s,[[soo]],%s,[[soo]],%s,[[soo]],%s,[[soo]],%s,[[soo]],%s,[[soo]],%s,[[soo]],%s", trim($item->title->body), trim($item->author->body), trim($item->{'media:group'}->{'media:content'}[0]->attrs->url), trim($item_images[1]->attrs->url), trim($item_published[0]), trim($item_updated[0]), trim($item_hour), trim($item_minute), trim($item_second), trim($item->{'yt:statistics'}->attrs->viewcount), trim($item->link->body), cut_str(trim($item->title->body), 20)); } $this->add("total_result_no", $total_result_no); $this->add("total", htmlspecialchars($rss)); $this->add("soo_result_start", $soo_result_start); $this->add("soo_result_start_end", $soo_result_start_end); $this->add("result_list_bfpage", $soo_before_page); $this->add("result_list_nextpage", $soo_next_page); $this->add("result_list", implode("\n", $soo_list)); }
/** * Handle request arguments for XML RPC * * @return void */ private function _setXmlRpcArgument() { if (self::getRequestMethod() != 'XMLRPC') { return; } $xml = $GLOBALS['HTTP_RAW_POST_DATA']; if (Security::detectingXEE($xml)) { header("HTTP/1.0 400 Bad Request"); exit; } $oXml = new XmlParser(); $xml_obj = $oXml->parse($xml); $params = $xml_obj->methodcall->params; unset($params->node_name, $params->attrs, $params->body); if (!count(get_object_vars($params))) { return; } foreach ($params as $key => $val) { self::set($key, $this->_filterXmlVars($key, $val), TRUE); } }
/** * @brief springnote 페이지 목록 가져오기 **/ function getPages($query = null, $fulltext = true, $p_pageid = 0) { if ($query) { if ($this->domain) { $url = sprintf('%s&q=%s&fulltext=%d', $this->getUrl(), urlencode($query), $fulltext ? 1 : 0); } else { $url = sprintf('%s?q=%s&fulltext=%d', $this->getUrl(), urlencode($query), $fulltext ? 1 : 0); } } else { $url = $this->getUrl(); } $oReqeust = $this->getRequest($url); $oResponse = $oReqeust->sendRequest(); if (PEAR::isError($oResponse)) { return array(); } $body = $oReqeust->getResponseBody(); $oXmlParser = new XmlParser(); $xmldoc = $oXmlParser->parse($body); // 페이지 목록 정리 $output = array(); $pages = array(); $root = null; if (count($xmldoc->pages->page)) { // 일단 서버에서 보내주는 대로 목록을 받음 foreach ($xmldoc->pages->page as $val) { $obj = null; $obj->pageid = $val->identifier->body; $obj->title = $val->title->body; $obj->relation_is_part_of = $val->relation_is_part_of->body; $obj->date_modified = $val->date_modified->body; $obj->uri = $val->uri->body; $obj->source = trim($val->source->body); if ($query && !$obj->source) { continue; } $pages[$obj->pageid] = $obj; } // parent/chlid관계로 묶음 foreach ($pages as $pageid => $page) { if ($page->relation_is_part_of) { $pages[$page->relation_is_part_of]->child[] =& $pages[$pageid]; } else { $root->child[] =& $pages[$pageid]; } } if ($p_pageid) { $this->getNodes($root->child, $p_pageid, $root); } $pages = array(); $prev_pageid = 0; $this->arrangePages($pages, $root->child, 0, $prev_pageid); } return $pages; }
function dispTextyleToolExtraMenuInsert() { // set filter $menu_mid = Context::get('menu_mid'); if ($menu_mid) { $oModuleModel =& getModel('module'); $module_info = $oModuleModel->getModuleInfoByMid($menu_mid, $this->site_srl); if (!$module_info) { return new Object(-1, 'msg_invalid_request'); } $oWidgetController =& getController('widget'); $buff = trim($module_info->content); $oXmlParser = new XmlParser(); $xml_doc = $oXmlParser->parse(trim($buff)); $document_srl = $xml_doc->img->attrs->document_srl; $args->module_srl = $module_info->module_srl; $output = executeQuery('textyle.getExtraMenu', $args); if ($output->data) { $selected_extra_menu = $output->data; } } if ($selected_extra_menu) { Context::set('selected_extra_menu', $selected_extra_menu); Context::addJsFilter($this->module_path . 'tpl/filter', 'modify_extra_menu.xml'); } else { Context::addJsFilter($this->module_path . 'tpl/filter', 'insert_extra_menu.xml'); } $oDocumentModel =& getModel('document'); $material_srl = Context::get('material_srl'); if ($document_srl) { $oDocument = $oDocumentModel->getDocument($document_srl, false, false); } else { $document_srl = 0; $oDocument = $oDocumentModel->getDocument(0); if ($material_srl) { $oMaterialModel =& getModel('material'); $output = $oMaterialModel->getMaterial($material_srl); if ($output->data) { $material_content = $output->data[0]->content; Context::set('material_content', $material_content); } } } $oEditorModel =& getModel('editor'); $option->skin = $this->textyle->getPostEditorSkin(); $option->primary_key_name = 'document_srl'; $option->content_key_name = 'content'; $option->allow_fileupload = true; $option->enable_autosave = true; $option->enable_default_component = true; $option->enable_component = $option->skin == 'dreditor' ? false : true; $option->resizable = true; $option->height = 500; $option->content_font = $this->textyle->getFontFamily(); $option->content_font_size = $this->textyle->getFontSize(); $editor = $oEditorModel->getEditor($document_srl, $option); Context::set('editor', $editor); Context::set('editor_skin', $option->skin); if ($oDocument->get('module_srl') != $this->module_srl && !$document_srl) { Context::set('from_saved', true); } Context::set('oDocument', $oDocument); }
function _getRssItems($args) { // 날짜 형태 $DATE_FORMAT = $args->date_format ? $args->date_format : "Y-m-d H:i:s"; $buff = $this->requestFeedContents($args->rss_url); $encoding = preg_match("/<\\?xml.*encoding=\"(.+)\".*\\?>/i", $buff, $matches); if ($encoding && !preg_match("/UTF-8/i", $matches[1])) { $buff = Context::convertEncodingStr($buff); } $buff = preg_replace("/<\\?xml.*\\?>/i", "", $buff); $oXmlParser = new XmlParser(); $xml_doc = $oXmlParser->parse($buff); if ($xml_doc->rss) { $rss->title = $xml_doc->rss->channel->title->body; $rss->link = $xml_doc->rss->channel->link->body; $items = $xml_doc->rss->channel->item; if (!$items) { return; } if ($items && !is_array($items)) { $items = array($items); } $content_items = array(); foreach ($items as $key => $value) { if ($key >= $args->list_count * $args->page_count) { break; } unset($item); foreach ($value as $key2 => $value2) { if (is_array($value2)) { $value2 = array_shift($value2); } $item->{$key2} = $this->_getRssBody($value2); } $content_item = new contentItem($rss->title); $content_item->setContentsLink($rss->link); $content_item->setTitle($item->title); $content_item->setNickName(max($item->author, $item->{'dc:creator'})); //$content_item->setCategory($item->category); $item->description = preg_replace('!<a href=!is', '<a onclick="window.open(this.href);return false" href=', $item->description); $content_item->setContent($item->description); $content_item->setLink($item->link); $date = date('YmdHis', strtotime(max($item->pubdate, $item->pubDate, $item->{'dc:date'}))); $content_item->setRegdate($date); $content_items[] = $content_item; } } elseif ($xml_doc->{'rdf:rdf'}) { // rss1.0 지원 (Xml이 대소문자를 구분해야 하는데 XE의 XML파서가 전부 소문자로 바꾸는 바람에 생긴 case) by misol $rss->title = $xml_doc->{'rdf:rdf'}->channel->title->body; $rss->link = $xml_doc->{'rdf:rdf'}->channel->link->body; $items = $xml_doc->{'rdf:rdf'}->item; if (!$items) { return; } if ($items && !is_array($items)) { $items = array($items); } $content_items = array(); foreach ($items as $key => $value) { if ($key >= $args->list_count * $args->page_count) { break; } unset($item); foreach ($value as $key2 => $value2) { if (is_array($value2)) { $value2 = array_shift($value2); } $item->{$key2} = $this->_getRssBody($value2); } $content_item = new contentItem($rss->title); $content_item->setContentsLink($rss->link); $content_item->setTitle($item->title); $content_item->setNickName(max($item->author, $item->{'dc:creator'})); //$content_item->setCategory($item->category); $item->description = preg_replace('!<a href=!is', '<a onclick="window.open(this.href);return false" href=', $item->description); $content_item->setContent($item->description); $content_item->setLink($item->link); $date = date('YmdHis', strtotime(max($item->pubdate, $item->pubDate, $item->{'dc:date'}))); $content_item->setRegdate($date); $content_items[] = $content_item; } } elseif ($xml_doc->feed && $xml_doc->feed->attrs->xmlns == 'http://www.w3.org/2005/Atom') { // Atom 1.0 spec 지원 by misol $rss->title = $xml_doc->feed->title->body; $links = $xml_doc->feed->link; if (is_array($links)) { foreach ($links as $value) { if ($value->attrs->rel == 'alternate') { $rss->link = $value->attrs->href; break; } } } elseif ($links->attrs->rel == 'alternate') { $rss->link = $links->attrs->href; } $items = $xml_doc->feed->entry; if (!$items) { return; } if ($items && !is_array($items)) { $items = array($items); } $content_items = array(); foreach ($items as $key => $value) { if ($key >= $args->list_count * $args->page_count) { break; } unset($item); foreach ($value as $key2 => $value2) { if (is_array($value2)) { $value2 = array_shift($value2); } $item->{$key2} = $this->_getRssBody($value2); } $content_item = new contentItem($rss->title); $links = $value->link; if (is_array($links)) { foreach ($links as $val) { if ($val->attrs->rel == 'alternate') { $item->link = $val->attrs->href; break; } } } elseif ($links->attrs->rel == 'alternate') { $item->link = $links->attrs->href; } $content_item->setContentsLink($rss->link); if ($item->title) { if (!preg_match("/html/i", $value->title->attrs->type)) { $item->title = $value->title->body; } } $content_item->setTitle($item->title); $content_item->setNickName(max($item->author, $item->{'dc:creator'})); $content_item->setAuthorSite($value->author->uri->body); //$content_item->setCategory($item->category); $item->description = preg_replace('!<a href=!is', '<a onclick="window.open(this.href);return false" href=', $item->content); if ($item->description) { if (!preg_match("/html/i", $value->content->attrs->type)) { $item->description = htmlspecialchars($item->description); } } if (!$item->description) { $item->description = $item->summary; if ($item->description) { if (!preg_match("/html/i", $value->summary->attrs->type)) { $item->description = htmlspecialchars($item->description); } } } $content_item->setContent($item->description); $content_item->setLink($item->link); $date = date('YmdHis', strtotime(max($item->published, $item->updated, $item->{'dc:date'}))); $content_item->setRegdate($date); $content_items[] = $content_item; } } return $content_items; }
/** * @brief uri에 해당되는 xml파일을 파싱한다 * @param $uri 파싱할 xml 파일 * @param $headers HTTP 프로토콜 헤더(default = null) * @return 파싱된 데이터 **/ function xmlAPIRequest($uri, $headers = null) { $xml = ''; $xml = FileHandler::getRemoteResource($uri, null, 3, 'GET', 'application/xml', $headers); $xml = preg_replace("/<\\?xml([.^>]*)\\?>/i", "", $xml); $oXmlParser = new XmlParser(); $xml_doc = $oXmlParser->parse($xml); return $xml_doc; }
/** * Create table by using the schema xml * * type : number, varchar, tinytext, text, bigtext, char, date, \n * opt : notnull, default, size\n * index : primary key, index, unique\n * @param string $xml_doc xml schema contents * @return void|object */ function _createTable($xml_doc) { // Parse XML $oXml = new XmlParser(); $xml_obj = $oXml->parse($xml_doc); // Get table name and column list $table_name = $xml_obj->table->attrs->name; if ($this->isTableExists($table_name)) { return; } if (!is_array($xml_obj->table->column)) { $columns[] = $xml_obj->table->column; } else { $columns = $xml_obj->table->column; } // Initialize the list of columns and indexes $column_schema = array(); $primary_list = array(); $unique_list = array(); $index_list = array(); // Process columns foreach ($columns as $column) { $name = $column->attrs->name; $type = $column->attrs->type; $size = $column->attrs->size; $notnull = $column->attrs->notnull; $primary_key = $column->attrs->primary_key; $index = $column->attrs->index; $unique = $column->attrs->unique; $default = $column->attrs->default; $auto_increment = $column->attrs->auto_increment; $column_charset = ''; $index_size_limit = ''; // MySQL only supports 767 bytes for indexed columns. // This is 191 characters in utf8mb4 and 255 characters in utf8. if ($column->attrs->utf8mb4 === 'false' && stripos($type, 'char') !== false) { $column_charset = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci'; } elseif (($primary_key || $unique || $index) && stripos($type, 'char') !== false) { if ($size > 255 || $size > 191 && $this->charset === 'utf8mb4') { if ($primary_key || $unique) { $size = $this->charset === 'utf8mb4' ? 191 : 255; } else { $index_size_limit = '(' . ($this->charset === 'utf8mb4' ? 191 : 255) . ')'; } } } $column_schema[$name] = sprintf('`%s` %s%s %s %s %s %s', $name, $this->column_type[$type], $size ? "({$size})" : '', $column_charset, isset($default) ? "DEFAULT '{$default}'" : '', $notnull ? 'NOT NULL' : '', $auto_increment ? 'AUTO_INCREMENT' : ''); if ($primary_key) { $primary_list[] = "`{$name}`"; } else { if ($unique) { $unique_list[$unique][] = "`{$name}`" . $index_size_limit; } else { if ($index) { $index_list[$index][] = "`{$name}`" . $index_size_limit; } } } } // Process // Process indexes if (count($primary_list)) { $column_schema[] = sprintf("PRIMARY KEY (%s)", implode($primary_list, ', ')); } if (count($unique_list)) { foreach ($unique_list as $key => $val) { $column_schema[] = sprintf("UNIQUE %s (%s)", $key, implode($val, ', ')); } } if (count($index_list)) { foreach ($index_list as $key => $val) { $column_schema[] = sprintf("INDEX %s (%s)", $key, implode($val, ', ')); } } // Generate table schema $engine = stripos(get_class($this), 'innodb') === false ? 'MYISAM' : 'INNODB'; $charset = $this->charset ?: 'utf8'; $collation = $charset . '_unicode_ci'; $schema = sprintf("CREATE TABLE `%s` (%s) %s", $this->addQuotes($this->prefix . $table_name), "\n" . implode($column_schema, ",\n") . "\n", "ENGINE = {$engine} CHARACTER SET {$charset} COLLATE {$collation}"); // Execute the complete query $output = $this->_query($schema); if ($output) { return true; } else { return false; } }
/** * @brief schema xml을 이용하여 create table query생성 * * type : number, varchar, text, char, date, \n * opt : notnull, default, size\n * index : primary key, index, unique\n **/ function _createTable($xml_doc) { // xml parsing $oXml = new XmlParser(); $xml_obj = $oXml->parse($xml_doc); // 테이블 생성 schema 작성 $table_name = $xml_obj->table->attrs->name; if ($this->isTableExists($table_name)) { return; } if ($table_name == 'sequence') { $table_name = $this->prefix . $table_name; $query = sprintf('create table %s ( sequence int identity(1,1), seq int )', $table_name); return $this->_query($query); } else { $table_name = $this->prefix . $table_name; if (!is_array($xml_obj->table->column)) { $columns[] = $xml_obj->table->column; } else { $columns = $xml_obj->table->column; } foreach ($columns as $column) { $name = $column->attrs->name; $type = $column->attrs->type; $size = $column->attrs->size; $notnull = $column->attrs->notnull; $primary_key = $column->attrs->primary_key; $index = $column->attrs->index; $unique = $column->attrs->unique; $default = $column->attrs->default; $auto_increment = $column->attrs->auto_increment; $column_schema[] = sprintf('[%s] %s%s %s %s %s %s', $name, $this->column_type[$type], !in_array($type, array('number', 'text')) && $size ? '(' . $size . ')' : '', $primary_key ? 'primary key' : '', $default ? "default '" . $default . "'" : '', $notnull ? 'not null' : 'null', $auto_increment ? 'identity(1,1)' : ''); if ($unique) { $unique_list[$unique][] = $name; } else { if ($index) { $index_list[$index][] = $name; } } } $schema = sprintf('create table [%s] (xe_seq int identity(1,1),%s%s)', $this->addQuotes($table_name), "\n", implode($column_schema, ",\n")); $output = $this->_query($schema); if (!$output) { return false; } if (count($unique_list)) { foreach ($unique_list as $key => $val) { $query = sprintf("create unique index %s on %s (%s);", $key, $table_name, '[' . implode('],[', $val) . ']'); $this->_query($query); } } if (count($index_list)) { foreach ($index_list as $key => $val) { $query = sprintf("create index %s on %s (%s);", $key, $table_name, '[' . implode('],[', $val) . ']'); $this->_query($query); } } return true; } }
/** * @brief schema xml을 이용하여 create table query생성 * * type : number, varchar, text, char, date, \n * opt : notnull, default, size\n * index : primary key, index, unique\n **/ function _createTable($xml_doc) { // xml parsing $oXml = new XmlParser(); $xml_obj = $oXml->parse($xml_doc); // 테이블 생성 schema 작성 $table_name = $xml_obj->table->attrs->name; if ($table_name == 'sequence') { $query = sprintf('create sequence %s', $this->prefix . $table_name); return $this->_query($query); } if ($this->isTableExists($table_name)) { return; } $table_name = $this->prefix . $table_name; if (!is_array($xml_obj->table->column)) { $columns[] = $xml_obj->table->column; } else { $columns = $xml_obj->table->column; } foreach ($columns as $column) { $name = $column->attrs->name; $type = $column->attrs->type; $size = $column->attrs->size; $notnull = $column->attrs->notnull; $primary_key = $column->attrs->primary_key; $index = $column->attrs->index; $unique = $column->attrs->unique; $default = $column->attrs->default; $auto_increment = $column->attrs->auto_increment; if ($type == "bignumber" || $type == "number") { $size = 0; } $column_schema[] = sprintf('%s %s%s %s %s', $name, $this->column_type[$type], $size ? '(' . $size . ')' : '', $default ? "default '" . $default . "'" : '', $notnull ? 'not null' : ''); if ($primary_key) { $primary_list[] = $name; } else { if ($unique) { $unique_list[$unique][] = $name; } else { if ($index) { $index_list[$index][] = $name; } } } } if (count($primary_list)) { $column_schema[] = sprintf("primary key (%s)", implode($primary_list, ',')); } if (count($unique_list)) { foreach ($unique_list as $key => $val) { $column_schema[] = sprintf("unique (%s)", implode($val, ',')); } } $schema = sprintf('create table %s (%s%s);', $this->addQuotes($table_name), "\n", implode($column_schema, ",\n")); $output = $this->_query($schema); if (count($index_list)) { foreach ($index_list as $key => $val) { if (!$this->isIndexExists($table_name, $key)) { $this->addIndex($table_name, $key, $val); } } } if (!$output) { return false; } }