File:  [Local Repository] / db / prgsrc / drupal / modules / chgk_db / chgk_db.module
Revision 1.6: download - view: text, annotated - select for diffs - revision graph
Sat Apr 24 21:45:49 2010 UTC (14 years ago) by roma7
Branches: MAIN
CVS tags: HEAD
Version 2 big update

<?php
/**********************
*
* Tournament
*
*********************/

require_once(dirname(__FILE__)."/classes/DbPackage.class.php");
require_once(dirname(__FILE__)."/classes/DbEditors.class.php");


/**
 * Implementation of hook_menu().
 */
function chgk_db_menu() {
#print_r(debug_backtrace());
  $items['tour/%/view'] = array(
    'title' => 'Читать',
    'type' => MENU_DEFAULT_LOCAL_TASK,
    'weight' => 0
  );

  $items['tour/%/print'] = array(
    'path'  => 'print',
    'title' => 'Печатать',
    'page callback' => 'chgk_db_print',
    'page arguments' => array(1),
    'access callback' => "chgk_db_access",
    'access arguments' => array(1, 'print'),
    'localized_options' => array('attributes' => array('target'=>'_blank')),
    'type' => MENU_LOCAL_TASK,
    'weight' => 1    
  );

  
  $items['tour/%/fb2'] = array(
    'path'  => 'tour/%/fb2',
    'title' => 'FB2',
    'page callback' => 'chgk_db_fb2',
    'page arguments' => array(1),
    'access callback' => "chgk_db_access",
    'access arguments' => array(1, 'fb2'),    
    'type' => MENU_LOCAL_TASK,
    'weight' => 2
    
  );
  $items['tree'] = array(
      'path' => 'tree',
      'title' => 'Все турниры',
      'page callback' => 'chgk_db_tree',
      'access callback' => "chgk_db_access",
      'type' => MENU_NORMAL_ITEM      
  );

  $items['editors'] = array(
      'path' => 'editors',
      'title' => 'Редакторы',
      'page callback' => 'chgk_db_editors',
      'access callback' => "chgk_db_access",
      'type' => MENU_NORMAL_ITEM      
  );

  $items['tour'] = array(
      'path' => 'tour',
      'page callback' => 'chgk_db_tour',
      'page arguments' => array(1),
      'access callback' => "chgk_db_access"
  );
  
  
  return $items;
}

/**
 * Implementation of hook_theme().
 */
function chgk_db_theme() {
  $items['chgk_db_print'] = array(
    'arguments' => array(
      'title' =>'',
      'content' => '',
      'link' => ''
      
      
    ),
    'template'=>'templates/chgk_db_print' 
  );
  $items['chgk_db_field'] = array(
    'arguments' => array(
      'field' => NULL
    )  
  );
  $items['chgk_db_tour'] = array(
    'arguments' => array(
      'tour'=>NULL,
      'alone' => TRUE
    ),
    'template'=>'templates/chgk_db_tour'
  );

  $items['chgk_db_tour_fb2'] = array(
    'arguments' => array(
      'tour'=>NULL,
      'alone' => TRUE
    ),
    'template'=>'templates/chgk_db_tour_fb2'
  );

  $items['chgk_db_tours_fb2'] = array(
    'arguments' => array(
      'tournament'=>'',
    ),
    'template'=>'templates/chgk_db_tours_fb2'
  );



  $items['chgk_db_question'] = array(
    'arguments' => array(
      'question'=>NULL
    ),
    'template'=>'templates/chgk_db_question'
  );

  $items['chgk_db_question_fb2'] = array(
    'arguments' => array(
      'question'=>NULL
    ),
    'template'=>'templates/chgk_db_question_fb2'
  );


  $items['chgk_db_jeopardy_question'] = array(
    'arguments' => array(
      'question'=>NULL
    ),
    'template'=>'templates/chgk_db_jeopardy_question'
  );

  $items['chgk_db_champ_full'] = array(
    'arguments' => array(
        'tour' => NULL
    ),
    'template'=>'templates/chgk_db_champ_full'
  );
  $items['chgk_db_fb2'] = array(
      'arguments' => array('tournament'=>''),
      'template' => 'templates/chgk_db_fb2'
  );
  return $items;
}

