Ejemplo n.º 1
0
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;
        }
    }
}
Ejemplo n.º 2
0
 /**
  * @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;
 }
Ejemplo n.º 3
0
 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']));
 }
Ejemplo n.º 4
0
 /**
  * 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();
 }
Ejemplo n.º 5
0
 /**
  * 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;
     }
 }
Ejemplo n.º 6
0
 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;
 }
Ejemplo n.º 7
0
 /**
  * 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;
     }
 }
Ejemplo n.º 9
0
 /**
  * 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;
 }
Ejemplo n.º 10
0
 /**
  * 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;
 }
Ejemplo n.º 11
0
 /**
  * @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));
 }
Ejemplo n.º 12
0
 /**
  * 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();
 }
Ejemplo n.º 13
0
 /**
  * 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;
 }
Ejemplo n.º 14
0
 /**
  * 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);
 }
Ejemplo n.º 15
0
 /**
  * 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('&amp;', '&lt;', '&gt;'), $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;
 }
Ejemplo n.º 17
0
 /**
  * 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();
 }
Ejemplo n.º 18
0
 /**
  * @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;
 }
Ejemplo n.º 20
0
 /**
  * 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;
 }
Ejemplo n.º 21
0
 /**
  * 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));
 }
Ejemplo n.º 23
0
 /**
  * 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);
     }
 }
Ejemplo n.º 24
0
 /**
  * @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;
 }
Ejemplo n.º 25
0
 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);
 }
Ejemplo n.º 26
0
 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;
 }
Ejemplo n.º 27
0
 /**
  * @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;
 }
Ejemplo n.º 28
0
 /**
  * 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;
     }
 }
Ejemplo n.º 29
0
 /**
  * @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;
     }
 }
Ejemplo n.º 30
0
 /**
  * @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;
     }
 }