程式CODE

顯示具有 SFS3相關 標籤的文章。 顯示所有文章
顯示具有 SFS3相關 標籤的文章。 顯示所有文章

2013年9月30日 星期一

SFS3自製模組時,若需要輸出SXW檔的語法


SXW其實是個zip檔

所以,原理就是把一些需要的檔案zip出來,

檔名設定為SWX即可。



以下為範例

<?

//輸出個別sxw檔
function make_ooo($title_name,$action,$ClassName,$SubjectName,$TeacherName){
    global $CONN,$UPLOAD_PATH;
    //Openofiice的路徑  
    $oo_path=$UPLOAD_PATH."time_table/sample";  
    $filename=$title_name."_time_table.sxw";
   
    //新增一個 zipfile 實例
    $ttt = new EasyZip;
    $ttt->setPath($oo_path);
    //加入 xml 檔案到 zip 中,共有五個檔案
    //讀入應該要包進去的檔,含圖檔
        if (is_dir($oo_path)) {
        if ($dh = opendir($oo_path)) {
            while (($file = readdir($dh)) !== false) {
                if($file=="." or $file==".." or $file=="content.xml" or $file=="Configurations2" or $file=="Thumbnails" or strtoupper(substr($file,-4))=='.SXW') {
                    continue;
                }elseif(is_dir($oo_path."/".$file)){
                    if ($dh2 = opendir($oo_path."/".$file)) {
                        while (($file2 = readdir($dh2)) !== false) {
                            if($file2=="." or $file2==".."){
                                continue;
                            }else{
                                $data = $ttt->read_file($oo_path."/".$file."/".$file2);
                                $ttt->add_file($data,$file."/".$file2);
                            }
                        }
                        closedir($dh2);
                    }
                }else{
                    $data = $ttt->read_file($oo_path."/".$file);
                    $ttt->add_file($data,$file);
                }
            }
            closedir($dh);
        }
    }
   
      //再讀出 content.xml
    $data = $ttt->read_file($oo_path."/content.xml");
   
    // 加入換頁 tag
    $data = str_replace("<office:automatic-styles>",'<office:automatic-styles><style:style style:name="sfs_break_page" style:family="paragraph" style:parent-style-name="Standard"><style:properties fo:break-before="page"/></style:style>',$data);
   
    //拆解 content.xml
    $arr1 = explode("<office:body>",$data);
    //檔頭
    $con_head = $arr1[0]."<office:body>";
    $arr2 = explode("</office:body>",$arr1[1]);
    //資料內容
    $con_body = $arr2[0];
    //檔尾
    $con_foot = "</office:body>".$arr2[1];


        if($action=="teacher"){
      $class_name="◎◎教室";
      $tea_array=explode("_",$title_name);
      $teacher_name=get_teacher_name($tea_array[2]);
    }
        if($action=="class"){
      //查出某班的導師姓名
      $class_array=explode("_",$title_name);
      $classnum=substr($class_array[2].$class_array[3],1,3);
     
      $str = "select teacher_sn from teacher_post where class_num='".$classnum."'";
          $result = $CONN->Execute($str) or die ($str);
          list($teacher_sn)=$result->FetchRow();
          $teacher_name=get_teacher_name($teacher_sn);
         
          $class_base_p=class_base();
      $class_name=$class_base_p[$classnum];
     
      //導師時間
      for($i=1;$i<=5;$i++){
        $SubjectName[$i][0]="導師時間";
        $TeacherName[$i][0]=$teacher_name;
      }
     
    }
        //置換今年度
        $tyear=substr($title_name,0,3);
        $con_body = str_replace("year",$tyear,$con_body);
       
        //置換班級名及教師名
    $class_name=iconv("big5","UTF-8",$class_name);
        $con_body = str_replace("class",$class_name,$con_body);
    $teacher_name=iconv("big5","UTF-8",$teacher_name);
        $con_body = str_replace("teacher",$teacher_name,$con_body);      
   
   
    //sxw檔的中文是UTF-8,SFS3裡的字串先由big5轉為utf8
    for($i=1;$i<=5;$i++){
      for($j=0;$j<=7;$j++){
        $SubjectName[$i][$j]=iconv("big5","UTF-8",$SubjectName[$i][$j]);
        //如果科目名稱大於四個字,只好取前兩個字
        if(strlen($SubjectName[$i][$j])>12){
          $SubjectName[$i][$j] = mb_substr($SubjectName[$i][$j],0,2,"UTF-8");
        }
        //如果科目名稱大於兩個字,換行
        if(strlen($SubjectName[$i][$j])>6){
          $SubjectName[$i][$j] = mb_substr($SubjectName[$i][$j],0,2,"UTF-8")."</text:p><text:p text:style-name='P7'>".mb_substr($SubjectName[$i][$j],2,2,"UTF-8");
        }
       
        $con_body = str_replace("s".$i.$j,$SubjectName[$i][$j],$con_body);
       
        $ClassName[$i][$j]=iconv("big5","UTF-8",$ClassName[$i][$j]);
        $con_body = str_replace("c".$i.$j,$ClassName[$i][$j],$con_body);
       
        $TeacherName[$i][$j]=iconv("big5","UTF-8",$TeacherName[$i][$j]);
        $con_body = str_replace("t".$i.$j,$TeacherName[$i][$j],$con_body);
       
      }
        }
       
       

       
       
        $replace_data=$con_head.$con_body.$con_foot;
       
        //把一些多餘的標籤以空白取代
    $pattern[]="/\{([^\}]*)\}/";
    $replacement[]="";
   
    $replace_data=preg_replace($pattern, $replacement, $replace_data);
    $ttt->add_file($replace_data,"content.xml");

   
    //產生 zip 檔
    $sss = $ttt->file();

    //以串流方式送出 ooo.sxw
    header("Content-disposition: attachment; filename=$filename");
    header("Content-type: application/vnd.sun.xml.writer");
    header("Pragma: no-cache");
    header("Expires: 0");
    echo $sss;  
    exit;
}

