Welcome Guest, Not a member yet? Register   Sign In
Separating the controller and the view
#1

[eluser]Unknown[/eluser]
Hi there,

I am using CodeIgnitor and PHPWord for an application that outputs a few reports.

Everything is working well but I realise that I am not strictly following the MVC pattern as when I am using PHPWord to output a report, the content of the word document is being added in the controller when it should be the view.

Here is the code for the function outputting the word report. It is within the reports controller fiel: reports.php

So if I understand correctly all the calls to the addText() function should be made from the view file, is that correct? Any tips on how to move these calls into a "view"?

Code:
function print_inspection_word() {
                $this->load->model('report_model');
                $data['buildingdetails'] = $this->report_model->getBuildingDetails($this->uri->segment(3),$this->uri->segment(4),$this->uri->segment(5),$this->uri->segment(6));
                $data['buildinghazards'] = $this->report_model->getBuildingHazards($this->uri->segment(5));
                $companyName = "";
    foreach($data['buildingdetails'] as $detail){
     $companyName = $detail->company;
    }

                $this->load->model('group_model');
                $data['company_types'] = $this->group_model->getCompany_type();
                $data['countries'] = $this->group_model->getCountries();
                
                $this->load->model('hazard_model');
                $data['hazard_levels'] = $this->hazard_model->getHazardLevels();
                
                $data['load_header'] = false;
    $data['load_footer'] = false;
    $data['main_content'] = 'print_inspection';
    $data['message'] = "";
    $data['message_type'] = "";
    $data['page_title'] = "Building Inspection Report";
    $data['body_class'] = "reports";

    //our docx will have 'lanscape' paper orientation
    $section = $this->word->createSection(array('orientation'=>'portrait'));
    // Add text elements
    $section->addText("");
    // Define table style arrays
    //$styleTable = array('borderSize'=>0, 'borderColor'=>'000000', 'cellMargin'=>80);
    $styleTable = array();
    //$styleFirstRow = array('borderBottomSize'=>18, 'borderBottomColor'=>'0000FF', 'bgColor'=>'66BBFF');
    
    // Define cell style arrays
    $styleCell = array('valign'=>'center');
    $styleCellBTLR = array('valign'=>'center', 'textDirection'=>PHPWord_Style_Cell::TEXT_DIR_BTLR);

    // Define font style for first row
    $fontStyle = array('bold'=>true, 'align'=>'center');
    $frontPageFontStyle = array('bold'=>false, 'size'=>18, 'align'=>'center');
    $headingFontStyle = array('bold'=>true, 'size'=>18, 'align'=>'center');
    $subHeadingFontStyle = array('bold'=>true, 'underline'=> PHPWord_Style_Font::UNDERLINE_SINGLE, 'align'=>'center');
    // Add table style
    $this->word->addTableStyle('myOwnTableStyle', $styleTable);
    foreach($data['buildingdetails'] as $detail){
     $companyType = '';
     foreach($data['company_types'] as $type) {
                        if($type->id == $detail->company_type) {
                            $companyType =  $type->company_type;
                        }
                    }
     $countryName = '';
     foreach($data['countries'] as $country) {
                        if($country->id == $detail->country) {
                            $countryName =  $country->name;
                        }
                    }
     $constructionDate = date( 'F', mktime(0, 0, 0, $detail->month_contructed) )." ".$detail->year_constructed;
     $inspectionResult = '';
     if($detail->status == 1) {
                         $inspectionResult =  "Pass";
                    }
     else {
                         $inspectionResult =  "Fail";
                    }
    
        $section->addText($detail->buildingname, $headingFontStyle);
     $section->addText("",$fontStyle);
     $section->addText("Company Details",$subHeadingFontStyle);
     $section->addText('Company/Owner Name: ', $fontStyle);
     $section->addText($detail->company);
     $section->addText('Company Type: ', $fontStyle);
     $section->addText($companyType);
     $section->addText('Address: ', $fontStyle);
     $section->addText($detail->address_line_1);
     if($detail->address_line_2 != ""){
      $section->addText($detail->address_line_2);
     }
     $section->addText('Suburb: ', $fontStyle);
     $section->addText($detail->suburb);
     $section->addText('City: ', $fontStyle);
     $section->addText($detail->city);
     $section->addText('Country: ', $fontStyle);
     $section->addText($countryName);
     $section->addText('Phone: ', $fontStyle);
     $section->addText($detail->phone);
     $section->addText('E Mail: ', $fontStyle);
     $section->addText($detail->email);
     $section->addText("",$fontStyle);
$filename='report.docx'; //save our document as this file name
    header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document'); //mime type
    header('Content-Disposition: attachment;filename="'.$filename.'"'); //tell browser what's the file name
    header('Cache-Control: max-age=0'); //no cache
    $objWriter = PHPWord_IOFactory::createWriter($this->word, 'Word2007');
    $objWriter->save('php://output');

                exit;
}


Messages In This Thread
Separating the controller and the view - by El Forum - 11-26-2013, 03:44 AM
Separating the controller and the view - by El Forum - 11-26-2013, 10:00 AM



Theme © iAndrew 2016 - Forum software by © MyBB