« Request forwarding to JSP from Jython | Main | LOM OAI-PMH Harvester in Python »

February 28, 2012

Example OOP PHP Code

<?php

abstract class pid_entity{
    
    function details(){
        
        global $r;
        
        $r['dbname'] = 'uebs';
        
        $r['schema'] = 'pid';
    
        if(!$this->id){ return false; }
        
        if(!$this->table){ return false; }
    
        $reply = just::sql(sprintf('select * from %s.%s where %s_id = %d',$r['schema'] , $this->table, $this->table, $this->id));
        
        $this->details = $reply['first_row'];
        
        $this->row = $this->details;
        
        }
        
    function create(){
        
        if(!$this->table){ return false; }
        
        global $r;
        
        $r['dbname'] = 'uebs';
        
        $r['schema'] = 'pid';

        $this->id = just::add($this->table);
        
        }
    
    function set(){
        
        if(!$this->table){ return false; }
        
        global $r;
        
        $r['dbname'] = 'uebs';
        
        $r['schema'] = 'pid';
        
        if(!$this->id){ $this->create(); }
        
        $reply = just::update($this->table, $r, $this->id);
        
        $_SESSION['pid_set'] = $reply;
        
        $this->details();
        
        $this->row = $this->details;
        
        return $reply['status'];
        
        }
        
    function annotate(){
    
        global $r;
        
        $r['dbname'] = 'uebs';
        
        $r['schema'] = 'pid';
    
        $id = just::add('note');
        
        $r[$this->table.'_id'] = $this->id;
        
        $reply = just::update('note', $r, $id);
        
        return $reply['status'];
        
        }
        
    function get_notes(){
        
        global $r;
        
        $r['dbname'] = 'uebs';
        
        $r['schema'] = 'pid';
        
        $reply = just::sql(sprintf('select notes, to_timestamp(insert_date) as ts, insert_date from %s.note where expired_date is null and %s_id = %d order by insert_date desc', $r['schema'],  $this->table, $this->id ));
        
        return $reply['rows'];
        
        }
    
    }

interface pid_entity_if{

    function details();
    
    function create();
    
    function set();
    
    function add_child($object);
    
    function get_children();
    
    function calculate_start();
    
    function calculate_end();
    
    function annotate();
    
    function get_notes();
    
    }

class project extends pid_entity implements pid_entity_if{

    public $id;

    public $title;
    
    public $percent_complete;
    
    public $start_date;
    
    public $end_date;
    
    public $children;
    
    public $table = 'project';
    
    function __construct($key){
        
        if($key > 0){
            
            $this->id = $key; 
        
            $this->details();
            
            }
        
        }
    
    function add_child($object){}
        
    function get_children(){}
    
    function calculate_start(){}
    
    function calculate_end(){}
    
    }

class phase extends project{
    
    public $id;

    public $title;
    
    public $percent_complete;
    
    public $start_date;
    
    public $end_date;
    
    public $children;
    
    public $table = 'phase';
    
    function __construct($phase_id){
        
        parent::__construct($phase_id); 
        
        }
    
    }


class work_package extends project{
    
    public $id;

    public $title;
    
    public $percent_complete;
    
    public $start_date;
    
    public $end_date;
    
    public $children;
    
    public $table = 'work_package';
    
    function __construct($wp_id){
        
        parent::__construct($wp_id); 
        
        }
    
    }


class deliverable extends project{
    
    public $id;

    public $title;
    
    public $percent_complete;
    
    public $start_date;
    
    public $end_date;
    
    public $children;
    
    public $table = 'deliverable';
    
    function __construct($del_id){
        
        parent::__construct($del_id); 
        
        }
    
    }

/* End of /waf/classes/project_initiation.php */

DB Model:




    drop table if exists pid.project;
    create table pid.project
    (
    project_id serial unique not null, 
    project_type_id integer null,    
	name text null,
	purpose text null,
	background text null,
	assumptions text null,
	constraints text null,
	risks text null,
    insert_by integer null,
    insert_date bigint null,
    update_by integer null,
    update_date bigint null,
    expired_date bigint null,
    primary key (project_id)
    );



alter table pid.project drop project_type_id;




    drop table if exists pid.phase;
    create table pid.phase
    (
    phase_id serial unique not null, 
    phase_type_id integer null,    
	project_id integer null,
	phase_sort decimal null,
	name text null,
	description text null,
    insert_by integer null,
    insert_date bigint null,
    update_by integer null,
    update_date bigint null,
    expired_date bigint null,
    primary key (phase_id)
    );



