diff options
Diffstat (limited to 'demos/quickstart/protected')
| -rw-r--r-- | demos/quickstart/protected/application.xml | 1 | ||||
| -rw-r--r-- | demos/quickstart/protected/comments/CommentList.php | 59 | ||||
| -rw-r--r-- | demos/quickstart/protected/comments/CommentList.tpl | 102 | ||||
| -rw-r--r-- | demos/quickstart/protected/comments/QuickStartComments.php | 175 | ||||
| -rw-r--r-- | demos/quickstart/protected/comments/comments.db | bin | 0 -> 6144 bytes | |||
| -rw-r--r-- | demos/quickstart/protected/controls/Layout.tpl | 1 | ||||
| -rw-r--r-- | demos/quickstart/protected/pages/Advanced/I18N.page | 6 | ||||
| -rw-r--r-- | demos/quickstart/protected/pages/Comments.page | 46 | ||||
| -rw-r--r-- | demos/quickstart/protected/pages/Comments.php | 76 | 
9 files changed, 464 insertions, 2 deletions
| diff --git a/demos/quickstart/protected/application.xml b/demos/quickstart/protected/application.xml index fed0ec22..7ed4a749 100644 --- a/demos/quickstart/protected/application.xml +++ b/demos/quickstart/protected/application.xml @@ -19,6 +19,7 @@    </modules>
    <paths>
      <using namespace="Application.controls.*" />
 +	<using namespace="Application.comments.*" />
    </paths>
    <services>
      <service id="page" class="TPageService" DefaultPage="GettingStarted.Introduction" />
 diff --git a/demos/quickstart/protected/comments/CommentList.php b/demos/quickstart/protected/comments/CommentList.php new file mode 100644 index 00000000..4328991f --- /dev/null +++ b/demos/quickstart/protected/comments/CommentList.php @@ -0,0 +1,59 @@ +<?php + +Prado::using('System.I18N.*'); + +/** + * CommentList class. + * + * @author Wei Zhuo <weizhuo[at]gmail[dot]com> + * @version : $  Sat May 27 17:53:15 AZOST 2006 $ + * @package Demo.Quickstart.comments + * @since 3.0 + */ +class CommentList extends TTemplateControl +{ +	private $_exclude = array( +		'Comments',  +		'Markdown', +		'Search', +		'GettingStarted.Introduction'); + +	private $_quickstart; +	 +	public function onLoad($param) +	{ +		parent::onLoad($param); +		 +		$this->_quickstart = new QuickStartComments(); +	 +		$page = $this->getService()->getRequestedPagePath(); + +		$this->listComments($page); +	} +	 +	protected function listComments($page) +	{ +		$this->comments->setDataSource($this->_quickstart->getComments($page)); +		$this->comments->dataBind();		 +	} + +	public function addComment_Clicked($sender, $param) +	{ +		$page = $this->getService()->getRequestedPagePath(); +		$this->_quickstart->addNewComment($page,  +			$this->email->getText(), $this->content->getText()); +		$this->multiView1->setActiveViewIndex(1); +		$this->listComments($page); +	} +	 +	public function setVisible($value) +	{ +		$page = $this->getService()->getRequestedPagePath(); +		if(in_array($page, $this->_exclude)) +			parent::setVisible(false); +		else +			parent::setVisible($value); +	} +} + +?>
