<?php

  //================================================================================================

  class Section {

    public $section;

    public $sectionSql;

    public $sqlSelect;
    public $sqlSelectColumns;
    public $sqlSelectWhere;
    public $sqlSelectLimit;

    public $recordSqlSelect;

    //================================================================================================
    // Function Constructor()
    //================================================================================================

    public function __construct( $section, $sectionSql ) {
            
      $this->section = $section;

      $this->sectionSql = $sectionSql;

      $sectionId = $this->section["sectionId"];
      $sectionType = $this->section["sectionType"];
      $sectionTitle = $this->section["sectionTitle"];
      
      $this->section["sectionFilter"]["sectionFilterNavigation"] = "Results 1-31";          

      $this->section["sectionFilter"]["sectionFilterSelected"] = ["attributes"=>[ "type"=>"hidden", "id"=>"Selected" ] ];

      $this->section["sectionFilter"]["sectionFilterLimit"] = ["attributes"=>[ "type"=>"select", "id"=>"Limit", "value"=>"25" ], "label"=>"items per page", "options"=>["1"=>"1", "5"=>"5", "10"=>"10", "25"=>"25", "50"=>"50", "100"=>"100", "200"=>"200"] ];

      $this->section["sectionFilter"]["sectionFilterButton"] = [
        ["attributes"=>[ "type"=>"submit", "id"=>"search", "class"=>"filter-action-button", "value"=>"search", "form" => $sectionId."SectionForm", "formaction"=>"javascript:application.processUserRequest({action:'updateTable', section: { sectionId:'$sectionId', sectionType:'$sectionType'} })"]],
        ["attributes"=>[ "type"=>"submit", "id"=>"clear", "class"=>"filter-action-button", "value"=>"clear"]]
      ];

      $this->section["sectionTable"]["sectionTableMenuButton"] = [
        ["attributes"=>[ "type" => "submit", "id" => "newRecord", "class" => "smb-input", "value" => "new", "form" => $sectionId."SectionForm", "formaction" => "javascript:application.processUserRequest({action:'newRecord', section: { sectionId:'$sectionId', sectionType:'$sectionType', sectionTitle:'$sectionTitle'} })"]],
        ["attributes"=>[ "type" => "submit", "id" => "editRecord", "class" => "smb-input", "value" => "edit", "form" => $sectionId."SectionForm", "formaction" => "javascript:application.processUserRequest({action:'editRecord', section: { sectionId:'$sectionId', sectionType:'$sectionType', sectionTitle:'$sectionTitle'} })"]],
        ["attributes"=>[ "type" => "submit", "id" => "openDocumentView", "class" => "smb-input", "value" => "preview", "form" => $sectionId."SectionForm", "formaction" => "javascript:application.processUserRequest({action:'openDocumentView', section: { sectionId:'$sectionId', sectionType:'$sectionType'} })"]]
      ];

      $this->section["sectionRecord"]["sectionRecordActionButton"] = [
        ["attributes"=>[ "type"=>"submit", "id"=>$sectionId."Save", "class"=>"action-button", "value"=>"Save", "form" => $sectionId."RecordForm", "formaction"=>"javascript:application.processUserRequest({action:'saveRecord', section: { sectionId:'$sectionId', sectionType:'$sectionType'} })"]],
        ["attributes"=>[ "type"=>"submit", "id"=>$sectionId."Close", "class"=>"action-button", "value"=>"Close", "form" => $sectionId."RecordForm", "formaction"=>"javascript:application.processUserRequest({action:'closeRecord', section: { sectionId:'$sectionId', sectionType:'$sectionType'} })"]],
        ["attributes"=>[ "type"=>"submit", "id"=>$sectionId."New", "class"=>"action-button", "value"=>"New", "form" => $sectionId."RecordForm", "formaction"=>"javascript:application.processUserRequest({action:'closeAndNewRecord', section: { sectionId:'$sectionId', sectionType:'$sectionType'} })"]]
      ];

      $this->sqlSelectColumns = $this->sectionSql->sectionTable_sqlSelectColumns;

      $this->recordSqlSelect = $this->sectionSql->sectionRecord_sqlSelect;

      $this->set_sectionFilterLimit(25);
      
      // Set the section filter attributes
      $this->set_sectionFilterAttributes();
    }

    //================================================================================================
    // Function set_sectionFilterId()
    //================================================================================================

    public function set_sectionFilterAttributes() {

      // Create the filter prefix
      $sectionId = $this->section["sectionId"];
      $filterPrefix = sprintf("%1\$sFilter_%1\$s", $sectionId);
      
      // Set the selected filter attributes id and name
      $attributes = &$this->section["sectionFilter"]["sectionFilterSelected"]["attributes"];
      $attributes["id"] = $filterPrefix . $attributes["id"];
      $attributes["name"] = $attributes["id"];
      $attributes["form"] = sprintf("%sSectionForm", $sectionId);
      $attributes["class"] = 'sfi-element';

      // Set the limit filter attributes id and name
      $attributes = &$this->section["sectionFilter"]["sectionFilterLimit"]["attributes"];
      $attributes["id"] = $filterPrefix . $attributes["id"];
      $attributes["name"] = $attributes["id"];
      $attributes["form"] = sprintf("%sSectionForm", $sectionId);
      $attributes["class"] = 'sfi-element';
      
      // Set the filter attributes id and name
      $filterPrefix = sprintf("%sFilter_", $sectionId);
      foreach ($this->section["sectionFilter"]["sectionFilterInput"] as &$filterInput) {
        $filterInput['attributes']["id"] = $filterPrefix . $filterInput['attributes']["id"];
        $filterInput['attributes']["name"] = $filterInput['attributes']["id"];
        $filterInput['attributes']["form"] = sprintf("%sSectionForm", $sectionId);
        $filterInput['attributes']["class"] = 'sfi-element';
      }
    }

    //================================================================================================
    // Function set_sectionTitle()
    //================================================================================================

    public function set_sectionTitle($sectionTitle) {
      $this->section["sectionTitle"] = $sectionTitle;
      
      if (($sectionTitle !== "") && (substr($sectionTitle, -3) === 'ies')) { $sectionTitle = substr_replace($sectionTitle, "y", -3); }
      if (($sectionTitle !== "") && (substr($sectionTitle, -1) === 's')) { $sectionTitle = substr_replace($sectionTitle, "", -1); }
      
      $this->section["sectionTypeDescription"] = $sectionTitle;
    }

    //================================================================================================
    // Function set_sectionFilterLimit()
    //================================================================================================

    public function set_sectionFilterLimit($limit) {
      $this->section["sectionFilter"]["sectionFilterLimit"]["value"] = sprintf("%d", $limit);
      $this->set_sqlSelectLimit($limit);
    }

    //================================================================================================
    // Function set_sectionTableRecordset()
    //================================================================================================

    public function set_sectionTableRecordset() {
      $this->section["sectionTable"]["sectionTableRecordset"] = $this->sectionSql->selectQuery( $this->sqlSelect );
    }

    //================================================================================================
    // Function set_sectionRecordRecordset()
    //================================================================================================

    public function set_sectionRecordRecordset($recordId) {
      $this->sectionSql->set_sectionRecord_sqlSelect($recordId);
      $this->section["sectionRecord"]["sectionRecordRecordset"] = $this->sectionSql->selectQuery( $this->sectionSql->sectionRecord_sqlSelect );
    }

    //================================================================================================
    // Function set_sqlSelectWhere()
    //================================================================================================

    public function set_sqlSelectWhere($sqlSelectWhere) {
      $this->sqlSelectWhere = $sqlSelectWhere;
      $this->sqlSelect = sprintf("%s %s %s", $this->sqlSelectColumns, $this->sqlSelectWhere, $this->sqlSelectLimit);
    }

    //================================================================================================
    // Function set_sqlSelectLimit()
    //================================================================================================

    public function set_sqlSelectLimit($limit) {
      $this->sqlSelectLimit = sprintf("LIMIT %1\$d", $limit);
      $this->sqlSelect = sprintf("%s %s %s", $this->sqlSelectColumns, $this->sqlSelectWhere, $this->sqlSelectLimit);
    }

    //================================================================================================
    // Function createJsonSectionData()
    //================================================================================================

    public function createJsonSectionData() {
      $jsonSectionData = json_encode($this->section, JSON_PRETTY_PRINT);
      //$jsonSectionData = substr($jsonSectionData, 1, -1);
      return $jsonSectionData;
    }
    
  }

  //================================================================================================

?>