?>





另外,若要使用者上傳SWX檔,就要先unzip這個檔,

放置好位置,需要輸出時,再zip出來,改附檔名,下載。

不過,我還沒有研究出來。

SFS3自製模組時,若需要以PHP輸出WORD DOC檔的語法


這其實是有點強迫用WORD來開網頁的方法啦

下載後,再用word另存成doc檔。

有需要的話,也可自行在<style></style>中,自行增加CSS語法(也不一定WORD能表現出來啦)

參考自:CSS解說



<?

  header("Content-type: application/msword");
  header("Content-Disposition: attachment; filename=文件檔名.doc");
  header("Pragma: no-cache");
  header("Expires: 0");



echo "

<html xmlns:o='urn:schemas-microsoft-com:office:office'
  xmlns:w='urn:schemas-microsoft-com:office:word'
  xmlns='http://www.w3.org/TR/REC-html40'>
  <meta http-equiv=Content-Type content='text/html; charset=big5'>
  <head><title>可打標題</title>
  <xml>
  <w:WordDocument>
  <w:View>Print</w:View>
  <w:Zoom>100</w:Zoom>
  </w:WordDocument>
  </xml>
  <style>
  @page Section1
  {size:".$size.";
  mso-page-orientation:".$paper.";
  margin:42.55pt 2.0cm 42.55pt 2.0cm;
  mso-header-margin:42.55pt;
  mso-footer-margin:49.6pt;
  mso-paper-source:0;
  layout-grid:19.05pt;}
  div.Section1
  {page:Section1;}
   </style></head><body lang=ZH-TW><div class="Section1">

";

echo "WORD的內容文字、表格";



?>

SFS3自製模組時,若需要輸出PDF的語法


在config.php裡,需引入sfs_case_chinese.php

PDF_Chinese()物件:產生PDF檔



以下語法為參考

FPDF參考語法

//產生pdf檔,左右空格10...左到右共297,上下共210
$pdf=new PDF_Chinese();
    $pdf->Open();
    $pdf->AddBig5Font();
    $pdf->AddPage(L,A4);
    $pdf->Line(149,0,148,210);
    $pdf->SetFont('Big5','B',16);