\ No newline at end of file diff --git a/demos/quickstart/protected/comments/CommentList.tpl b/demos/quickstart/protected/comments/CommentList.tpl new file mode 100644 index 00000000..0aeb2c81 --- /dev/null +++ b/demos/quickstart/protected/comments/CommentList.tpl @@ -0,0 +1,102 @@ +<div id="comments"> + +<com:TRepeater ID="comments"> +	<prop:HeaderTemplate> +		<h2 class="comment_header">Comments  +			<span style="font-size:0.8em">( <a href="#add_comments">Add your comments</a> )</span></h2> +	</prop:HeaderTemplate> +	<prop:ItemTemplate> +		<div class="comment_item comment_item<%# $this->ItemIndex%2 %>"> +			<span class="number" id="comment_<%# $this->ItemIndex+1 %>"><%# $this->ItemIndex+1 %></span> +			<span class="email"> +				<%# str_replace(array('@','.'),array(' at ',' dot '), strtoupper($this->DataItem['email'])) %> +			</span> +			<span class="date"> +				<com:TDateFormat Value=<%# intval($this->DataItem['date_added']) %> /> +			</span> +			<div class="comment"> +				<com:TSafeHtml> +				<com:TMarkdown TextHighlighter.CssClass="source"> +					<%# $this->DataItem['comment'] %> +				</com:TMarkdown> +				</com:TSafeHtml> +			</div> +		</div> +	</prop:ItemTemplate> +</com:TRepeater> + +<com:TMultiView ID="multiView1" ActiveViewIndex="0"> +	<com:TView ID="view1"> +		<div id="add_comments" class="add_comments"> +			<h3>Post a comment</h3> +			<p><strong>Note:</strong>  +				Please only use the comments in relation to this page for +				<ul>  +					<li>questions/critcisms/suggestions on the documentation,</li> +					<li>small notes that can solve or clarify a particular problem or task.</li> +				</ul> +				If you experience errors please <a href="http://trac.pradosoft.com/newticket">file a ticket</a>  +				or <a href="http://www.pradosoft.com/forum/">ask at the forum</a>. +				Please use the <a href="http://pradosoft.com/wiki/index.php/Main_Page">Prado wiki</a> for longer pieces and detailed solutions</a>. +			</p> +			<p>Comments will be periodically reviewed, integrated into the documentation and removed. +			You may use <a href="?page=Markdown">markdown syntax</a> in your comment. </p> + +			<div class="comment_email"> +			<com:TLabel ID="email_label" Text="Email:" ForControl="email"/> +			<com:TTextBox ID="email" /> +			<com:TRequiredFieldValidator +				ControlToValidate="email" +				Display="Dynamic" +				ErrorMessage="An email address is required." /> +			<com:TEmailAddressValidator	 +				ControlToValidate="email"  +				CheckMXRecord="false" +				Display="Dynamic" +				ErrorMessage="Please provide your email address."/> +			</div> +			<div class="comment_content"> +				<com:TLabel ID="content_label" Text="Comment:" ForControl="content"/> +				<com:TTextBox ID="content" TextMode="MultiLine"/> +				<div class="please_add"> +				<com:TRequiredFieldValidator +					ControlToValidate="content" +					Display="Dynamic" +					ErrorMessage="Please add your comment." /> +				</div> +			</div> +			<com:TPlaceHolder Visible=<%= strlen($this->content->Text) %> > +			<div class="comment_preview"> +				<h3 style="margin:0">Preview comment</h3> +					<div class="comment"> +						<com:TSafeHtml> +							<com:TMarkdown TextHighlighter.CssClass="source"> +							<%= $this->content->Text %> +							</com:TMarkdown> +						</com:TSafeHtml> +					</div> +				</div> +			</com:TPlaceHolder>			 +			<div class="add_comment"> +				<com:TButton ID="previewComment" Text="Preview Comment" /> +				<com:TButton ID="addComment" Text="Add Comment" OnClick="addComment_Clicked"/> +			</div> +		</div> +	</com:TView> +	<com:TView ID="view2"> +		<div class="comment_added"> +		<div class="thank">Thank you, your comment is quequed for moderation.</div> +		<div class="comment_preview"> +			<h3 style="margin:0">Preview comment</h3> +			<div class="comment"> +			<com:TSafeHtml> +				<com:TMarkdown TextHighlighter.CssClass="source"> +				<%= $this->content->Text %> +				</com:TMarkdown> +			</com:TSafeHtml> +			</div> +		</div> +		</div> +	</com:TView> +</com:TMultiView> +</div>
\ No newline at end of file diff --git a/demos/quickstart/protected/comments/QuickStartComments.php b/demos/quickstart/protected/comments/QuickStartComments.php new file mode 100644 index 00000000..c138bd94 --- /dev/null +++ b/demos/quickstart/protected/comments/QuickStartComments.php @@ -0,0 +1,175 @@ +<?php + +/** + * QuickStartComments class. + * + * @author Wei Zhuo <weizhuo[at]gmail[dot]com> + * @version : $  Sat May 27 16:49:19 AZOST 2006 $ + * @package Demos.QuickStart.comments + * @since 3.0 + */ +class QuickStartComments +{ +	/** +	 * @var string sqlite database source. +	 */ +	private $_database; +	/** +	 * @var sqlite connection. +	 */ +	private $_connection; +	 +	/** +	 * Sets the sqlite comment database file. +	 */ +	public function __construct() +	{ +		$this->_database = realpath(dirname(__FILE__).'/comments.db'); +	} +	 +	/** +	 * Closed the database connection. +	 */ +	public function __destruct() +	{ +		if(!is_null($this->_connection)) +			sqlite_close($this->_connection); +	} +	 +	/** +	 * @return resource sqlite database connection. +	 */ +	protected function getConnection() +	{ +		if(is_null($this->_connection)) +			$this->_connection = sqlite_open($this->_database); +		return $this->_connection; +	} +	 +	/** +	 * Quote database input data. +	 */ +	protected function quote($value) +	{ +		return sqlite_escape_string($value); +	} +	 +	/** +	 * Executes an sqlite query. +	 * @param string SQL +	 * @return mixed query results. +	 */ +	protected function query($sql) +	{ +		return sqlite_query($this->getConnection(), $sql); +	} +	 +	/** +	 * Returns a row from the sqlite result. +	 * @param resource sqlite result +	 * @return array database record. +	 */ +	protected function fetch($resource) +	{ +		if($resource !== false) +			return sqlite_fetch_array($resource); +		else +			return false; +	} +	 +	/** +	 * Fetch all the records for given SQL query. +	 * @param string SQL query. +	 * @return array result set. +	 */ +	protected function fetchAll($sql) +	{ +		$rs = $this->query($sql); +		$rows = array(); +		while($row = $this->fetch($rs)) +			$rows[] = $row; +		return $rows; +	} +	 +	/** +	 * Returns all the comments for a given page. +	 * @param string specific page comments +	 * @return array list of comments +	 */ +	public function getComments($pageID) +	{ +		$page = $this->quote($pageID); +		$sql = "SELECT * FROM comments WHERE page=\"$page\" AND approved = 1 ORDER BY date_added ASC"; +		return $this->fetchAll($sql); +	} +	 +	/** +	 * Adds a new comment for moderation. +	 * @param string ID of the page to comment belongs +	 * @param string email address of the commenter +	 * @param string comment contents +	 */ +	public function addNewComment($pageID, $email, $comment) +	{ +		$page = $this->quote($pageID); +		$email = $this->quote($email); +		$comment = $this->quote($comment); +		$date_added = time(); +		$sql = <<<EOD +		INSERT INTO comments(page, email, comment, date_added) +				VALUES ("$page", "$email", "$comment", "$date_added") +EOD; +		return $this->query($sql); +	} +	 +	/** +	 * Update an existing comment. +	 * @param string comment ID +	 * @param string page ID +	 * @param string email address +	 * @param string updated comment. +	 */ +	public function updateComment($commentID, $page, $email, $content) +	{ +		$ID = intval($commentID); +		$email = $this->quote($email); +		$comment = $this->quote($content); +		$page = $this->quote($page); +		$sql = <<<EOD +		UPDATE comments SET  +			email = "$email", comment = "$comment", page = "$page" +			WHERE id = $ID; +EOD; +		$this->query($sql); +	} +	 +	/** +	 * Delete a comment. +	 * @param string comment ID +	 */ +	public function deleteComment($commentID) +	{ +		$ID = intval($commentID); +		$this->query("DELETE FROM comments WHERE id=$ID"); +	} +		 +	/** +	 * @return array all the quequed comments. +	 */ +	public function getQuequedComments() +	{ +		return $this->fetchAll("SELECT * FROM comments WHERE approved != 1"); +	} +	 +	/** +	 * Approve a quequed comment. +	 * @param string comment ID. +	 */ +	public function approveComment($commentID) +	{ +		$ID = intval($commentID); +		$this->query("UPDATE comments SET approved = 1 WHERE id=$ID"); +	} +} + +?>
\ No newline at end of file diff --git a/demos/quickstart/protected/comments/comments.db b/demos/quickstart/protected/comments/comments.dbBinary files differ new file mode 100644 index 00000000..b81d7123 --- /dev/null +++ b/demos/quickstart/protected/comments/comments.db diff --git a/demos/quickstart/protected/controls/Layout.tpl b/demos/quickstart/protected/controls/Layout.tpl index 6fbd1380..d4a6a7e5 100644 --- a/demos/quickstart/protected/controls/Layout.tpl +++ b/demos/quickstart/protected/controls/Layout.tpl @@ -32,6 +32,7 @@  <div id="content">
  <com:TContentPlaceHolder ID="body" />
  </div>
 +<com:CommentList Visible="true" />
  </td>
  </tr>
  </table>
 diff --git a/demos/quickstart/protected/pages/Advanced/I18N.page b/demos/quickstart/protected/pages/Advanced/I18N.page index 5b1fafa0..6c86a6c9 100644 --- a/demos/quickstart/protected/pages/Advanced/I18N.page +++ b/demos/quickstart/protected/pages/Advanced/I18N.page @@ -148,9 +148,11 @@ To translate a message or string in the template, use <tt>TTranslate</tt>.</p>  <com:TTranslate Text="Goodbye" />
  </com:TTextHighlighter>
 -<p><tt>TTranslate</tt> can also perform string substitution. Any attributes of <tt>TTranslate</tt> will be substituted with <tt>{attribute name}</tt> in the translation. E.g.</p>
 +<p><tt>TTranslate</tt> can also perform string substitution. 
 +The <tt>Parameters</tt> property can be use to add name values pairs for substitution. Substrings in the translation enclosed with "{" and "}" are consider as the
 + parameter names during substitution lookup. The following example will substitute the substring "{time}" with the value of the parameter attribute "<tt>Parameters.time=<%= time() %></tt>". 
  <com:TTextHighlighter Language="prado" CssClass="source">
 -<com:TTranslate time="late">
 +<com:TTranslate Parameters.time=<%= time() %> >
  The time is {time}.
  </com:TTranslate>
  </com:TTextHighlighter>
 diff --git a/demos/quickstart/protected/pages/Comments.page b/demos/quickstart/protected/pages/Comments.page new file mode 100644 index 00000000..32c7bcae --- /dev/null +++ b/demos/quickstart/protected/pages/Comments.page @@ -0,0 +1,46 @@ +<com:TContent ID="body"> +	<com:TDataList +	     ID="comments" +	     DataKeyField="id" +	     OnEditCommand="editComment" +	     OnCancelCommand="cancelEdit" +	     OnUpdateCommand="updateComment" +	     OnDeleteCommand="deleteComment" +		 OnSelectedIndexChanged="approveComment" +	     ItemStyle.BackColor="#BFCFFF" +	     AlternatingItemStyle.BackColor="#E6ECFF" +	     EditItemStyle.BackColor="lightgreen"> + +	<prop:HeaderTemplate> +	Comments awaiting approval +	</prop:HeaderTemplate> + +	<prop:ItemTemplate> +	  <span class="page"><%# $this->DataItem['page'] %></span> +	  <span class="date"> +		<com:TDateFormat Value=<%# intval($this->DataItem['date_added']) %> /> +	  </span> +	  <span class="email"> +	  <%# $this->DataItem['email'] %> +	  </span> +	<div class="comment"> +		<com:TSafeHtml> +		<%# $this->DataItem['comment']%> +		</com:TSafeHtml> +	 </div> +	  <com:TLinkButton Text="Edit" CommandName="edit" /> +	  <com:TLinkButton Text="Delete" CommandName="delete" +	       Attributes.onclick="if(!confirm('Are you sure?')) return false;" /> +	  <com:TLinkButton Text="Approve" CommandName="select" /> +	</prop:ItemTemplate> + +	<prop:EditItemTemplate> +		<com:TTextBox ID="email" Text=<%# $this->DataItem['email'] %> /> +		<com:TTextBox ID="page" Text=<%# $this->DataItem['page'] %> /> +		<com:TTextBox ID="content" Text=<%# $this->DataItem['comment'] %> TextMode="MultiLine"/> +	    <com:TLinkButton Text="Save" CommandName="update" /> +	    <com:TLinkButton Text="Cancel" CommandName="cancel" /> +	</prop:EditItemTemplate> + +	</com:TDataList> +</com:TContent>