function chgk_db_print($string) {
  $tournament = DbPackage::newFromDb($string);
  print $tournament->getPrintVersion();
}

function chgk_db_tour($name) {
  if (empty($name)) {
    $tournament = DbPackage::newRoot();    
  } else {
    $tournament = DbPackage::newFromDb($name);
  }
  drupal_set_title($tournament->getFullTitle());
  $breadcrumb = array_merge(drupal_get_breadcrumb(),$tournament->getBreadcrumb());
  drupal_set_breadcrumb($breadcrumb);
  return $tournament->getHtmlContent();
}

function chgk_db_tree() {        
  $class = DbPackage::newRoot();
  $class -> loadTree();
  drupal_set_title('Все турниры');
#  $breadcrumb = array_merge(drupal_get_breadcrumb(),$tournament->getBreadcrumb());
  drupal_set_breadcrumb($breadcrumb);
    
    return $class->htmlTree()."\n";
}

function chgk_db_fb2($string) {
  $tournament = DbPackage::newFromDb($string);
  $xml = $tournament->getFb2();
  if (!$xml) {
     print "Something is wrong :(";
     exit;
  }
  $filename = "$string.fb2"; 
  $zipname = $filename.".zip";
  
  header("Content-Type: application/octet-stream\n");
  header("Content-Type: application/force-download\n");
  header("Content-Type: application/download\n");
  header("Content-Type: application/x-zip-compressed; name=$filename\n");
  header("Content-Disposition: attachment; filename=$filename.zip \n");
  chdir(file_directory_temp());
  $f = fopen ($filename, "w");
  fputs($f, $xml);
  fclose($f);
  system("zip $zipname $filename>/dev/null");
  print passthru("cat $zipname");
  exit;
}


function chgk_db_access($tour=NULL, $action ='') {
  if ($action == 'fb2') {
    $tournament = DbPackage::newFromDb($tour);
    if (!$tournament->hasFb2()) {
      return FALSE;
    }
  } elseif ($action == 'print') {
    $tournament = DbPackage::newFromDb($tour);  
    if (!$tournament->hasPrintVersion()) {
      return FALSE;
    }  
  }
  return TRUE;
}

function chgk_db_search($op = 'search', $keys = NULL, $skip_access_check = FALSE) {
  if ($op == 'name') {
    return 'Вопросы';
  } elseif( $op == 'search') {
     $db = new DbDatabase();
     $res = $db->getFulltextSearchRes($keys);
     $factory = new DbQuestionFactory();

     while($a = db_fetch_object($res)) {
        $q = $factory->getQuestion($a);
        $q->setSearchString($keys);
        $results[] = array(
          'link' => $q->getUrl(),
          'title' => $q->getSearchTitle(),
          'snippet' => $q->getHtml()
        );
    }
    return $results;

  }
  return true;
}

  function chgk_db_form_alter(&$form, &$form_state) {
    if  ($form['#submit'][0] == 'search_box_form_submit') {        
        $form['#submit'][] = 'chgk_db_search_box_submit';
    }
  }
function chgk_db_editors() {
    if ($id = arg(1)) {
        $author = new DbEditor($id);
        drupal_set_title($author->getFullName());
      $breadcrumb = array_merge(
              drupal_get_breadcrumb(),
              $author->getBreadcrumb());
        drupal_set_breadcrumb($breadcrumb);

        return $author->getHtmlPage();
    } else {
        $authorsEngine = new DbEditors();
        return $authorsEngine->getAllHtml();
    }
  }

function chgk_db_search_box_submit($form, &$form_state) {
  $form_id = $form['form_id']['#value'];
  $form_state['redirect'] = 'search/chgk_db/'. trim($form_state['values'][$form_id]);
}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>