//標題
    $pdf->Cell(139,20,$schoolname,0,0,C);
    $pdf->Cell(138,20,$schoolname,0,0,C);
    $pdf->Ln();
//首行
    $pdf->SetFont('Big5','',9);
    $pdf->Cell(15,8,"請假日期",1,0,C);
    $pdf->SetFont('Big5','',12);
    $pdf->Cell(71,8,$abs_date,1,0,C);
    $pdf->Cell(20,8,"請假教師",1,0,C);
    $pdf->Cell(22,8,$teacher_name,1,0,C);
    $pdf->Cell(20,8,"",0);
    $pdf->SetFont('Big5','',9);
    $pdf->Cell(15,8,"請假日期",1,0,C);
    $pdf->SetFont('Big5','',12);
    $pdf->Cell(71,8,$abs_date,1,0,C);
    $pdf->Cell(20,8,"請假教師",1,0,C);
    $pdf->Cell(22,8,$teacher_name,1,0,C);
    $pdf->Ln();
//第2行
        $pdf->SetFont('Big5','',9);
        $pdf->Cell(7,8,"假別",1,0,C);
        $pdf->SetFont('Big5','',12);
        $pdf->Cell(27,8,$abs_kind,1,0,C);
        $pdf->Cell(15,8,"事由",1,0,C);
        $pdf->SetFont('Big5','',9);
        $pdf->Cell(79,8,$reason,1);
        $pdf->SetFont('Big5','',12);
        $pdf->Cell(20,8,"",0);
    $pdf->SetFont('Big5','',9);
    $pdf->Cell(7,8,"假別",1,0,C);
    $pdf->SetFont('Big5','',12);
        $pdf->Cell(27,8,$abs_kind,1,0,C);
        $pdf->Cell(15,8,"事由",1,0,C);
        $pdf->SetFont('Big5','',9);
        $pdf->Cell(79,8,$reason,1);
        $pdf->SetFont('Big5','',12);
        $pdf->Ln();
    $pdf->Output();
}

SFS3自製模組加參數


module-cfg.php檔的最後

$midnoon_arr=array('5'=>'4~5節間','6'=>'5~6節間','7'=>'6~7節間');
$SFS_MODULE_SETUP[1] =
    array('var'=>"class_chk_list", 'msg'=>"教務處查堂記錄表項目", 'value'=>'使用教具情形,教室管理,按課表操作,遲到早退?,使用參考書');
$SFS_MODULE_SETUP[2] =
        array('var'=>"midnoon", 'msg'=>"午休節次", 'value'=>$midnoon_arr);





然後在config.php最加加上

//取得模組設定
$m_arr = &get_sfs_module_set();
extract($m_arr, EXTR_OVERWRITE);



 然後就可以在模組內使用變數 $class_chk_list....等等

SFS3網管者功能不見了


若「陳老師」這個預設的網管者刪了....

可使用phpMyAdmin修改pro_check_new這個資料表

找到 p_id為1的這筆資料

更改pro_kind_id 的值為1

     id_kind 的值為「教師」

     id_sn 的值改為目前設為網管者的sn(可在teacher_base裡查到)

     is_admin 的值為1



這樣可以讓一些有「管理權限」的模組可以正常讓網管者管理

SFS3模組學習-公用變數


include_once "../../include/config.php";

    curr_year()  本學年

    corr_seme()  本學期

    $_SESSION['session_tea_sn']  登入的老師sn

SFS3模組自學-常用公共函式1


引入include_once "../../include/config.php";

head()
sfs檔頭

sfs_ckeck()
sfs權限檢查

foot()
sfs檔尾

select_teacher_arr()
列出本學期老師的選單1

select_teacher()
列出本學期老師的選單2-沒有預設值

get_teacher_name(教師sn)
列出教師sn的名子

get_teacher_post_data(教師sn)
列出教師sn的資料陣列:0:姓名;1:職稱;2:處室代號;3:班級;

teacher_base()
教師的名子陣列:

make_menu($school_menu_p)
模組的功能選單...可在模組內的config.php設定$school_munu_p
例:$school_menu_p = array(
"index.php"=>"代課銜接申請",
"years.php"=>"個人歷次查詢",
"view.php"=>"全體代課一覽",
"admin.php"=>"代課銜接管理",
);