\ No newline at end of file diff --git a/demos/quickstart/protected/pages/Comments.php b/demos/quickstart/protected/pages/Comments.php new file mode 100644 index 00000000..7af70ece --- /dev/null +++ b/demos/quickstart/protected/pages/Comments.php @@ -0,0 +1,76 @@ +<?php + +Prado::using('System.I18N.*'); + +/** + * Comments class. + * + * @author Wei Zhuo <weizhuo[at]gmail[dot]com> + * @version : $  Sat May 27 20:23:00 AZOST 2006 $ + * @package Demo.Quickstart + * @since 3.0 + */ +class Comments extends TPage +{ +	private $_quickstart; +	 +	public function onLoad($param) +	{ +		parent::onLoad($param); +		$this->_quickstart = new QuickStartComments; +		if(!$this->getIsPostBack()) +			$this->refreshData(); +	} +	 +	protected function refreshData() +	{ +		$this->comments->setDataSource($this->_quickstart->getQuequedComments()); +		$this->comments->dataBind();		 +	} +	 +	public function approveComment($sender, $param) +	{ +		$ID = $this->comments->DataKeys[$this->comments->SelectedItemIndex]; +		$this->_quickstart->approveComment($ID); +		$this->refreshData(); +		$this->comments->SelectedItemIndex=-1; +	} +	 +	public function editComment($sender, $param) +	{ +		$this->comments->SelectedItemIndex=-1; +		$this->comments->EditItemIndex=$param->Item->ItemIndex; +		$this->refreshData();	 +	} +	 +	public function cancelEdit($sender, $param) +	{ +		$this->comments->SelectedItemIndex=-1; +		$this->comments->EditItemIndex=-1; +		$this->refreshData(); +	} +	 +	public function deleteComment($sender, $param) +	{ +		$ID = $this->comments->DataKeys[$param->Item->ItemIndex]; +		$this->_quickstart->deleteComment($ID); +		$this->comments->SelectedItemIndex=-1; +		$this->comments->EditItemIndex=-1; +		$this->refreshData(); +	} +	 +	public function updateComment($sender, $param) +	{ +		$item=$param->Item; +		$this->_quickstart->updateComment( +			$this->comments->DataKeys[$item->ItemIndex], +			$item->page->Text, +			$item->email->Text, +			$item->content->Text); +			 +		$this->comments->EditItemIndex=-1; +		$this->refreshData(); +	} +} + +?>
\ No newline at end of file | 