alter table pid.phase drop phase_type_id;




    drop table if exists pid.work_package;
    create table pid.work_package
    (
    work_package_id serial unique not null, 
    work_package_type_id integer null,    
	phase_id integer null,
	dependent_on_package_id integer null,
	name text null,
	package_sort decimal null,
	description text null,
	start_date bigint null,
	length_days decimal null,
	completion_date bigint null,
    insert_by integer null,
    insert_date bigint null,
    update_by integer null,
    update_date bigint null,
    expired_date bigint null,
    primary key (work_package_id)
    );



alter table pid.work_package drop work_package_type_id;




    drop table if exists pid.staff;
    create table pid.staff
    (
    staff_id serial unique not null, 
    staff_type_id integer null,    
    insert_by integer null,
    insert_date bigint null,
    update_by integer null,
    update_date bigint null,
    expired_date bigint null,
    primary key (staff_id)
    );



alter table pid.staff drop staff_type_id;




    drop table if exists pid.note;
    create table pid.note
    (
    note_id serial unique not null, 
    note_type_id integer null,    
	project_id integer null,
	phase_id integer null,
	work_package_id integer null,
	notes text null,
    insert_by integer null,
    insert_date bigint null,
    update_by integer null,
    update_date bigint null,
    expired_date bigint null,
    primary key (note_id)
    );



alter table pid.note drop note_type_id;




    drop table if exists pid.deliverable;
    create table pid.deliverable
    (
    deliverable_id serial unique not null, 
    deliverable_type_id integer null,    
	work_package_id integer null,
	name text null,
	delivery_date bigint null,
    insert_by integer null,
    insert_date bigint null,
    update_by integer null,
    update_date bigint null,
    expired_date bigint null,
    primary key (deliverable_id)
    );



alter table pid.deliverable drop deliverable_type_id;




    drop table if exists pid.work_package_status;
    create table pid.work_package_status
    (
    work_package_status_id serial unique not null, 
    work_package_status_type_id integer null,    
    insert_by integer null,
    insert_date bigint null,
    update_by integer null,
    update_date bigint null,
    expired_date bigint null,
    primary key (work_package_status_id)
    );


        drop table if exists pid.work_package_status_type;
        create table pid.work_package_status_type
        (
        work_package_status_type_id serial unique not null,
        name text null,
        description text, 
        insert_by integer null,
        insert_date bigint null,
        update_by integer null,
        update_date bigint null,
        non_deletable boolean not null default true,
        expired_date bigint null,
        primary key (work_package_status_type_id) );


    drop table if exists pid.upload_file;
    create table pid.upload_file
    (
    upload_file_id serial unique not null, 
    upload_file_type_id integer null,    
	project_id integer null,
	phase_id integer null,
	work_package_id integer null,
	file_name text null,
	file_mime_type text null,
	file_length bigint null,
	file_data bytea null,
    insert_by integer null,
    insert_date bigint null,
    update_by integer null,
    update_date bigint null,
    expired_date bigint null,
    primary key (upload_file_id)
    );



alter table pid.upload_file drop upload_file_type_id;




    drop table if exists pid.project_staff_link;   
    create table pid.project_staff_link
    (
    project_staff_link_id serial unique not null,
    project_id integer null,
    staff_id integer null,
    insert_by integer null,
    insert_date bigint null,
    update_by integer null,
    update_date bigint null,
    expired_date bigint null,
    primary key(project_staff_link_id) 
    );

Windows .ini file:


[schema]
default = pid

[table_list]
project = 0
phase = 0
work_package = 0
staff = 0
note = 0
deliverable = 0
work_package_status = 1
upload_file = 0

[upload_file]
project_id = integer
phase_id = integer
work_package_id = integer
file_name = text
file_mime_type = text
file_length = bigint
file_data = bytea

[work_package_status]
work_package_id

[note]
project_id = integer
phase_id = integer
work_package_id = integer
notes = text

[deliverable]
work_package_id = integer
name = text
delivery_date = bigint

[work_package]
phase_id = integer
dependent_on_package_id = integer
name = text
package_sort = decimal
name = text
description = text
start_date = bigint
length_days = decimal
completion_date = bigint

[project]
name = text
purpose = text
background = text
assumptions = text
constraints = text
risks = text

[phase]
project_id = integer
phase_sort = decimal
name = text
description = text

[staff]

[link_tables]
project:staff = 0
;programme:course = 0

Tags: PHP

Posted by pj at February 28, 2012 02:37 PM

Comments