<?php
//    $Id$

/**
 *    @file    guidebook-theme.module
 *    @desc    theme functions for the guidebook module
 */

/**
 *    implementation of hook_menu()
 */

function guidebook_menu()    {
    
$items['guidebook'] = array(
        
'title'                =>    'Guidebooks',
        
'page callback'        =>    'guidebook_last',
        
'access arguments'    =>    array('access content'),
        
'type'                =>    MENU_SUGGESTED_ITEM,
    );
    
$items['route']    =    array(
        
'title'                =>    'Routes',
        
'page callback'        =>    'route_last',
        
'access arguments'    =>    array('access content'),
        
'type'                =>    MENU_SUGGESTED_ITEM,
    );
    
$items['admin/settings/guidebook']    =    array(
        
'title'                =>    'Guidebook',
        
'description'        =>    'Configuration options for Guidebook',
        
'page callback'        =>    'drupal_get_form',
        
'page arguments'    =>    array('guidebook_admin'),
        
'access arguments'    =>    array('administer site configuration'),
        
'type'                =>    MENU_NORMAL_ITEM,
        
'file'                =>    'guidebook-admin.inc',
    );
    return 
$items;
}

/**
 *    implementation of hook_view()
 */

function guidebook_view(&$node$teaser false$page false)    {
    global 
$base_path;
    
drupal_add_css(drupal_get_path('module''guidebook').'/guidebook.css');
    
drupal_add_js(drupal_get_path('module''guidebook').'/guidebook.js');

    
$node            =    node_prepare($node$teaser);
    
$default        =    $base_path.drupal_get_path('module''guidebook').'/default-'.$node->type.'.jpg';
    
$image            =    _get_image_path($node->fid);
    
$thumb            =    _get_image_thumbnail($image1);
    
$node->image    =    is_file(file_directory_path().'/guidebook/'.basename($image) ) ? $image $default;
    
$node->thumb    =    is_file(file_directory_path().'/guidebook/'.basename($thumb) ) ? $thumb $default;
    
$function        =    '_'.$node->type.'_view';
    
    return 
$function($node$teaser$page);
}

/**
 *  implementation of hook_form()
 */

function guidebook_form(&$node) {
    
drupal_add_js(drupal_get_path('module''guidebook').'/guidebook.js');
    
drupal_add_css(drupal_get_path('module''guidebook').'/guidebook.css');
    
$function    =    '_'.$node->type.'_form';
    return 
$function($node);
}

/**
 *    implementation of guidebook_view()
 */

function _guidebook_view(&$node$teaser$page)    {
    global 
$base_path;
    
$query    =    "SELECT route.nid, node.title, difficulty, quality, teaser FROM {route} route
                LEFT JOIN {node} node ON route.nid = node.nid
                LEFT JOIN {node_revisions} revision ON route.nid = revision.nid
                WHERE gid = %d ORDER BY quality DESC"
;
    
$result    =    db_query($query$node->nid);
    
$routes    =    array();
    
$count    =    0;
    
$zebra    =    0;
    while (
$data db_fetch_object($result) )    {
        
$routes[$count]    =    (object) array(
            
'nid'        =>    $data->nid,
            
'title'        =>    check_plain($data->title),
            
'difficulty'=>    _lookup('difficulty'$data->difficulty),
            
'quality'    =>    _lookup('quality'$data->quality),
            
'link'        =>    $base_path.'node/'.$data->nid,
            
'zebra'        =>    $zebra "even" "odd",
            
'content'    =>    check_markup($data->teaser),
        );
        
$zebra    =    $zebra 1;
        
$count++;
    }

    
$node->routes    =    $routes;

    if (
$page)    {
        
drupal_set_breadcrumb(
            array(
                
l(t('Home'), null),
                
l(t('Guidebooks'), 'guidebook'),
            )
        );
    }
    return 
$node;
}

/**
 *    implementation of route_view()
 */