class_base()
列出班級,例class_base(101),傳回一年一班



//判別是不是有管理權的教師
$SCRIPT_FILENAME = $_SERVER['SCRIPT_FILENAME'];
$module_manager=checkid($SCRIPT_FILENAME,1);
if($module_manager) {
  你有管理權
}else{
  你沒有管理權
}



然後在module-cfg.php增加

//本模組須區分管理權
$MODULE_MAN = 1 ;

//管理權說明
$MODULE_MAN_DESCRIPTION = "具有管理權人員,可排定代課老師及增加、刪除或觀看任一教師代課銜接單,一般使用者僅可新增自己的代課銜接表";



引入sfs_case_menu.php

year_seme_menu(預設學年度,預設學期)
學年度學期下拉選單

引入sfs_case_dataarray.php

tea_abs_kind()
傳回教師的請假類別陣列

引入sfs_case_subjectscore.php

get_ss_name($scope_id="",$subject_id="",$mode="",$ss_id="")
傳回科目名稱
$scope_id
$subjesct_id
$mode長或短名
$ss_id課目代號

引入sfs_case_chinese.php

PDF_Chinese()物件:產生PDF檔

使用fpdf方法可參考這裡



引入sfs_API.php


get_teach_class():傳回任教班級的num



//取登入老師的sn
$teacher_sn = $_SESSION['session_tea_sn'];

SFS3模組自學-首頁功能表的做法


index首頁的功能表

$tool_bar=&make_menu($school_menu_p);

在模組內的config.php可設定

//目錄內程式
$school_menu_p = array(
"index.php"=>"第1選單",
"index2.php"=>"第2選單"
);

SFS3判別校內IP

由 系統管理/模組權限管理 進入

點選校務行政,找到 「校務佈告欄模組」 的「調整」選項,

設定 insite_ip 的值 (以學校實際IP設定)

例:
一個 C class 網段值為 163.17.40
半個 C class 網段值為 163.17.40.1-163.17.40.128
多個 網段時,以 , 隔開 163.17.40,163.17.39.1-163.17.39.128

2013年8月1日 星期四

SFS3校務公佈欄的中文檔名附件的問題有解

來自:
http://plog.ymes.chc.edu.tw/post/1/546

一、安裝mod-encoding

sudo apt-get install libapache2-mod-encoding


二、增加設定檔

sudo vim /etc/apache2/mods-available/encoding.conf

填入
<IfModule mod_encoding.c>
EncodingEngine on
NormalizeUsername on
SetServerEncoding Big5
DefaultClientEncoding Big5 UTF-8
AddClientEncoding "(Microsoft .* DAV $)" Big5 UTF-8
AddClientEncoding "Microsoft .* DAV" Big5 UTF-8
AddClientEncoding "Microsoft-WebDAV*" Big5 UTF-8
</IfModule>
三、設定encoding.load及encoding.conf連結

到mods-enabled目錄
cd /etc/apache2/mods-enabled

連結
sudo ln -s ../mods-available/encoding.load
sudo ln -s ../mods-available/encoding.conf


四、重啟apache

sudo /etc/init.d/apache2 restart

2013年4月7日 星期日

SFS3函式庫

取得年度學期選單
$date_select=class_ok_setup_year($sel_year,$sel_seme,"year_seme","jumpMenu_seme");

<script language='JavaScript'>
function jumpMenu(){
location=\"$PHP_SELF?act=$act&&year_seme=\" + document.myform.year_seme.options[document.myform.year_seme.selectedIndex].value + \"&class_id=\" + document.myform.class_id.options[document.myform.class_id.selectedIndex].value;
}
</script>




年級與班級選單
class_select=get_class_select($sel_year,$sel_seme,"","class_id","jumpMenu",$class_id);

<script language='JavaScript'>

function jumpMenu_seme(){
if(document.myform.year_seme.options[document.myform.year_seme.selectedIndex].value!=''){
location=\"$PHP_SELF?act=$act&year_seme=\" + document.myform.year_seme.options[document.myform.year_seme.selectedIndex].value;
}
}

</script>