/** 
 * Reads the config file, if any, and returns details of the join and where clause that must be added
 * to the indexing query to respect the location type filter in the config file.
 * @return array Array containing the join SQL in the first entry and where SQL in the second.
 */
function spatial_index_builder_get_type_filter()
{
    $config = kohana::config_load('spatial_index_builder', false);
    $surveyRestriction = '';
    if (array_key_exists('location_types', $config)) {
        $join = 'join cache_termlists_terms t on t.id=l.location_type_id';
        $where = "and t.preferred_term in ('" . implode("','", $config['location_types']) . "')";
        if (array_key_exists('survey_restrictions', $config)) {
            foreach ($config['survey_restrictions'] as $type => $surveyIds) {
                $surveys = implode(', ', $surveyIds);
                $surveyRestriction .= "and (t.preferred_term<>'{$type}' or s.survey_id in ({$surveys}))\n";
            }
        }
    } else {
        $join = '';
        $where = '';
    }
    return array($join, $where, $surveyRestriction);
}
示例#2
0
 /**
  * Ensure that the PHP version running on the server is at least 5.2, which supports
  * JSON properly.
  *
  * @param array $messages List of messages that any information should be appended to.
  * @param boolean $problems_only Set to true to report only the problems, not the successful
  * checks. False reports both failures and successes.
  */
 public static function check_db(&$messages, $problems_only)
 {
     // The Indicia config file is only created after a successful db creation.
     $config = kohana::config_load('indicia', false);
     if (!$config) {
         $problem = array('title' => 'Database configuration', 'description' => '<p>Database configuration options need to be set allowing the Indicia Warehouse to access your ' . 'database. Indicia will then install the required database tables for you.</p>', 'success' => false);
         $other_problems = false;
         for ($i = 0; $i < count($messages); $i++) {
             $other_problems = $other_problems || $messages[$i]['success'] == false;
         }
         if (!$other_problems) {
             // No other problems, so can proceed to install the database.
             $problem['action'] = array('title' => 'Configure database', 'link' => 'config_db');
         } else {
             $problem['description'] .= '<p>Fix the other issues listed on this page before proceeding to configure and install the database.</p>';
         }
         array_push($messages, $problem);
     } elseif (!$problems_only) {
         array_push($messages, array('title' => 'Database configuration', 'description' => '<p>The Indicia Warehouse database has been configured and installed.</p>', 'success' => true));
     }
 }
示例#3
0
<!-- Main template -->

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta id="baseURI" name="baseURI" content="<?php 
echo url::site();
?>
" />
<meta id="routedURI" name="routedURI" content="<?php 
echo url::site() . router::$routed_uri;
?>
" />

<?php 
// during setup, the indicia config file does not exist
$indicia = kohana::config_load('indicia', false);
$theme = $indicia ? $indicia['theme'] : 'default';
echo html::stylesheet(array('media/css/site', 'media/css/forms', 'media/js/fancybox/jquery.fancybox.css', 'media/css/jquery.autocomplete', 'media/themes/' . $theme . '/jquery-ui.custom'), array('screen'));
?>

<!-- BEGIN: jquery/superfish init -->
<?php 
echo html::script(array('media/js/json2.js', 'media/js/jquery.js', 'media/js/jquery.url.js', 'media/js/fancybox/jquery.fancybox.pack.js', 'media/js/hasharray.js', 'media/js/superfish.js', 'media/js/jquery-ui.custom.min.js'), FALSE);
?>


<?php 
echo html::stylesheet(array('media/css/menus'), array('screen'));
?>

<script type="text/javascript">
/** 
 * Reads the config file, if any, and returns details of the join and where clause that must be added
 * to the indexing query to respect the location type filter in the config file.
 * @return array Array containing the join SQL in the first entry and where SQL in the second.
 */