function _route_view(&$node$teaser$page)    {
    global 
$base_path;
    
$query                =    "SELECT title FROM {node}
                            WHERE nid = %d"
;
    
$guide                =    db_fetch_object(db_query($query$node->gid) );
    
$node->quality        =    _lookup('quality'$node->quality);
    
$node->difficulty    =    _lookup('difficulty'$node->difficulty);
    
$node->guidebook    =    check_plain($guide->title);
    
$node->link         =    $base_path.'node/'.$node->gid;
    
    if (!
$teaser)    {
        
drupal_set_html_head('<script type="text/javascript" src="http://maps.google.com/maps?file=api&amp;v=2&amp;key='.variable_get('guidebook_gmaps_api'"NO-KEY-SET").'"></script>');
        
drupal_set_breadcrumb(
            array(
                
l(t('Home'), null),
                
l(t('All Routes'), 'route'),
                
l(t("@name", array('@name' => $guide->title) ), 'node/'.$node->gid),
            )
        );
    }
    return 
$node;
}

/**
 *    show last x number of routes
 */

function route_last()    {
    
$output    =    '';
    
$total    =    variable_get('default_nodes_main'10);
    
$toggle    =    false;
    
$query    =    "SELECT node.nid, created, title, route.fid, route.gid FROM {node} node
                LEFT JOIN {route} route ON route.nid = node.nid
                LEFT JOIN {files} files ON route.fid = files.fid
                WHERE node.type = 'route' AND node.status = 1
                ORDER BY node.sticky DESC, node.created DESC"
;
    
$result    =    pager_query(db_rewrite_sql($querytotal) );
    while (
$node db_fetch_object($result) )    {
        
$output    .=    node_view(node_load($node->nid), true);
        
$toggle    =    true;
    }
    
    if (
$toggle)    {
        
$output    .=    theme('pager'null$total);
    } else {
        
drupal_set_message(t('No routes have been created yet.') );
    }
    return 
$output;
}

/**
 *    show last x number of guidebooks
 */

function guidebook_last()    {
    
$output    =    '';
    
$total    =    variable_get('default_nodes_main'10);
    
$toggle    =    false;
    
$query    =    "SELECT node.nid, created, title, guidebook.fid FROM {node} node
                LEFT JOIN {guidebook} guidebook ON guidebook.nid = node.nid
                LEFT JOIN {files} files ON guidebook.fid = files.fid
                WHERE node.type = 'guidebook' AND node.status = 1
                ORDER BY node.sticky DESC, node.created DESC"
;
    
$result    =    pager_query(db_rewrite_sql($query$total) );
    while (
$node db_fetch_object($result) )    {
        
$output .= node_view(node_load($node->nid), true);
        
$toggle true;
    }
    
    if (
$toggle)    {
        
$output    .=    theme('pager'null$total);
    } else {
        
drupal_set_message(t('No guidebooks have been created yet.') );
    }
    return 
$output;
}

/**
 *  implementation of guidebook_form()
 */

function _guidebook_form(&$node)    {
    
$limit  =   round(file_upload_max_size() / 10240001);

    
$form['title']  =   array(
        
'#type'             =>  'textfield',
        
'#title'            =>  t('Title'),
        
'#required'         =>  true,
        
'#default_value'    =>  $node->title,
        
'#maxlength'        =>  255,
    );
    if (
$node->fid)    {
        
$form['fid']    =    array(
            
'#type'        =>    'hidden',
            
'#value'    =>    $node->fid,
        );
        
$form['current_image']    =    array(
            
'#type'        =>    'markup',
            
'#value'    =>    '<img src="'._get_image_thumbnail(_get_image_path($node->fid) ).'" />',
        );
        
$form['remove_image']    =    array(
            
'#type'            =>    'checkbox',
            
'#title'        =>    t('Disable Image'),
            
'#description'    =>    t('Check to disable image. (Will also delete existing image.)'),
            
'#default_value'=>    0,
        );
    }
    
$form['image']  =   array(
        
'#type'         =>  'file',
        
'#title'        =>  t('Cover Image'),
        
'#description'  =>  t('Upload limit: @limitmb', array('@limit' => $limit) ),
    );
    
$form['body_filter']['body']    =   array(
        
'#type'             =>  'textarea',
        
'#title'            =>  t('Description'),
        
'#default_value'    =>  $node->body,
        
'#rows'             =>  7,
        
'#required'         =>  true,
    );
    
$form['body_filter']['filter']  =   filter_form($node->format);
    return 
$form;
}

/**
 *  implementation of route_form()
 */

