diff Keyword.class.php @ 1:f5a9f0eb4858

deleted: LICENSE.ja
author Sushi-k <epgrec@park.mda.or.jp>
date Wed, 08 Jul 2009 11:44:50 +0900
parents
children e5f9aa34d06f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Keyword.class.php	Wed Jul 08 11:44:50 2009 +0900
@@ -0,0 +1,143 @@
+<?php
+include_once('config.php');
+include_once( INSTALL_PATH . "/DBRecord.class.php" );
+include_once( INSTALL_PATH . "/reclib.php" );
+include_once( INSTALL_PATH . "/Reservation.class.php" );
+
+class Keyword extends DBRecord {
+	
+	public function __construct($property = null, $value = null ) {
+		try {
+			parent::__construct(TBL_PREFIX.KEYWORD_TBL, $property, $value );
+		}
+		catch( Exception $e ) {
+			throw $e;
+		}
+	}
+	
+	private function getPrograms() {
+		if( $this->id == 0 ) return false;
+		
+		// ちょっと先を検索する
+		$options = " WHERE starttime > '".date("Y-m-d H:i:s", time() + PADDING_TIME + 120 )."'";
+		
+		if( $this->keyword != "" ) {
+			if( $this->use_regexp ) {
+				$options .= " AND CONCAT(title,description) REGEXP '".mysql_real_escape_string($this->keyword)."'";
+			}
+			else {
+				$options .= " AND CONCAT(title,description) like '%".mysql_real_escape_string($this->keyword)."%'";
+			}
+		}
+		
+		if( $this->type != "*" ) {
+			$options .= " AND type = '".$this->type."'";
+		}
+		
+		if( $this->category_id != 0 ) {
+			$options .= " AND category_id = '".$this->category_id."'";
+		}
+		
+		if( $this->channel_id != 0 ) {
+			$options .= " AND channel_id = '".$this->channel_id."'";
+		}
+		
+		$options .= " ORDER BY starttime ASC";
+		
+		$recs = array();
+		try {
+			$recs = DBRecord::createRecords( TBL_PREFIX.PROGRAM_TBL, $options );
+		}
+		catch( Exception $e ) {
+			throw $e;
+		}
+		
+		return $recs;
+	}
+	
+	
+	public function reservation() {
+		if( $this->id == 0 ) return;
+		
+		$precs = array();
+		try {
+			$precs = $this->getPrograms();
+		}
+		catch( Exception $e ) {
+			throw $e;
+		}
+		if( count($precs) < 300 ) {
+			// 一気に録画予約
+			foreach( $precs as $rec ) {
+				try {
+					if( $rec->autorec ) {
+						Reservation::simple( $rec->id, $this->id );
+						usleep( 100 );		// あんまり時間を空けないのもどう?
+					}
+				}
+				catch( Exception $e ) {
+					// 無視
+				}
+			}
+		}
+		else {
+			throw new Exception( "300件以上の自動録画は実行できません" );
+		}
+	}
+	
+	public function delete() {
+		if( $this->id == 0 ) return;
+		
+		$precs = array();
+		try {
+			$precs = $this->getPrograms();
+		}
+		catch( Exception $e ) {
+			throw $e;
+		}
+		// 一気にキャンセル
+		foreach( $precs as $rec ) {
+			try {
+				$reserve = new DBRecord( TBL_PREFIX.RESERVE_TBL, "program_id", $rec->id );
+				// 自動予約されたもののみ削除
+				if( $reserve->autorec ) {
+					Reservation::cancel( $reserve->id );
+					usleep( 100 );		// あんまり時間を空けないのもどう?
+				}
+			}
+			catch( Exception $e ) {
+				// 無視
+			}
+		}
+		try {
+			parent::delete();
+		}
+		catch( Exception $e ) {
+			throw $e;
+		}
+	}
+
+	// staticなファンクションはオーバーライドできない
+	static function createKeywords( $options = "" ) {
+		$retval = array();
+		$arr = array();
+		try{
+			$tbl = new self();
+			$sqlstr = "SELECT * FROM ".$tbl->table." " .$options;
+			$result = $tbl->__query( $sqlstr );
+		}
+		catch( Exception $e ) {
+			throw $e;
+		}
+		if( $result === false ) throw new exception("レコードが存在しません");
+		while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
+			array_push( $retval, new self('id', $row['id']) );
+		}
+		return $retval;
+	}
+	
+	public function __destruct() {
+		parent::__destruct();
+	}
+}
+?>
\ No newline at end of file