当前位置: 首页>>代码示例>>PHP>>正文


PHP c2cTools::log方法代码示例

本文整理汇总了PHP中c2cTools::log方法的典型用法代码示例。如果您正苦于以下问题:PHP c2cTools::log方法的具体用法?PHP c2cTools::log怎么用?PHP c2cTools::log使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在c2cTools的用法示例。


在下文中一共展示了c2cTools::log方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: isInGroup

 protected function isInGroup($group_name)
 {
     $nb = Doctrine_Query::create()->select('COUNT(ug.group_id) nb')->from('UserGroup ug')->where('ug.group_id = (SELECT g.id FROM Group g WHERE g.name = ?)
                            AND ug.user_id = ?')->limit(1)->execute(array($group_name, $this->getId()))->getFirst()->nb;
     c2cTools::log('{user->isInGroup()} group name : ' . $group_name . 'user id : ' . $this->getId() . 'result : ' . $nb);
     return $nb > 0 ? true : false;
 }
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:7,代码来源:User.class.php

示例2: moveAll

 /**
  * Move given image and its resized versions.
  */
 public static function moveAll($file, $pathFrom, $pathTo)
 {
     c2cTools::log("moving {$file} from {$pathFrom} to {$pathTo}");
     $types = sfConfig::get('app_images_types', array());
     list($file_name, $file_ext) = self::getFileNameParts($file);
     // move original
     $success = rename($pathFrom . DIRECTORY_SEPARATOR . $file, $pathTo . DIRECTORY_SEPARATOR . $file);
     // move thumbs
     foreach ($types as $type) {
         $success = $success && rename($pathFrom . DIRECTORY_SEPARATOR . $file_name . $type['suffix'] . $file_ext, $pathTo . DIRECTORY_SEPARATOR . $file_name . $type['suffix'] . $file_ext);
     }
     // move svg if any
     if (file_exists($pathFrom . DIRECTORY_SEPARATOR . $file_name . '.svg')) {
         $success = $success && rename($pathFrom . DIRECTORY_SEPARATOR . $file_name . '.svg', $pathTo . DIRECTORY_SEPARATOR . $file_name . '.svg');
     }
     return $success;
 }
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:20,代码来源:Images.class.php

示例3: subscribe

 /**
  * Adds given address to given mailing list.
  * @param string listname
  * @param string email
  * @return boolean status (true=success, false=failure)
  */
 public static function subscribe($listname, $email)
 {
     $conn = sfDoctrine::Connection();
     try {
         $conn->beginTransaction();
         $sympa = new Sympa();
         $sympa->list_subscriber = $listname;
         $sympa->user_subscriber = $email;
         $sympa->save();
         $conn->commit();
         return true;
     } catch (Exception $e) {
         // Subscription failed! For instance because email address was already registered.
         $conn->rollback();
         c2cTools::log("Failed adding address {$email} to list {$listname}: " . $e->getMessage());
         return false;
     }
 }
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:24,代码来源:Sympa.class.php

示例4: execute

 public function execute($filterChain)
 {
     $context = $this->getContext();
     $session_user = $context->getUser();
     $cookie_name = sfConfig::get('app_remember_key_cookie_name', 'c2corg_remember');
     $cookie_value = $context->getRequest()->getCookie($cookie_name);
     if ($this->isFirstCall() && !$session_user->isConnected() && !is_null($cookie_value)) {
         c2cTools::log('{rememberFilter} user has a cookie, trying to auto login');
         $remember_key = RememberKey::getKey($cookie_value);
         if ($remember_key) {
             c2cTools::log('{rememberFilter} user found from his cookie');
             $user = $remember_key->getUser();
             if ($user->exists()) {
                 $session_user->signIn($user->get('private_data')->getLoginName(), $user->get('private_data')->getPassword(), true, true);
             }
             // User has signed in, and is now correctly in symfony session. However, forums
             // and several personnalization functions rely on cookies, that will be sent with the request,
             // but are not yet 'available' from javascript if the value expired from previous sessions (they will be on next page)
             // easiest solution is to force the browser to reload the current page
             // we only do this for GET requests
             $request = $this->getContext()->getRequest();
             if ($request->getMethod() == sfRequest::GET) {
                 // symfony 1.0 getUriPrefix is not working well with https on haproxy
                 // it then tries to redirect to https://site.org:80, which is wrong
                 $proto = $request->isSecure() ? 'https' : 'http';
                 $request_uri = $proto . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
                 $this->getContext()->getController()->redirect($request_uri);
                 exit;
             }
         } else {
             // delete cookie value in client so that no more requests are made to the db
             sfContext::getInstance()->getResponse()->setCookie($cookie_name, '');
             // log this
             c2cTools::log('{rememberFilter} user has unknown remember key!');
             c2cActions::statsdIncrement('bad_remember_cookie', 'symfony.' . sfConfig::get('sf_environment') . '.users.');
         }
     }
     $filterChain->execute();
 }
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:39,代码来源:rememberFilter.class.php

示例5: filterOnRegions

 protected static function filterOnRegions($q, $areas = null, $alias = 'g2')
 {
     if (is_null($areas)) {
         $areas = c2cPersonalization::getInstance()->getPlacesFilter();
     }
     if (!empty($areas)) {
         $q->leftJoin('m.associations l')->leftJoin('l.MainGeoassociations ' . $alias)->addWhere(self::getAreasQueryString($areas, $alias), $areas);
         c2cTools::log('filtering on regions');
     }
 }
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:10,代码来源:Image.class.php

示例6: executeFilterredirect

 public function executeFilterredirect()
 {
     if ($this->getRequestParameter('cond') || $this->getRequestParameter('format')) {
         $action = 'conditions';
     } else {
         $action = 'list';
     }
     $route = '/' . $this->getModuleName() . '/' . $action;
     if ($this->getRequest()->getMethod() == sfRequest::POST) {
         $criteria = array_merge($this->filterSearchParameters(), $this->filterSortParameters());
         if ($criteria) {
             $route .= '?' . implode('&', $criteria);
         }
     }
     c2cTools::log("redirecting to {$route}");
     $this->redirect($route);
 }
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:17,代码来源:actions.class.php

示例7: doSaveWithValues

 public function doSaveWithValues($main_id, $linked_id, $type, $user_id)
 {
     $conn = sfDoctrine::Connection();
     try {
         $conn->beginTransaction();
         // we create the association:
         $this->main_id = $main_id;
         $this->linked_id = $linked_id;
         $this->type = $type;
         $this->save();
         // and we log this:
         $al = new AssociationLog();
         $al->main_id = $main_id;
         $al->linked_id = $linked_id;
         $al->type = $type;
         $al->user_id = $user_id;
         $al->is_creation = true;
         $al->save();
         $conn->commit();
         // send an email to moderators if a picture is associated to a book
         if ($type == 'bi') {
             try {
                 // retrieve moderators email
                 $moderator_id = sfConfig::get('app_moderator_user_id');
                 // currently send to topo-fr only
                 $conn->beginTransaction();
                 $rows = $conn->standaloneQuery('SELECT email FROM app_users_private_data d WHERE id = ' . $moderator_id)->fetchAll();
                 $conn->commit();
                 $email_recipient = $rows[0]['email'];
                 $mail = new sfMail();
                 $mail->setCharset('utf-8');
                 // definition of the required parameters
                 $mail->setSender(sfConfig::get('app_outgoing_emails_sender'));
                 $mail->setFrom(sfConfig::get('app_outgoing_emails_from'));
                 $mail->addReplyTo(sfConfig::get('app_outgoing_emails_reply_to'));
                 $mail->addAddress($email_recipient);
                 $mail->setSubject('New image associated to book');
                 $mail->setContentType('text/html');
                 $server = $_SERVER['SERVER_NAME'];
                 $body = "<p>A <a href=\"http://{$server}/images/{$linked_id}\">new image</a> has been associated to <a href=\"http://{$server}/books/{$main_id}\">book {$main_id}</a>.</p>" . "<p>The image may require a copyright license. If so, please ensure that:</p>" . "<ul>" . "<li>the owner is correctly acknowledged in the author field;</li>" . "<li>the image is not too big (max 800px width or height).</li>" . "</ul>";
                 $mail->setBody($body);
                 // send the email
                 $mail->send();
             } catch (exception $e) {
                 $conn->rollback();
                 c2cTools::log("Association::doSaveWithValues({$main_id}, {$linked_id}, {$type}, {$user_id}) failed sending email for image associated to book");
             }
         }
         return true;
     } catch (exception $e) {
         $conn->rollback();
         c2cTools::log("Association::doSaveWithValues({$main_id}, {$linked_id}, {$type}, {$user_id}) failed - rollback");
         return false;
     }
 }
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:55,代码来源:Association.class.php

示例8: refreshGeoAssociations

 /**
  * Overriddes the one in parent class 
  * this is because we sometimes have to do things when centroid coordinates have moved.
  * TODO hutsActions::endEdit() should be factorized with this..
  */
 protected function refreshGeoAssociations($id)
 {
     // don't refresh associated doc if summit type is "raid"
     if ($this->document->get('summit_type') == 5) {
         return;
     }
     c2cTools::log("Entering refreshGeoAssociations for routes linked with summit {$id}");
     $associated_routes = Association::findAllAssociatedDocs($id, array('id', 'geom_wkt'), 'sr');
     if (count($associated_routes)) {
         $geoassociations = GeoAssociation::findAllAssociations($id, null, 'main');
         // we create new associations :
         //  (and delete old associations before creating the new ones)
         //  (and do not create outings-maps associations)
         foreach ($associated_routes as $route) {
             $i = $route['id'];
             if (!$route['geom_wkt']) {
                 // replicate geoassoces from doc $id to outing $i and delete previous ones
                 // (because there might be geoassociations created by this same process)
                 $nb_created = GeoAssociation::replicateGeoAssociations($geoassociations, $i, true, true);
                 c2cTools::log("created {$nb_created} geo associations for route N° {$i}");
                 $this->clearCache('routes', $i, false, 'view');
                 $associated_outings = Association::findAllAssociatedDocs($i, array('id', 'geom_wkt'), 'ro');
                 if (count($associated_outings)) {
                     $geoassociations2 = GeoAssociation::findAllAssociations($i, null, 'main');
                     // we create new associations :
                     //  (and delete old associations before creating the new ones)
                     //  (and do not create outings-maps associations)
                     foreach ($associated_outings as $outing) {
                         $j = $outing['id'];
                         if (!$outing['geom_wkt']) {
                             // replicate geoassoces from doc $id to outing $i and delete previous ones
                             // (because there might be geoassociations created by this same process)
                             $nb_created = GeoAssociation::replicateGeoAssociations($geoassociations2, $j, true, false);
                             c2cTools::log("created {$nb_created} geo associations for outing N° {$j}");
                             $this->clearCache('outings', $j, false, 'view');
                         }
                     }
                 }
             }
         }
     }
 }
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:47,代码来源:actions.class.php

示例9: clearCommentCache

 /**
  * Clear cache for view / history , diff and list after a new comment has been posted
  * rq: comment page is not cached
  */
 public static function clearCommentCache($id, $lang = null, $module = '*')
 {
     $cache_dir = sfConfig::get('sf_root_cache_dir') . '/frontend/*/template/*/*';
     $cache_dir .= sfConfig::get('sf_no_script_name') ? '/' : '/*/';
     $items = array("{$module}/history/id/{$id}/", "{$module}/view/id/{$id}/", "{$module}/diff/id/{$id}/");
     foreach ($items as $item) {
         $item .= $lang == null ? '*' : "lang/{$lang}/*";
         c2cTools::log('{cache} removing : ' . $cache_dir . $item);
         sfToolkit::clearGlob($cache_dir . $item);
     }
     // Clear cache for list :
     $item = "{$module}/list/*";
     c2cTools::log('{cache} removing : ' . $cache_dir . $item);
     sfToolkit::clearGlob($cache_dir . $item);
 }
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:19,代码来源:c2cTools.class.php

示例10: refreshGeoAssociations

 /**
  * Overriddes the one in parent class 
  * this is because we sometimes have to do things when centroid coordinates have moved.
  */
 protected function refreshGeoAssociations($id)
 {
     c2cTools::log("Entering refreshGeoAssociations for outings linked with route {$id}");
     $associated_outings = Association::findAllAssociatedDocs($id, array('id', 'geom_wkt'), 'ro');
     if (count($associated_outings)) {
         $geoassociations = GeoAssociation::findAllAssociations($id, null, 'main');
         // we create new associations :
         //  (and delete old associations before creating the new ones)
         //  (and do not create outings-maps associations)
         foreach ($associated_outings as $outing) {
             $i = $outing['id'];
             if (!$outing['geom_wkt']) {
                 // replicate geoassoces from doc $id to outing $i and delete previous ones
                 // (because there might be geoassociations created by this same process)
                 // and we do not replicate map associations to outings
                 $nb_created = GeoAssociation::replicateGeoAssociations($geoassociations, $i, true, false);
                 c2cTools::log("created {$nb_created} geo associations for outing N° {$i}");
                 $this->clearCache('outings', $i, false, 'view');
             }
         }
     }
 }
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:26,代码来源:actions.class.php

示例11: endEdit

 protected function endEdit()
 {
     if ($this->success) {
         // before redirecting view, we check if either the name, elevation or geolocalization of the hut
         // has changed and pass on those changes to the 'ghost summit'
         $hut_doc = $this->document;
         $summit_doc = $hut_doc->getGhostSummit();
         // check wether elevation, name or geometry of the hut has changed, and
         // change accordingly the ghost summit if that's the case
         if ($summit_doc != false) {
             $geom_changed = $hut_doc->get('lat') !== $summit_doc->get('lat') || $hut_doc->get('lon') !== $summit_doc->get('lon');
             if ($hut_doc->get('elevation') !== $summit_doc->get('elevation') || $hut_doc->get('name') !== $summit_doc->get('name') || $geom_changed) {
                 c2cTools::log('Updating ghost summit of hut');
                 $id = $summit_doc->get('id');
                 $conn = sfDoctrine::Connection();
                 try {
                     $conn->beginTransaction();
                     $history_metadata = new HistoryMetadata();
                     $history_metadata->set('is_minor', false);
                     $history_metadata->set('user_id', $this->getUser()->getId());
                     $history_metadata->setComment('Synchronize summit to associated hut');
                     $history_metadata->save();
                     $summit_doc->set('name', $hut_doc->get('name'));
                     $summit_doc->set('lon', $hut_doc->get('lon'));
                     $summit_doc->set('lat', $hut_doc->get('lat'));
                     $summit_doc->set('elevation', $hut_doc->get('elevation'));
                     $summit_doc->save();
                     $conn->commit();
                     if ($geom_changed) {
                         // TODO idea here is to call the refreshGeoAssociations
                         // from summitsActions but we can't call it. In order not to
                         // change the whole mechanism for refreshAssociations, we kinda copy paste
                         // the function here, but this should be improved / factorized
                         // refer to it to understand what is done here
                         $associated_routes = Association::findAllAssociatedDocs($id, array('id', 'geom_wkt'), 'sr');
                         if (count($associated_routes)) {
                             $geoassociations = GeoAssociation::findAllAssociations($id, null, 'main');
                             foreach ($associated_routes as $route) {
                                 $i = $route['id'];
                                 if (!$route['geom_wkt']) {
                                     $nb_created = GeoAssociation::replicateGeoAssociations($geoassociations, $i, true, true);
                                     $this->clearCache('routes', $i, false, 'view');
                                     $associated_outings = Association::findAllAssociatedDocs($i, array('id', 'geom_wkt'), 'ro');
                                     if (count($associated_outings)) {
                                         $geoassociations2 = GeoAssociation::findAllAssociations($i, null, 'main');
                                         foreach ($associated_outings as $outing) {
                                             $j = $outing['id'];
                                             if (!$outing['geom_wkt']) {
                                                 $nb_created = GeoAssociation::replicateGeoAssociations($geoassociations2, $j, true, false);
                                                 c2cTools::log("created {$nb_created} geo associations for outing N° {$j}");
                                                 $this->clearCache('outings', $j, false, 'view');
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 } catch (Exception $e) {
                     $conn->rollback();
                     // TODO It is ok to signal the failure, but anyway, the hut doc has been updated
                     // so there is much room for improvement here :)
                     return $this->setErrorAndRedirect("Failed to synchronize summit", '@document_edit?module=huts&id=' . $hut_doc->getId() . '&lang=' . $hut_doc->getCulture());
                 }
             }
         }
         parent::endEdit();
         // redirect to document view
     }
 }
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:70,代码来源:actions.class.php

示例12: removeGloballyFromCache

 protected function removeGloballyFromCache($items)
 {
     $cache_dir = sfConfig::get('sf_root_cache_dir') . '/frontend/*/template/*/*';
     $cache_dir .= sfConfig::get('sf_no_script_name') ? '/' : '/*/';
     foreach ($items as $item) {
         c2cTools::log('{cache} removing : ' . $cache_dir . $item);
         sfToolkit::clearGlob($cache_dir . $item);
     }
 }
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:9,代码来源:c2cActions.class.php

示例13: doMerge

 protected function doMerge($from_id, $document_from, $to_id, $document_to)
 {
     // fetch associated documents before doing the merging as associations will be transferred
     $associations = Association::findAllAssociations($from_id);
     parent::doMerge($from_id, $document_from, $to_id, $document_to);
     // search documents in which from is inserted, and replace the insertion with to
     foreach ($associations as $a) {
         $check_id = $a['main_id'] == $from_id ? $a['linked_id'] : ($check_id = $a['main_id']);
         $check_model = c2cTools::Letter2Model(substr($a['type'], 0, 1));
         $check_module = c2cTools::Model2Module($check_model);
         $check_doc = Document::find($check_model, $check_id);
         $fields = sfConfig::get('mod_images_bbcode_fields_' . $check_module);
         // clear linked doc cache
         $this->clearCache($check_module, $check_id);
         $languages = $check_doc->getLanguages();
         foreach ($languages as $language) {
             $modified = false;
             $conn = sfDoctrine::Connection();
             $conn->beginTransaction();
             $check_doc->setCulture($language);
             foreach ($fields as $field) {
                 $text = $check_doc[$field];
                 $edited = preg_replace('#(\\[img=\\s*)' . $from_id . '([\\w\\s]*\\].*?\\[/img\\])\\n?#is', '${1}' . $to_id . '${2}', $text);
                 $edited = preg_replace('#(\\[img=\\s*)' . $from_id . '([\\w\\s]*\\/\\])\\n?#is', '${1}' . $to_id . '${2}', $edited);
                 if ($edited != $text) {
                     $modified = true;
                     $check_doc->set($field, $edited);
                 }
             }
             if ($modified) {
                 $history_metadata = new HistoryMetadata();
                 $history_metadata->setComment('Updated image tags');
                 $history_metadata->set('is_minor', true);
                 $history_metadata->set('user_id', sfConfig::get('app_moderator_user_id'));
                 $history_metadata->save();
                 c2cTools::log('After merge of image ' . $from_id . ' into ' . $to_id . ': update image tag for ' . strtolower($check_model) . ' ' . $check_id . ' (' . $language . ')');
                 $check_doc->save();
                 $conn->commit();
             } else {
                 $conn->rollback();
             }
         }
     }
     // clear images lists and whatsnew cache
     $this->clearCache('images', 0, true);
 }
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:46,代码来源:actions.class.php

示例14: buildStringCondition

 public static function buildStringCondition(&$conditions, &$values, $field, $param, $model, $join = array(null, null))
 {
     $has_result = false;
     $has_id = false;
     $nb_result = 0;
     $join_result = null;
     $param = urldecode($param);
     if (strlen($param) > 2) {
         if (sfConfig::get('app_solr_enable') == true) {
             /* init solr 
              */
             $max_row = sfConfig::get('app_solr_maxrow');
             $options = array('hostname' => sfConfig::get('app_solr_host'), 'port' => sfConfig::get('app_solr_port'), 'path' => sfConfig::get('app_solr_path'), 'timeout' => sfConfig::get('app_solr_timeout'));
             $client = new SolrClient($options);
             try {
                 // 1st search : exact search
                 $query_solr_exact = new SolrQuery();
                 $query_solr_exact->setQuery('*' . $param . '*');
                 $query_solr_exact->setRows($max_row);
                 if ($model == 'User' || $model == 'UserPrivateData') {
                     if (!sfContext::getInstance()->getUser()->isConnected()) {
                         $query_solr_exact->addFilterQuery('user_private_public:true');
                     }
                 }
                 $query_solr_exact->addFilterQuery('module:' . strtolower($model) . 's');
                 $query_solr_exact->addField('name')->addField('module')->addField('id_doc');
                 $res_exact = $client->query($query_solr_exact)->getResponse();
                 if ($res_exact['response']['numFound'] > 0) {
                     for ($i = 0; $i < $res_exact['response']['numFound']; $i++) {
                         $ids_tmp[]['id'] = $res_exact['response']['docs'][$i]['id_doc'];
                     }
                 } else {
                     // No exact serach ... so try fuzzy search
                     $query_solr = new SolrQuery();
                     // Fuzzy search word > 3 letters
                     $query_words = explode(" ", $param);
                     foreach ($query_words as &$word) {
                         switch (true) {
                             case in_array(strlen($word), range(0, 3)):
                                 $word = $word;
                                 break;
                             case in_array(strlen($word), range(4, 5)):
                                 $word = $word . '~1';
                                 break;
                             case in_array(strlen($word), range(6, 7)):
                                 $word = $word . '~2';
                                 break;
                             case in_array(strlen($word), range(8, 9)):
                                 $word = $word . '~3';
                                 break;
                             default:
                                 $word = $word . '~4';
                                 break;
                         }
                     }
                     $query_search_fuzzy = implode(' ', $query_words);
                     $query_search = "({$param})^20 OR ({$query_search_fuzzy})^5";
                     c2cTools::log(" solr request : " . $query_search);
                     $query_solr->setQuery($query_search);
                     $query_solr->setRows($max_row);
                     if ($model == 'User' || $model == 'UserPrivateData') {
                         if (!sfContext::getInstance()->getUser()->isConnected()) {
                             $query_solr->addFilterQuery('user_private_public:true');
                         }
                     }
                     $query_solr->addFilterQuery('module:' . strtolower($model) . 's');
                     $query_solr->addField('name')->addField('module')->addField('id_doc');
                     $res = $client->query($query_solr)->getResponse();
                     for ($i = 0; $i < $res['response']['numFound']; $i++) {
                         $ids_tmp[]['id'] = $res['response']['docs'][$i]['id_doc'];
                     }
                 }
             } catch (Exception $e) {
                 c2cTools::log(" exception solr : " . $e);
                 $ids_tmp = self::idSearchByName($param, $model);
             }
         } else {
             $ids_tmp = self::idSearchByName($param, $model);
         }
         if (count($ids_tmp)) {
             $ids = array();
             foreach ($ids_tmp as $id) {
                 $ids[] = $id['id'];
             }
             $conditions[] = $field[0] . ' IN (' . implode(',', $ids) . ')';
             $has_result = true;
             $nb_result = count($ids);
             $join_result = $join[0];
             if (!$join[0]) {
                 $has_id = true;
             }
         }
     } else {
         $conditions[] = $field[1] . ' LIKE make_search_name(?)||\'%\'';
         $values[] = $param;
         $has_result = true;
         if ($join[1]) {
             $join_result = $join[1];
         }
     }
//.........这里部分代码省略.........
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:101,代码来源:BaseDocument.class.php

示例15: kml2wkt

 /**
  * kml2wkt does what its name implies : 
  * it takes a kml file, parses it for linestrings and returns an equivalent WKT LINESTRING
  *
  * The returned WKT can be 2, 3 or 4D. 
  * If does not really handle 4D parsing (beyond scope IMO) => KML import is restricted to routes (outings will only support GPX input)
  * If $dim = 4, then time field will be zero-padded.
  */
 public static function kml2wkt($path, $dim = 3)
 {
     // FIXME: document structure is very user customizable, and thus this function is not very robust ...
     // a solution would be to extract points linked to a linestring (if these points are present), and to sort them by date to build the linestring.
     $xml = c2cTools::simplexmlLoadFile($path);
     // TODO: handle files with Document>NetworkLink>Url>href : wget content... (mymaps generates these ones)
     // TODO: handle files with one waypoint for point update ?
     // TODO : handle multilines geometries ?
     $i = 0;
     $wkta = array();
     if ($pm = $xml->Document->Placemark) {
         // this is a simple kml
         // (for instance, one made with google "my maps")
         // in which these is no folder.
         c2cTools::log("ParseGeo::kml2wkt({$path}, {$dim}) with xml->Document->Placemark");
         return 'LINESTRING(' . self::getKmlCoordinates($pm->LineString->coordinates, $dim) . ')';
     } elseif ($geom_folders = $xml->Document->Folder) {
         // this is a "complex" KML with several folders (typical output of gpsbabel from gpx)
         $trk_coords = array();
         // kml file may contain three geom folders : Waypoints, Tracks and Routes
         foreach ($geom_folders as $folder) {
             // we're just looking for tracks :
             if ($folder->name == 'Tracks') {
                 // there might be subfolders if gps signal has been interrupted
                 // we merge these folders together to build a single track.
                 foreach ($folder->Folder as $track) {
                     $trk_coords[] = self::getKmlCoordinates($track->Placemark->LineString->coordinates, $dim);
                 }
             }
         }
         c2cTools::log("ParseGeo::kml2wkt({$path}, {$dim}) with xml->Document->Folder");
         return 'LINESTRING(' . implode(', ', $trk_coords) . ')';
     } else {
         c2cTools::log("kml2wkt : no track found");
         return false;
     }
 }
开发者ID:snouhaud,项目名称:camptocamp.org,代码行数:45,代码来源:ParseGeo.class.php


注:本文中的c2cTools::log方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。