Podgląd pliku: / books / includes / MARC21.php


<?php
/***************************************************** 
 *                System biblioteczny                * 
 ***************************************************** 
 * Wersja: 1.3 Stable                                * 
 * Data: 17.06.2012 (15:07)                          * 
 * Autor: Jacek Kowalski (http://jacekk.info)        * 
 *                                                   * 
 * Utwor rozprowadzany na licencji                   * 
 * http://creativecommons.org/licenses/by-nc-sa/2.5/ * 
 *****************************************************/

define('RECORD_SEPERATOR'chr(0x1e));
define('UNIT_SEPERATOR'chr(0x1f));

class 
MARC21 {
    static function 
from_string($data) {
        
$lead_len 24;
        
$lead substr($data0$lead_len);
        
        
$file_length substr($lead05);
        
$head_len substr($lead125);
        
        
$cat_record_lof substr($lead201);
        
$cat_record_scp substr($lead211);
        
$cat_record_imp substr($lead221);
        
$cat_record_len $cat_record_lof $cat_record_scp $cat_record_imp;
        
$cat_len $head_len-$lead_len-1;
        
        
$cat substr($data$lead_len$cat_len);
        
$info substr($data$head_len);
        
        
$unit FALSE;
        for(
$i=0$i<$cat_len$i += $cat_record_len) {
            
$rec_num substr($cat$i3);
            
            if(
$rec_num>899) {
                continue;
            }
            
            
$rec_len substr($cat$i+3$cat_record_lof);
            
$rec_start substr($cat$i+3+$cat_record_lof$cat_record_scp);
            
$rec substr($info$rec_start$rec_len-1);
            
            
$temp = array();
            
$unit FALSE;
            
$unit_letter 'a';
            
            for(
$j=0$j<$rec_len$j++) {
                
$char substr($rec$j1);
                
                if((
$j==|| $j==1) && $rec_num>&& $char!=' ') {
                    if(
$j==0) {
                        
$temp['f0'] = $char;
                    }
                    elseif(
$j==1) {
                        
$temp['f1'] = $char;
                    }
                }
                elseif(
$char == UNIT_SEPERATOR) {
                    
$unit TRUE;
                }
                elseif(
$unit === TRUE) {
                    
$temp[$unit_letter] = trim($collect'     :;,/');
                    
$unit FALSE;
                    
$unit_letter $char;
                    
$collect '';
                }
                else
                {
                    
$collect .= $char;
                }
            }
            
            
$temp[$unit_letter] = trim($collect'     :;,/');
            
$collect '';
            
            
$return[$rec_num][] = $temp;
        }
        
        return 
$return;
    }
    
    static function 
to_array($MARC) {
        if(!
$MARC['020']) {
            
$MARC['020'] = array();
        }
        foreach(
$MARC['020'] as $value) {
            
$value = (string)$value['a'];
            if(
strlen($value)==AND strlen($value)!=13) {
                
$value .= checksum::ISBN($value);
            }
            if( 
strlen($value) > strlen($ISBN) ) {
                
$ISBN $value;
            }
        }
        
        if(!
$MARC['022']) {
            
$MARC['022'] = array();
        }
        foreach(
$MARC['022'] as $value) {
            
$value = (int)$value['a'];
            if( 
strlen($value) > strlen($ISSN) ) {
                
$ISSN $value;
            }
        }
        
        if(
$MARC['100'][0]['f0']==1) {
            
$autor explode(', '$MARC['100'][0]['a'], 2);
            
$MARC['100'][0]['a'] = str_replace('.'''$autor[1]).' '.$autor[0];
        }
        
        if(empty(
$MARC['100'][0]['a'])) {
            
$MARC['100'][0]['a'] = 'Praca zbiorowa';
        }
        
        
$MARC['260'][0]['b'] = str_replace(
            array(
                
'Wydaw.',
                
'Państ.',
                
'Państw.',
                
'PK',
                
'Min.',
            ),
            array(
                
'Wydawnictwo',
                
'Państwowy',
                
'Państwowe',
                
'Politechnika Krakowska',
                
'Ministerstwa',
            ),
        
$MARC['260'][0]['b']);
        
        if(
$MARC['041'][0]['a'] == 'pol') {
            
$MARC['041'][0]['a'] = 'polski';
        }
        
        
        if(empty(
$MARC['041'][0]['a'])) {
            
$MARC['041'][0]['a'] = 'polski';
        }
        
        if(!empty(
$MARC['245'][0]['b'])) {
            
$MARC['245'][0]['a'] = trim($MARC['245'][0]['a'], '().,\\/"\' ').'. '.ucfirst(trim($MARC['245'][0]['b'], '().,\\/"\' '));
        }
        
        return array(
            
'tytul' => trim($MARC['245'][0]['a'], '().,\\/"\' '),
            
'autor' => trim($MARC['100'][0]['a'], '().,\\/"\' '),
            
'rok' => trim($MARC['260'][0]['c'], '().,\\/"\' '),
            
'miejsce' => trim($MARC['260'][0]['a'], '().,\\/"\' '),
            
'wydawnictwo' => trim($MARC['260'][0]['b'], '().,\\/"\' '),
            
'wydanie' => trim($MARC['250'][0]['a'], '().,\\/"\' '),
            
'jezyk' => $MARC['041'][0]['a'],
            
'ISBN' => $ISBN,
            
'ISSN' => $ISSN,
            
/* stan */
        
);
    }
    
    static function 
to_database($kod$MARC) {
        if(!
$MARC['020']) {
            
$MARC['020'] = array();
        }
        foreach(
$MARC['020'] as $value) {
            
$value = (int)$value['a'];
            if( 
strlen($value) > strlen($ISBN) ) {
                
$ISBN $value;
            }
        }
        
        if(!
$MARC['022']) {
            
$MARC['022'] = array();
        }
        foreach(
$MARC['022'] as $value) {
            
$value = (int)$value['a'];
            if( 
strlen($value) > strlen($ISSN) ) {
                
$ISSN $value;
            }
        }
        
        
db2::add('ksiazki', array(
            
'id' => $kod,
            
'tytul' => $MARC['245'][0]['a'],
            
'autor' => $MARC['100'][0]['a'],
            
'rok' => $MARC['260'][0]['c'],
            
'miejsce' => $MARC['260'][0]['a'],
            
'wydawnictwo' => $MARC['260'][0]['b'],
            
'wydanie' => $MARC['250'][0]['a'],
            
'jezyk' => $MARC['041'][0]['a'],
            
'ISBN' => $ISBN,
            
'ISSN' => $ISSN,
            
/* stan */
        
));
    }
}
?>

Browse Code © 2010 by Jacek Kowalski