function _route_form(&$node)    {
    
$query    =    "SELECT nid, title FROM {node} WHERE type = 'guidebook'";
    
$result    =    db_query(db_rewrite_sql($query) );
    
$guides    =    array(t('-- Please choose a guide --') );
    while (
$data db_fetch_object($result) )    {
        
$guides[$data->nid]    =    check_plain($data->title);
    }
    if (
count($guides) == 1)    {
        
$error    =    t('You must first create a guidebook before you can create routes');
        
drupal_set_message($error'warning');
        
drupal_goto('node/add/guidebook');
    }

    
$limit  =   round(file_upload_max_size() / 10240001);

    
$form['title']  =   array(
        
'#type'             =>  'textfield',
        
'#title'            =>  t('Name'),
        
'#required'         =>  true,
        
'#default_value'    =>  $node->title,
    );
    
$form['gid']    =    array(
        
'#type'                =>    'select',
        
'#title'            =>    t('Guidebook'),
        
'#default_value'    =>    $node->gid,
        
'#required'            =>    true,
        
'#options'            =>    $guides,
        
'#description'        =>    t('Select the guidebook this route belongs to'),
    );
    if (
$node->fid)    {
        
$form['fid']    =    array(
            
'#type'        =>    'hidden',
            
'#value'    =>    $node->fid,
        );
        
$form['current_image']    =    array(
            
'#type'        =>    'markup',
            
'#value'    =>    '<img src="'._get_image_thumbnail(_get_image_path($node->fid) ).'" />',
        );
        
$form['remove_image']    =    array(
            
'#type'            =>    'checkbox',
            
'#title'        =>    t('Disable Image'),
            
'#description'    =>    t('Check to disable image. (Will also delete existing image.)'),
            
'#default_value'=>    0,
        );
    }
    
$form['image']  =   array(
        
'#type'         =>  'file',
        
'#title'        =>  t('Image'),
        
'#description'  =>  t('Upload limit: @limitmb', array('@limit' => $limit) ),
    );
    
$form['difficulty'] =   array(
        
'#type'             =>  'radios',
        
'#title'            =>  t('Difficulty'),
        
'#default_value'    =>  $node->difficulty,
        
'#required'         =>  true,
        
'#options'          =>  array(
            
1   =>  '<img src="'._lookup('difficulty'1).'" />',
            
2   =>  '<img src="'._lookup('difficulty'2).'" />',
            
3   =>  '<img src="'._lookup('difficulty'3).'" />',
            
4   =>  '<img src="'._lookup('difficulty'4).'" />',
        ),
        
'#description'      =>  t('Please choose a difficulty level'),
    );
    
$form['quality']    =   array(
        
'#type'             =>  'radios',
        
'#title'            =>  t('Quality'),
        
'#default_value'    =>  $node->quality,
        
'#required'         =>  true,
        
'#options'          =>  array(
            
1   =>  '<img src="'._lookup('quality'1).'" />',
            
2   =>  '<img src="'._lookup('quality'2).'" />',
            
3   =>  '<img src="'._lookup('quality'3).'" />',
        ),
    );
    
$form['latitude']    =   array(
        
'#type'             =>  'textfield',
        
'#title'            =>  t('Latitude'),
        
'#required'         =>  true,
        
'#default_value'    =>  $node->latitude,
        
'#size'             =>  15,
    );
    
$form['longitude']  =   array(
        
'#type'             =>  'textfield',
        
'#title'            =>  t('Longitude'),
        
'#required'         =>  true,
        
'#default_value'    =>  $node->longitude,
        
'#size'             =>  15,
    );
    
$form['body']['body']   =   array(
        
'#type'             =>  'textarea',
        
'#title'            =>  t('Beta'),
        
'#required'         =>  true,
        
'#rows'             =>  10,
        
'#default_value'    =>  $node->body,
    );
    
$form['body']['filter'] =   filter_form($node->format);
    
$form['descent']['descent']   =   array(
        
'#type'             =>  'textarea',
        
'#title'            =>  t('Descent'),
        
'#required'         =>  true,
        
'#rows'             =>  10,
        
'#default_value'    =>  $node->descent,
    );
    
$form['descent']['filter'] =   filter_form($node->format);
    return 
$form;
}

/**
 *    implementation of template_theme_registry_alter()
 */

function guidebook_theme_registry_alter(&$registry)    {
    
$node_path    =    array_shift($registry['node']['theme paths']);
    
$new_path    =    drupal_get_path('module''guidebook');
    
array_unshift($registry['node']['theme paths'], $node_path$new_path);
}