function spatial_index_builder_get_type_filter()
{
    $config = kohana::config_load('spatial_index_builder', false);
    if (array_key_exists('location_types', $config)) {
        $join = 'join cache_termlists_terms t on t.id=l.location_type_id';
        $where = "and t.preferred_term in ('" . implode("','", $config['location_types']) . "')";
    } else {
        $join = '';
        $where = '';
    }
    return array($join, $where);
}
示例#5
0
 /**
  * Method to populate the indexed locations that this group intersects with. Makes it easy to do things like
  * suggest groups based on geographic region.
  */
 private function processIndexGroupsLocations()
 {
     $filter = json_decode($this->filter->definition, true);
     $exist = $this->db->select('id', 'location_id')->from('index_groups_locations')->where('group_id', $this->id)->get();
     $location_ids = array();
     // backwards compatibility
     if (!empty($filter['indexed_location_id']) && empty($filter['indexed_location_list'])) {
         $filter['indexed_location_list'] = $filter['location_id'];
     }
     // backwards compatibility
     if (!empty($filter['location_id']) && empty($filter['location_list'])) {
         $filter['location_list'] = $filter['location_id'];
     }
     // backwards compatibility
     if (!empty($filter['indexed_location_list'])) {
         // Got an indexed location as the filter boundary definition, so we can use that as it is.
         $location_ids = explode(',', $filter['indexed_location_list']);
     } elseif (!empty($filter['location_list']) || !empty($filter['searchArea'])) {
         // got either an unindexed location, or a freehand boundary, so need to intersect to find the indexed locations
         // Without a configuration for the indexed location type layers we can't go any further.
         $config = kohana::config_load('spatial_index_builder', false);
         if (array_key_exists('location_types', $config)) {
             $types = "'" . implode("','", $config['location_types']) . "'";
             if (!empty($filter['location_list'])) {
                 $rows = $this->db->query('select l.id from locations l ' . 'join locations search on ' . '  (st_intersects(coalesce(search.boundary_geom, search.centroid_geom), coalesce(l.boundary_geom, l.centroid_geom)) ' . '  and not st_touches(coalesce(search.boundary_geom, search.centroid_geom), coalesce(l.boundary_geom, l.centroid_geom)))' . 'join cache_termlists_terms t on t.id=l.location_type_id ' . "where search.id in ({$filter['location_list']}) and t.preferred_term in ({$types})")->result();
             } else {
                 $srid = kohana::config('sref_notations.internal_srid');
                 $rows = $this->db->query('select l.id from locations l ' . 'join cache_termlists_terms t on t.id=l.location_type_id ' . "where (st_intersects(st_geomfromtext('{$filter['searchArea']}', {$srid}), coalesce(l.boundary_geom, l.centroid_geom)) " . "  and not st_touches(st_geomfromtext('{$filter['searchArea']}', {$srid}), coalesce(l.boundary_geom, l.centroid_geom)))" . "and t.preferred_term in ({$types})")->result();
             }
             foreach ($rows as $row) {
                 $location_ids[] = $row->id;
             }
         }
     }
     // go through the existing index entries for this group. Remove any that are not needed now.
     foreach ($exist as $record) {
         if (in_array($record->location_id, $location_ids)) {
             // Got a correct one already. Remove the location ID from the list we want to add later
             unset($location_ids[$record->location_id]);
         } else {
             // Got one we didn't actually want.
             $this->db->delete('index_groups_locations', array('id' => $record->id));
         }
     }
     // Any remaining in our list now need to be added.
     foreach ($location_ids as $location_id) {
         $this->db->insert('index_groups_locations', array('group_id' => $this->id, 'location_id' => $location_id));
     }
 }
示例#6
0
 private function _check_module_active($module)
 {
     $config = kohana::config_load('core');
     foreach ($config['modules'] as $path) {
         if (strlen($path) >= strlen($module) && substr_compare($path, $module, strlen($path) - strlen($module), strlen($module), true) === 0) {
             return true;
         }
     }
     return false;
 }
示例#7
0
 *
 * @package Indicia
 * @subpackage Hook
 * @license http://www.gnu.org/licenses/gpl.html GPL
 * @author Indicia Team
 * @version $Rev$ / $LastChangedDate$ / $Author$
 */
class Dev
{
    public static function __upgrade()
    {
        $uri = URI::instance();
        // we havent to proceed futher if a setup call was made
        if ($uri->segment(1) == 'setup_check' || $uri->segment(2) == 'upgrade') {
            return;
        }
        // also do not proceed when responding to a web service call
        // as we may not have update permission on the database
        if ($uri->segment(1) == 'services') {
            return;
        }
        // Invoke the upgrader
        $upgrader = new Upgrade_Model();
        $upgrader->run();
    }
}
// load the optional config file to specify continuous updates
$upgradeConfig = kohana::config_load('upgrade', false);
if ($upgradeConfig && $upgradeConfig['continuous_upgrade']) {
    Event::add('system.pre_controller', array('Dev', '__upgrade'));
}