+<<<<<<< HEAD
<?php\r
\r
/*\r
class Blog\r
{\r
// blog id\r
- var $blogid;\r
-\r
- // ID of currently selected category\r
- var $selectedcatid;\r
-\r
+ public $blogid;\r
+ \r
// After creating an object of the blog class, contains true if the BLOG object is\r
// valid (the blog exists)\r
- var $isValid;\r
-\r
+ public $isValid;\r
+ \r
// associative array, containing all blogsettings (use the get/set functions instead)\r
- var $settings;\r
-\r
+ private $settings;\r
+ \r
+ // ID of currently selected category\r
+ private $selectedcatid;\r
+ \r
/**\r
+ * Blog::_\construct()\r
* Creates a new BLOG object for the given blog\r
*\r
- * @param $id blogid\r
+ * @param integer $id blogid\r
+ * @return void\r
*/\r
- function BLOG($id) {\r
- $this->blogid = intval($id);\r
- $this->readSettings();\r
-\r
- // try to set catid\r
- // (the parse functions in SKIN.php will override this, so it's mainly useless)\r
+ public function __construct($id)\r
+ {\r
global $catid;\r
+ \r
+ $this->blogid = (integer) $id;\r
+ $this->readSettings();\r
$this->setSelectedCategory($catid);\r
+ return;\r
}\r
-\r
+ \r
/**\r
+ * Blog::readLog()\r
* Shows the given amount of items for this blog\r
*\r
- * @param $template\r
- * String representing the template _NAME_ (!)\r
- * @param $amountEntries\r
- * amount of entries to show\r
- * @param $startpos\r
- * offset from where items should be shown (e.g. 5 = start at fifth item)\r
- * @returns int\r
- * amount of items shown\r
- */\r
- function readLog($template, $amountEntries, $offset = 0, $startpos = 0) {\r
+ * @param string $template String representing the template _NAME_ (!)\r
+ * @param integer $amountEntries amount of entries to show\r
+ * @param integer $startpos offset from where items should be shown (e.g. 5 = start at fifth item)\r
+ * @return integer amount of items shown\r
+ */\r
+ public function readLog($template, $amountEntries, $offset = 0, $startpos = 0)\r
+ {\r
return $this->readLogAmount($template,$amountEntries,'','',1,1,$offset, $startpos);\r
}\r
-\r
+ \r
/**\r
* Blog::showArchive()\r
* Shows an archive for a given month\r
*\r
- * @param integer $year year\r
- * @param integer $month month\r
- * @param string $template String representing the template name to be used\r
- * @return void\r
- * \r
+ * @param integer $year year\r
+ * @param integer $month month\r
+ * @param string $template String representing the template name to be used\r
+ * @return void\r
*/\r
- function showArchive($templatename, $year, $month=0, $day=0)\r
+ public function showArchive($templatename, $year, $month=0, $day=0)\r
{\r
// create extra where clause for select query\r
if ( $day == 0 && $month != 0 )\r
$timestamp_start = mktime(0,0,0,$month,$day,$year);\r
$timestamp_end = mktime(0,0,0,$month,$day+1,$year);\r
}\r
- $extra_query = " and i.itime>='%s' and i.itime<'%s'";\r
+ $extra_query = " and i.itime>=%s and i.itime<%s";\r
$extra_query = sprintf($extra_query, DB::formatDateTime($timestamp_start), DB::formatDateTime($timestamp_end));\r
\r
$this->readLogAmount($templatename,0,$extra_query,'',1,1);\r
return;\r
}\r
-\r
+ \r
/**\r
+ * Blog::setSelectedCategory()\r
* Sets the selected category by id (only when category exists)\r
+ * \r
+ * @param integer $catid ID for category\r
+ * @return void\r
*/\r
- function setSelectedCategory($catid) {\r
- if ($this->isValidCategory($catid) || (intval($catid) == 0))\r
+ public function setSelectedCategory($catid)\r
+ {\r
+ if ( $this->isValidCategory($catid) || (intval($catid) == 0) )\r
+ {\r
$this->selectedcatid = intval($catid);\r
+ }\r
+ return;\r
}\r
-\r
+ \r
/**\r
+ * Blog::setSelectedCategoryByName()\r
* Sets the selected category by name\r
+ * \r
+ * @param string $catname name of category\r
+ * @return void\r
*/\r
- function setSelectedCategoryByName($catname) {\r
+ public function setSelectedCategoryByName($catname)\r
+ {\r
$this->setSelectedCategory($this->getCategoryIdFromName($catname));\r
+ return;\r
}\r
-\r
+ \r
/**\r
+ * Blog::getSelectedCategory()\r
* Returns the selected category\r
+ * \r
+ * @param void\r
+ * @return integer\r
*/\r
- function getSelectedCategory() {\r
+ public function getSelectedCategory()\r
+ {\r
return $this->selectedcatid;\r
}\r
-\r
+ \r
/**\r
* Shows the given amount of items for this blog\r
*\r
- * @param $template\r
- * String representing the template _NAME_ (!)\r
- * @param $amountEntries\r
- * amount of entries to show (0 = no limit)\r
- * @param $extraQuery\r
- * extra conditions to be added to the query\r
- * @param $highlight\r
- * contains a query that should be highlighted\r
- * @param $comments\r
- * 1=show comments 0=don't show comments\r
- * @param $dateheads\r
- * 1=show dateheads 0=don't show dateheads\r
- * @param $offset\r
- * offset\r
- * @returns int\r
- * amount of items shown\r
- */\r
- function readLogAmount($template, $amountEntries, $extraQuery, $highlight, $comments, $dateheads, $offset = 0, $startpos = 0) {\r
-\r
+ * @param string $template string representing the template _NAME_ (!)\r
+ * @param integer $amountEntries amount of entries to show (0 = no limit)\r
+ * @param string $extraQuery extra conditions to be added to the query\r
+ * @param string $highlight contains a query that should be highlighted\r
+ * @param integer $comments 1=show comments 0=don't show comments\r
+ * @param integer $dateheads 1=show dateheads 0=don't show dateheads\r
+ * @param integer $offset offset\r
+ * @return integer amount of items shown\r
+ */\r
+ private function readLogAmount($template, $amountEntries, $extraQuery, $highlight, $comments, $dateheads, $offset = 0, $startpos = 0)\r
+ {\r
$query = $this->getSqlBlog($extraQuery);\r
-\r
- if ($amountEntries > 0) {\r
- // $offset zou moeten worden:\r
- // (($startpos / $amountentries) + 1) * $offset ... later testen ...\r
- $query .= ' LIMIT ' . intval($startpos + $offset).',' . intval($amountEntries);\r
+ \r
+ if ( $amountEntries > 0 )\r
+ {\r
+ // $offset zou moeten worden:\r
+ // (($startpos / $amountentries) + 1) * $offset ... later testen ...\r
+ $query .= ' LIMIT ' . intval($startpos + $offset).',' . intval($amountEntries);\r
}\r
return $this->showUsingQuery($template, $query, $highlight, $comments, $dateheads);\r
}\r
-\r
+ \r
/**\r
* Blog::showUsingQuery()\r
* Do the job for readLogAmmount\r
* \r
- * @param string $templateName template name\r
- * @param string $query string for query\r
- * @param string $highlight string to be highlighted\r
+ * @param string $templateName template name\r
+ * @param string $query string for query\r
+ * @param string $highlight string to be highlighted\r
* @param integer $comments the number of comments\r
* @param boolean $dateheads date header is needed or not\r
* @return integer the number of rows as a result of mysql query\r
- * \r
- */ \r
- function showUsingQuery($templateName, $query, $highlight = '', $comments = 0, $dateheads = 1)\r
+ */\r
+ private function showUsingQuery($templateName, $query, $highlight = '', $comments = 0, $dateheads = 1)\r
{\r
global $CONF, $manager, $currentTemplateName;\r
\r
\r
// create parser object & action handler\r
$handler = new ItemActions($this);\r
- $parser = new Parser($handler->getDefinedActions(), $handler);\r
$handler->setTemplate($template);\r
$handler->setHighlight($highlight);\r
$handler->setLastVisit($lastVisit);\r
- $handler->setParser($parser);\r
$handler->setShowComments($comments);\r
\r
+ $parser = new Parser($handler);\r
+ \r
// execute query\r
$items = DB::getResult($query);\r
\r
$old_date = 0;\r
foreach ( $items as $item )\r
{\r
- $item['timestamp'] = strtotime($item['itime']); // string timestamp -> unix timestamp\r
+ // string timestamp -> unix timestamp\r
+ $item['timestamp'] = strtotime($item['itime']);\r
\r
// action handler needs to know the item we're handling\r
$handler->setCurrentItem($item);\r
$oldTS = strtotime($old_date);\r
$manager->notify('PreDateFoot',array('blog' => &$this, 'timestamp' => $oldTS));\r
\r
- if ( in_array('DATE_FOOTER', $template) && !empty($template['DATE_FOOTER']) )\r
+ if ( !in_array('DATE_FOOTER', $template) || empty($template['DATE_FOOTER']) )\r
{\r
- $tmp_footer = i18n::formatted_datetime($template['DATE_FOOTER'], $oldTS);\r
+ $tmp_footer = '';\r
}\r
else\r
{\r
- $tmp_footer = '';\r
+ $tmp_footer = i18n::formatted_datetime($template['DATE_FOOTER'], $oldTS);\r
}\r
$parser->parse($tmp_footer);\r
$manager->notify('PostDateFoot',array('blog' => &$this, 'timestamp' => $oldTS));\r
\r
// note, to use templatvars in the dateheader, the %-characters need to be doubled in\r
// order to be preserved by strftime\r
- if ( in_array('DATE_HEADER', $template) && !empty($template['DATE_HEADER']) )\r
+ if ( !in_array('DATE_HEADER', $template) || empty($template['DATE_HEADER']) )\r
{\r
- $tmp_header = i18n::formatted_datetime($template['DATE_HEADER'], $timestamp);\r
+ $tmp_header = '';\r
}\r
else\r
{\r
- $tmp_header = '';\r
+ $tmp_header = i18n::formatted_datetime($template['DATE_HEADER'], $timestamp);\r
}\r
$parser->parse($tmp_header);\r
$manager->notify('PostDateHead',array('blog' => &$this, 'timestamp' => $timestamp));\r
}\r
\r
/**\r
+ * Blog::showOneitem()\r
* Simplified function for showing only one item\r
+ * \r
+ * @param integer $itemid ID for item\r
+ * @param array $template template for item\r
+ * @param string $highlight string for highlight\r
+ * @return integer 1\r
*/\r
- function showOneitem($itemid, $template, $highlight) {\r
+ public function showOneitem($itemid, $template, $highlight)\r
+ {\r
$extraQuery = ' and inumber=' . intval($itemid);\r
-\r
+ \r
return $this->readLogAmount($template, 1, $extraQuery, $highlight, 0, 0);\r
}\r
-\r
-\r
+ \r
/**\r
* Blog::addItem()\r
* Adds an item to this blog\r
* \r
- * @param Integer $catid ID for category\r
- * @param String $title ID for \r
- * @param String $body text for body\r
- * @param String $more text for more\r
- * @param Integer $blogid ID for blog\r
- * @param Integer $authorid ID for author\r
- * @param Timestamp $timestamp UNIX timestamp for post\r
- * @param Boolean $closed opened or closed\r
- * @param Boolean $draft draft or not\r
- * @param Boolean $posted posted or not\r
- * @return\r
+ * @param integer $catid ID for category\r
+ * @param string $title ID for \r
+ * @param string $body text for body\r
+ * @param string $more text for more\r
+ * @param integer $blogid ID for blog\r
+ * @param integer $authorid ID for author\r
+ * @param timestamp $timestamp UNIX timestamp for post\r
+ * @param boolean $closed opened or closed\r
+ * @param boolean $draft draft or not\r
+ * @param boolean $posted posted or not\r
+ * @return integer ID for added item\r
*/\r
function additem($catid, $title, $body, $more, $blogid, $authorid, $timestamp, $closed, $draft, $posted='1')\r
{\r
global $manager;\r
\r
- $blogid = intval($blogid);\r
- $authorid = intval($authorid);\r
+ $blogid = (integer) $blogid;\r
+ $authorid = (integer) $authorid;\r
$title = $title;\r
$body = $body;\r
$more = $more;\r
$catid = $this->getDefaultCategory();\r
}\r
\r
+ $isFuture = 0;\r
if ( $timestamp > $this->getCorrectTime() )\r
{\r
$isFuture = 1;\r
$ititle = DB::quoteValue($title);\r
$ibody = DB::quoteValue($body);\r
$imore = DB::quoteValue($more);\r
+ $timestamp = DB::formatDateTime(strtotime($timestamp));\r
\r
- $query = "INSERT INTO %s (ITITLE, IBODY, IMORE, IBLOG, IAUTHOR, ITIME, ICLOSED, IDRAFT, ICAT, IPOSTED) VALUES (%s, %s, %s, %d, %d, '%s', %s, %s, %s, %s)";\r
+ $query = "INSERT INTO %s (ITITLE, IBODY, IMORE, IBLOG, IAUTHOR, ITIME, ICLOSED, IDRAFT, ICAT, IPOSTED) VALUES (%s, %s, %s, %d, %d, %s, %s, %s, %s, %s)";\r
$query = sprintf($query, sql_table('item'), $ititle, $ibody, $imore, $blogid, $authorid, $timestamp, $closed, $draft, $catid, $posted);\r
DB::execute($query);\r
$itemid = DB::getInsertId();\r
* Blog::sendNewItemNotification()\r
* Send a new item notification to the notification list\r
* \r
- * @param String $itemid ID of the item\r
- * @param String $title title of the item\r
- * @param String $body body of the item\r
- * @return Void\r
+ * @param string $itemid ID of the item\r
+ * @param string $title title of the item\r
+ * @param string $body body of the item\r
+ * @return void\r
*/\r
- function sendNewItemNotification($itemid, $title, $body)\r
+ public function sendNewItemNotification($itemid, $title, $body)\r
{\r
global $CONF, $member;\r
\r
* Blog::createNewCategory()\r
* Creates a new category for this blog\r
*\r
- * @param String $catName name of the new category. When empty, a name is generated automatically (starting with newcat)\r
- * @param String $catDescription description of the new category. Defaults to 'New Category'\r
- * @returns Integer the new category-id in case of success. 0 on failure\r
+ * @param string $catName name of the new category. When empty, a name is generated automatically (starting with newcat)\r
+ * @param string $catDescription description of the new category. Defaults to 'New Category'\r
+ * @return integer ID for new category on success. 0 on failure\r
*/\r
- function createNewCategory($catName = '', $catDescription = _CREATED_NEW_CATEGORY_DESC)\r
+ public function createNewCategory($catName = '', $catDescription = _CREATED_NEW_CATEGORY_DESC)\r
{\r
global $member, $manager;\r
\r
- if ( $member->blogAdminRights($this->getID()) )\r
+ if ( !$member->blogAdminRights($this->blogid) )\r
{\r
- // generate\r
- if ( $catName == '' )\r
+ return 0;\r
+ }\r
+ \r
+ // generate\r
+ if ( $catName == '' )\r
+ {\r
+ $catName = _CREATED_NEW_CATEGORY_NAME;\r
+ $i = 1;\r
+ \r
+ $res = DB::getResult('SELECT * FROM '.sql_table('category')." WHERE cname='".$catName.$i."' and cblog=".$this->blogid);\r
+ while ( $res->rowCount() > 0 )\r
{\r
- $catName = _CREATED_NEW_CATEGORY_NAME;\r
- $i = 1;\r
- \r
- $res = DB::getResult('SELECT * FROM '.sql_table('category')." WHERE cname='".$catName.$i."' and cblog=".$this->getID());\r
- while ( $res->rowCount() > 0 )\r
- {\r
- $i++;\r
- $res = DB::getResult('SELECT * FROM '.sql_table('category')." WHERE cname='".$catName.$i."' and cblog=".$this->getID());\r
- }\r
- \r
- $catName = $catName . $i;\r
+ $i++;\r
+ $res = DB::getResult('SELECT * FROM '.sql_table('category')." WHERE cname='".$catName.$i."' and cblog=".$this->blogid);\r
}\r
\r
- $manager->notify(\r
- 'PreAddCategory',\r
- array(\r
- 'blog' => &$this,\r
- 'name' => &$catName,\r
- 'description' => $catDescription\r
- )\r
- );\r
- \r
- $query = "INSERT INTO %s (cblog, cname, cdesc) VALUES (%d, %s, %s)";\r
- $query = sprintf($query, sql_table('category'), (integer) $this->getID(), DB::quoteValue($catName), DB::quoteValue($catDescription));\r
- DB::execute($query);\r
- $catid = DB::getInsertId();\r
- \r
- $manager->notify(\r
- 'PostAddCategory',\r
- array(\r
- 'blog' => &$this,\r
- 'name' => $catName,\r
- 'description' => $catDescription,\r
- 'catid' => $catid\r
- )\r
- );\r
- \r
- return $catid;\r
+ $catName = $catName . $i;\r
}\r
- return 0;\r
+ \r
+ $data = array(\r
+ 'blog' => &$this,\r
+ 'name' => &$catName,\r
+ 'description' => $catDescription\r
+ );\r
+ $manager->notify('PreAddCategory', $data);\r
+ \r
+ $query = "INSERT INTO %s (cblog, cname, cdesc) VALUES (%d, %s, %s)";\r
+ $query = sprintf($query, sql_table('category'), (integer) $this->blogid, DB::quoteValue($catName), DB::quoteValue($catDescription));\r
+ DB::execute($query);\r
+ $catid = DB::getInsertId();\r
+ \r
+ $data = array(\r
+ 'blog' => &$this,\r
+ 'name' => $catName,\r
+ 'description' => $catDescription,\r
+ 'catid' => $catid\r
+ );\r
+ $manager->notify('PostAddCategory', $data);\r
+ \r
+ return $catid;\r
}\r
\r
/**\r
+ * Blog::search()\r
* Searches all months of this blog for the given query\r
*\r
- * @param $query\r
- * search query\r
- * @param $template\r
- * template to be used (__NAME__ of the template)\r
- * @param $amountMonths\r
- * max amount of months to be search (0 = all)\r
- * @param $maxresults\r
- * max number of results to show\r
- * @param $startpos\r
- * offset\r
- * @returns\r
- * amount of hits found\r
- */\r
- function search($query, $template, $amountMonths, $maxresults, $startpos) {\r
+ * @param string $query search query\r
+ * @param array $template template to be used (__NAME__ of the template)\r
+ * @param integer $amountMonths max amount of months to be search (0 = all)\r
+ * @param integer $maxresults max number of results to show\r
+ * @param integer $startpos offset\r
+ * @return amount of hits found\r
+ */\r
+ public function search($query, $template, $amountMonths, $maxresults, $startpos) {\r
global $CONF, $manager;\r
-\r
+ \r
$highlight = '';\r
$sqlquery = $this->getSqlSearch($query, $amountMonths, $highlight);\r
-\r
- if ($sqlquery == '')\r
+ \r
+ if ( $sqlquery == '' )\r
{\r
// no query -> show everything\r
$extraquery = '';\r
$amountfound = $this->readLogAmount($template, $maxresults, $extraQuery, $query, 1, 1);\r
- } else {\r
-\r
+ }\r
+ else\r
+ {\r
// add LIMIT to query (to split search results into pages)\r
- if (intval($maxresults > 0))\r
- $sqlquery .= ' LIMIT ' . intval($startpos).',' . intval($maxresults);\r
-\r
+ if ( intval($maxresults > 0) )\r
+ {\r
+ $sqlquery .= ' LIMIT ' . intval($startpos) . ',' . intval($maxresults);\r
+ }\r
+ \r
// show results\r
$amountfound = $this->showUsingQuery($template, $sqlquery, $highlight, 1, 1);\r
-\r
+ \r
// when no results were found, show a message\r
- if ($amountfound == 0)\r
+ if ( $amountfound == 0 )\r
{\r
$template =& $manager->getTemplate($template);\r
$vars = array(\r
'query' => Entity::hsc($query),\r
- 'blogid' => $this->getID()\r
+ 'blogid' => $this->blogid\r
);\r
- echo Template::fill($template['SEARCH_NOTHINGFOUND'],$vars);\r
+ echo Template::fill($template['SEARCH_NOTHINGFOUND'], $vars);\r
}\r
}\r
-\r
return $amountfound;\r
}\r
-\r
+ \r
/**\r
* Blog::getSqlSearch()\r
* Returns an SQL query to use for a search query\r
* No LIMIT clause is added. (caller should add this if multiple pages are requested)\r
*\r
- * @param string $query search query\r
+ * @param string $query search query\r
* @param integer $amountMonths amount of months to search back. Default = 0 = unlimited\r
- * @param string $mode either empty, or 'count'. In this case, the query will be a SELECT COUNT(*) query\r
- * @return string $highlight words to highlight (out parameter)\r
+ * @param string $mode either empty, or 'count'. In this case, the query will be a SELECT COUNT(*) query\r
+ * @return string $highlight words to highlight (out parameter)\r
* @return string either a full SQL query, or an empty string (if querystring empty)\r
*/\r
- function getSqlSearch($query, $amountMonths = 0, &$highlight, $mode = '')\r
+ public function getSqlSearch($query, $amountMonths = 0, &$highlight, $mode = '')\r
{\r
$searchclass = new Search($query);\r
\r
$select = $searchclass->boolean_sql_select('ititle,ibody,imore');\r
\r
// get list of blogs to search\r
- $blogs = $searchclass->blogs; // array containing blogs that always need to be included\r
- $blogs[] = $this->getID(); // also search current blog (duh)\r
- $blogs = array_unique($blogs); // remove duplicates\r
+ $blogs = $searchclass->blogs; // array containing blogs that always need to be included\r
+ $blogs[] = $this->blogid; // also search current blog (duh)\r
+ $blogs = array_unique($blogs); // remove duplicates\r
$selectblogs = '';\r
if ( count($blogs) > 0 )\r
{\r
. ' and i.idraft=0'\r
. $selectblogs\r
// don't show future items\r
- . ' and i.itime<="' . DB::formatDateTime($this->getCorrectTime()) . '"'\r
+ . ' and i.itime<=' . DB::formatDateTime($this->getCorrectTime())\r
. ' and '.$where;\r
-\r
+ \r
// take into account amount of months to search\r
if ( $amountMonths > 0 )\r
{\r
$localtime = getdate($this->getCorrectTime());\r
$timestamp_start = mktime(0,0,0,$localtime['mon'] - $amountMonths,1,$localtime['year']);\r
- $query .= ' and i.itime>"' . DB::formatDateTime($timestamp_start) . '"';\r
+ $query .= ' and i.itime>' . DB::formatDateTime($timestamp_start);\r
}\r
\r
if ( $mode == '' )\r
* No LIMIT clause is added. (caller should add this if multiple pages are requested)\r
*\r
* @param string $extraQuery extra query string\r
- * @param string $mode either empty, or 'count'. In this case, the query will be a SELECT COUNT(*) query\r
+ * @param string $mode either empty, or 'count'. In this case, the query will be a SELECT COUNT(*) query\r
* @return string either a full SQL query, or an empty string\r
*/\r
- function getSqlBlog($extraQuery, $mode = '')\r
+ public function getSqlBlog($extraQuery, $mode = '')\r
{\r
if ( $mode == '' )\r
{\r
. ' WHERE i.iblog='.$this->blogid\r
. ' and i.iauthor=m.mnumber'\r
. ' and i.icat=c.catid'\r
- // exclude drafts\r
- . ' and i.idraft=0'\r
- // don't show future items\r
- . ' and i.itime<="' . DB::formatDateTime($this->getCorrectTime()) . '"';\r
+ . ' and i.idraft=0' // exclude drafts\r
+ . ' and i.itime<=' . DB::formatDateTime($this->getCorrectTime()); // don't show future items\r
\r
- if ( $this->getSelectedCategory() )\r
+ if ( $this->selectedcatid )\r
{\r
- $query .= ' and i.icat=' . $this->getSelectedCategory() . ' ';\r
+ $query .= ' and i.icat=' . $this->selectedcatid . ' ';\r
}\r
\r
$query .= $extraQuery;\r
* Blog::showArchiveList()\r
* Shows the archivelist using the given template\r
* \r
- * @param String $template template name\r
- * @param String $mode year/month/day\r
- * @param Integer $limit limit of record count\r
- * @return Void\r
+ * @param string $template template name\r
+ * @param string $mode year/month/day\r
+ * @param integer $limit limit of record count\r
+ * @return void\r
*/\r
- function showArchiveList($template, $mode = 'month', $limit = 0)\r
+ public function showArchiveList($template, $mode = 'month', $limit = 0)\r
{\r
global $CONF, $catid, $manager;\r
\r
}\r
\r
$template =& $manager->getTemplate($template);\r
- $data['blogid'] = $this->getID();\r
+ $data['blogid'] = $this->blogid;\r
\r
if ( !array_key_exists('ARCHIVELIST_HEADER', $template) || !$template['ARCHIVELIST_HEADER'] )\r
{\r
\r
$query = 'SELECT itime, SUBSTRING(itime,1,4) AS Year, SUBSTRING(itime,6,2) AS Month, SUBSTRING(itime,9,2) AS Day'\r
. ' FROM '.sql_table('item')\r
- . ' WHERE iblog=' . $this->getID()\r
- // don't show future items!\r
- . ' AND itime <="' . DB::formatDateTime($this->getCorrectTime()) . '"'\r
- // don't show draft items\r
- . ' AND idraft=0';\r
+ . ' WHERE iblog=' . $this->blogid\r
+ . ' AND itime <=' . DB::formatDateTime($this->getCorrectTime()) // don't show future items!\r
+ . ' AND idraft=0'; // don't show draft items\r
\r
if ( $catid )\r
{\r
\r
$data['year'] = date('Y',$current['itime']);\r
$archive['year'] = $data['year'];\r
- $data['archivelink'] = Link::create_archive_link($this->getID(),$archivedate,$linkparams);\r
+ $data['archivelink'] = Link::create_archive_link($this->blogid,$archivedate,$linkparams);\r
\r
- $manager->notify(\r
- 'PreArchiveListItem',\r
- array(\r
- 'listitem' => &$data\r
- )\r
- );\r
+ $manager->notify('PreArchiveListItem', array('listitem' => &$data));\r
\r
$temp = Template::fill($template['ARCHIVELIST_LISTITEM'],$data);\r
echo i18n::formatted_datetime($temp, $current['itime']);\r
* @param string $template Template Name\r
* @return void\r
*/\r
- function showCategoryList($template)\r
+ public function showCategoryList($template)\r
{\r
- global $CONF, $manager;\r
+ global $CONF, $archive, $archivelist, $manager;\r
\r
/*\r
* determine arguments next to catids\r
* I guess this can be done in a better way, but it works\r
*/\r
- global $archive, $archivelist;\r
- \r
$linkparams = array();\r
if ( $archive )\r
{\r
- $blogurl = Link::create_archive_link($this->getID(), $archive, '');\r
- $linkparams['blogid'] = $this->getID();\r
+ $blogurl = Link::create_archive_link($this->blogid, $archive, '');\r
+ $linkparams['blogid'] = $this->blogid;\r
$linkparams['archive'] = $archive;\r
}\r
else if ( $archivelist )\r
{\r
- $blogurl = Link::create_archivelist_link($this->getID(), '');\r
+ $blogurl = Link::create_archivelist_link($this->blogid, '');\r
$linkparams['archivelist'] = $archivelist;\r
}\r
else\r
{\r
- $blogurl = Link::create_blogid_link($this->getID(), '');\r
- $linkparams['blogid'] = $this->getID();\r
+ $blogurl = Link::create_blogid_link($this->blogid, '');\r
+ $linkparams['blogid'] = $this->blogid;\r
}\r
\r
$template =& $manager->getTemplate($template);\r
\r
//: Change: Set nocatselected variable\r
- if ( $this->getSelectedCategory() )\r
+ if ( $this->selectedcatid )\r
{\r
$nocatselected = 'no';\r
}\r
} \r
\r
$args = array(\r
- 'blogid' => $this->getID(),\r
+ 'blogid' => $this->blogid,\r
'blogurl' => $blogurl,\r
'self' => $CONF['Self'],\r
- //: Change: Set catiscurrent template variable for header\r
- 'catiscurrent' => $nocatselected,\r
+ 'catiscurrent' => $nocatselected, // Change: Set catiscurrent template variable for header\r
'currentcat' => $nocatselected \r
);\r
\r
}\r
\r
$query = "SELECT catid, cdesc as catdesc, cname as catname FROM %s WHERE cblog=%d ORDER BY cname ASC;";\r
- $query = sprintf($query, sql_table('category'), (integer) $this->getID());\r
+ $query = sprintf($query, sql_table('category'), (integer) $this->blogid);\r
$res = DB::getResult($query);\r
\r
foreach ( $res as $data )\r
'extra' => $linkparams\r
);\r
\r
- $data['blogid'] = $this->getID();\r
+ $data['blogid'] = $this->blogid;\r
$data['blogurl'] = $blogurl;\r
$data['catlink'] = Link::create_link('category', $args);\r
$data['self'] = $CONF['Self'];\r
$data['catiscurrent'] = 'no';\r
$data['currentcat'] = 'no';\r
\r
- if ( $this->getSelectedCategory() )\r
+ if ( $this->selectedcatid )\r
{\r
- if ( $this->getSelectedCategory() == $data['catid'] )\r
+ if ( $this->selectedcatid == $data['catid'] )\r
{\r
- $data['catiscurrent'] = 'yes';\r
- $data['currentcat'] = 'yes';\r
+ $data['catiscurrent'] = 'yes';\r
+ $data['currentcat'] = 'yes';\r
}\r
}\r
else\r
}\r
}\r
\r
- $manager->notify(\r
- 'PreCategoryListItem',\r
- array(\r
- 'listitem' => &$data\r
- ));\r
+ $manager->notify('PreCategoryListItem', array('listitem' => &$data));\r
\r
if ( !array_key_exists('CATLIST_LISTITEM', $template) || empty($template['CATLIST_LISTITEM']))\r
{\r
$res->closeCursor();\r
\r
$args = array(\r
- 'blogid' => $this->getID(),\r
- 'blogurl' => $blogurl,\r
- 'self' => $CONF['Self'],\r
- //: Change: Set catiscurrent template variable for footer\r
- 'catiscurrent' => $nocatselected,\r
- 'currentcat' => $nocatselected \r
+ 'blogid' => $this->blogid,\r
+ 'blogurl' => $blogurl,\r
+ 'self' => $CONF['Self'],\r
+ 'catiscurrent' => $nocatselected, //: Change: Set catiscurrent template variable for footer\r
+ 'currentcat' => $nocatselected\r
);\r
\r
if ( !array_key_exists('CATLIST_FOOTER', $template) || empty($template['CATLIST_FOOTER']))\r
* ordered by number, name, shortname or description\r
* in ascending or descending order\r
* \r
- * @param String $template tempalte name\r
- * @param String $bnametype bname/bshortname\r
- * @param String $orderby string for 'ORDER BY' SQL\r
- * @param String $direction ASC/DESC\r
- * @return Void\r
+ * @param string $template tempalte name\r
+ * @param string $bnametype bname/bshortname\r
+ * @param string $orderby string for 'ORDER BY' SQL\r
+ * @param string $direction ASC/DESC\r
+ * @return void\r
*/\r
- function showBlogList($template, $bnametype, $orderby, $direction)\r
+ public function showBlogList($template, $bnametype, $orderby, $direction)\r
{\r
global $CONF, $manager;\r
\r
\r
$template =& $manager->getTemplate($template);\r
\r
- echo Template::fill((isset($template['BLOGLIST_HEADER']) ? $template['BLOGLIST_HEADER'] : null),\r
- array(\r
- 'sitename' => $CONF['SiteName'],\r
- 'siteurl' => $CONF['IndexURL']\r
- )\r
- );\r
- \r
- $query = 'SELECT bnumber, bname, bshortname, bdesc, burl FROM '.sql_table('blog').' ORDER BY '.$orderby.' '.$direction;\r
- $res = DB::getResult($query);\r
+ if ( array_key_exists('BLOGLIST_HEADER', $template) && !empty($template['BLOGLIST_HEADER']) )\r
+ {\r
+ $vars = array(\r
+ 'sitename' => $CONF['SiteName'],\r
+ 'siteurl' => $CONF['IndexURL']\r
+ );\r
+ \r
+ echo Template::fill($template['BLOGLIST_HEADER'], $vars);\r
+ }\r
\r
- foreach ( $res as $data )\r
+ if ( array_key_exists('BLOGLIST_LISTITEM', $template) && !empty($template['BLOGLIST_LISTITEM']) )\r
{\r
- $list = array();\r
- $list['bloglink'] = Link::create_blogid_link($data['bnumber']);\r
- $list['blogdesc'] = $data['bdesc'];\r
- $list['blogurl'] = $data['burl'];\r
+ $query = 'SELECT bnumber, bname, bshortname, bdesc, burl FROM '.sql_table('blog').' ORDER BY '.$orderby.' '.$direction;\r
+ $res = DB::getResult($query);\r
\r
- if ( $bnametype == 'shortname' )\r
- {\r
- $list['blogname'] = $data['bshortname'];\r
- }\r
- else\r
+ foreach ( $res as $data )\r
{\r
- /* all other cases */\r
- $list['blogname'] = $data['bname'];\r
+ $list = array();\r
+ $list['bloglink'] = Link::create_blogid_link($data['bnumber']);\r
+ $list['blogdesc'] = $data['bdesc'];\r
+ $list['blogurl'] = $data['burl'];\r
+ \r
+ if ( $bnametype == 'shortname' )\r
+ {\r
+ $list['blogname'] = $data['bshortname'];\r
+ }\r
+ else\r
+ {\r
+ /* all other cases */\r
+ $list['blogname'] = $data['bname'];\r
+ }\r
+ \r
+ $manager->notify('PreBlogListItem',array('listitem' => &$list));\r
+ \r
+ echo Template::fill($template['BLOGLIST_LISTITEM'], $list);\r
}\r
\r
- $manager->notify(\r
- 'PreBlogListItem',\r
- array(\r
- 'listitem' => &$list\r
- )\r
- );\r
- \r
- echo Template::fill((isset($template['BLOGLIST_LISTITEM']) ? $template['BLOGLIST_LISTITEM'] : null), $list);\r
+ $res->closeCursor();\r
}\r
\r
- $res->closeCursor();\r
\r
- echo Template::fill((isset($template['BLOGLIST_FOOTER']) ? $template['BLOGLIST_FOOTER'] : null),\r
- array(\r
+ if ( array_key_exists('BLOGLIST_FOOTER', $template) && !empty($template['BLOGLIST_FOOTER']) )\r
+ {\r
+ $vars = array(\r
'sitename' => $CONF['SiteName'],\r
'siteurl' => $CONF['IndexURL']\r
- )\r
- );\r
+ );\r
+ echo Template::fill($template['BLOGLIST_FOOTER']);\r
+ }\r
return;\r
}\r
\r
/**\r
- * Read the blog settings\r
- */\r
- function readSettings() {\r
- $query = 'SELECT *'\r
- . ' FROM '.sql_table('blog')\r
- . ' WHERE bnumber=' . $this->blogid;\r
+ * Blog::readSettings()\r
+ * Read the blog settings\r
+ * \r
+ * @param void\r
+ * @return void\r
+ */\r
+ public function readSettings()\r
+ {\r
+ $query = 'SELECT * FROM %s WHERE bnumber=%d;';\r
+ $query = sprintf($query, sql_table('blog'), (integer) $this->blogid);\r
$res = DB::getResult($query);\r
-\r
+ \r
$this->isValid = ($res->rowCount() > 0);\r
- if (!$this->isValid)\r
- return;\r
-\r
- $this->settings = $res->fetch(PDO::FETCH_ASSOC);\r
+ if ( $this->isValid )\r
+ {\r
+ $this->settings = $res->fetch(PDO::FETCH_ASSOC);\r
+ }\r
+ return;\r
}\r
-\r
+ \r
/**\r
- * Write the blog settings\r
- */\r
- function writeSettings() {\r
-\r
+ * Blog::writeSettings()\r
+ * Write the blog settings\r
+ */\r
+ public function writeSettings()\r
+ {\r
// (can't use floatval since not available prior to PHP 4.2)\r
$offset = $this->getTimeOffset();\r
- if (!is_float($offset))\r
- $offset = intval($offset);\r
-\r
+ if ( !is_float($offset) )\r
+ {\r
+ $offset = (integer) $offset;\r
+ }\r
+ \r
$query = 'UPDATE '.sql_table('blog')\r
- . " SET bname='" . DB::quoteValue($this->getName()) . "',"\r
- . " bshortname='". DB::quoteValue($this->getShortName()) . "',"\r
- . " bcomments=". intval($this->commentsEnabled()) . ","\r
- . " bmaxcomments=" . intval($this->getMaxComments()) . ","\r
- . " btimeoffset=" . $offset . ","\r
- . " bpublic=" . intval($this->isPublic()) . ","\r
- . " breqemail=" . intval($this->emailRequired()) . ","\r
- . " bconvertbreaks=" . intval($this->convertBreaks()) . ","\r
- . " ballowpast=" . intval($this->allowPastPosting()) . ","\r
- . " bnotify='" . DB::quoteValue($this->getNotifyAddress()) . "',"\r
- . " bnotifytype=" . intval($this->getNotifyType()) . ","\r
- . " burl='" . DB::quoteValue($this->getURL()) . "',"\r
- . " bupdate='" . DB::quoteValue($this->getUpdateFile()) . "',"\r
- . " bdesc='" . DB::quoteValue($this->getDescription()) . "',"\r
- . " bdefcat=" . intval($this->getDefaultCategory()) . ","\r
- . " bdefskin=" . intval($this->getDefaultSkin()) . ","\r
- . " bincludesearch=" . intval($this->getSearchable())\r
- . " WHERE bnumber=" . intval($this->getID());\r
+ . ' SET bname=' . DB::quoteValue($this->getName()) . ','\r
+ . ' bshortname='. DB::quoteValue($this->getShortName()) . ','\r
+ . ' bcomments='. intval($this->commentsEnabled()) . ','\r
+ . ' bmaxcomments=' . intval($this->getMaxComments()) . ','\r
+ . ' btimeoffset=' . $offset . ','\r
+ . ' bpublic=' . intval($this->isPublic()) . ','\r
+ . ' breqemail=' . intval($this->emailRequired()) . ','\r
+ . ' bconvertbreaks=' . intval($this->convertBreaks()) . ','\r
+ . ' ballowpast=' . intval($this->allowPastPosting()) . ','\r
+ . ' bnotify=' . DB::quoteValue($this->getNotifyAddress()) . ','\r
+ . ' bnotifytype=' . intval($this->getNotifyType()) . ','\r
+ . ' burl=' . DB::quoteValue($this->getURL()) . ','\r
+ . ' bupdate=' . DB::quoteValue($this->getUpdateFile()) . ','\r
+ . ' bdesc=' . DB::quoteValue($this->getDescription()) . ','\r
+ . ' bdefcat=' . intval($this->getDefaultCategory()) . ','\r
+ . ' bdefskin=' . intval($this->getDefaultSkin()) . ','\r
+ . ' bincludesearch=' . intval($this->getSearchable())\r
+ . ' WHERE bnumber=' . intval($this->blogid);\r
DB::execute($query);\r
-\r
+ return;\r
}\r
-\r
+ \r
/**\r
- * Update the update file if requested\r
- */ \r
- function updateUpdatefile() {\r
- if ($this->getUpdateFile()) {\r
- $f_update = fopen($this->getUpdateFile(),'w');\r
+ * Blog::updateUpdatefile()\r
+ * Update the update file if requested\r
+ * \r
+ * @param void\r
+ * @return void\r
+ */\r
+ public function updateUpdatefile()\r
+ {\r
+ if ( $this->getUpdateFile() )\r
+ {\r
+ $f_update = fopen($this->getUpdateFile(), 'w');\r
fputs($f_update,$this->getCorrectTime());\r
fclose($f_update);\r
- }\r
-\r
+ }\r
+ return;\r
}\r
-\r
+ \r
/**\r
- * Check if a category with a given catid is valid\r
- * \r
- * @param $catid\r
- * category id\r
- */\r
- function isValidCategory($catid) {\r
- $query = 'SELECT * FROM '.sql_table('category').' WHERE cblog=' . $this->getID() . ' and catid=' . intval($catid);\r
+ * Blog::isValidCategory()\r
+ * Check if a category with a given catid is valid\r
+ * \r
+ * @param integer $catid ID for category\r
+ * @return boolean exists or not\r
+ */\r
+ public function isValidCategory($catid)\r
+ {\r
+ $query = 'SELECT * FROM %s WHERE cblog=%d and catid=%d;';\r
+ $query = sprintf($query, sql_table('category'), (integer) $this->blogid, (integer) $catid);\r
$res = DB::getResult($query);\r
return ($res->rowCount() != 0);\r
}\r
-\r
+ \r
/**\r
- * Get the category name for a given catid\r
- * \r
- * @param $catid\r
- * category id\r
- */\r
- function getCategoryName($catid) {\r
- $res = DB::getValue('SELECT cname FROM '.sql_table('category').' WHERE cblog='.$this->getID().' and catid=' . intval($catid));\r
+ * Blog::getCategoryName()\r
+ * Get the category name for a given catid\r
+ * \r
+ * @param integer $catid ID for category\r
+ * @return string name of category\r
+ */\r
+ public function getCategoryName($catid)\r
+ {\r
+ $query = 'SELECT cname FROM %s WHERE cblog=%d and catid=%d;';\r
+ $query = sprintf($query, sql_table('category'), (integer) $this->blogid, (integer) $catid);\r
+ $res = DB::getValue($query);\r
return $res;\r
}\r
-\r
+ \r
/**\r
- * Get the category description for a given catid\r
- * \r
- * @param $catid\r
- * category id\r
- */\r
- function getCategoryDesc($catid) {\r
- $res = DB::getValue('SELECT cdesc FROM '.sql_table('category').' WHERE cblog='.$this->getID().' and catid=' . intval($catid));\r
+ * Blog::getCategoryDesc()\r
+ * Get the category description for a given catid\r
+ * \r
+ * @param $catid\r
+ * category id\r
+ */\r
+ public function getCategoryDesc($catid)\r
+ {\r
+ $query = 'SELECT cdesc FROM %s WHERE cblog=%d and catid=%d;';\r
+ $query = sprintf($querym, sql_table('category'), (integer) $this->blogid, (integer) $catid);\r
+ $res = DB::getValue();\r
return $res;\r
}\r
-\r
+ \r
/**\r
- * Get the category id for a given category name\r
- * \r
- * @param $name\r
- * category name\r
- */\r
- function getCategoryIdFromName($name) {\r
- $res = DB::getValue('SELECT catid FROM '.sql_table('category').' WHERE cblog='.$this->getID().' and cname="' . DB::quoteValue($name) . '"');\r
- if ( $res ) {\r
- return $res;\r
- } else {\r
+ * Blog::getCategoryIdFromName\r
+ * Get the category id for a given category name\r
+ * \r
+ * @param string $name category name\r
+ * @return ID for category\r
+ */\r
+ public function getCategoryIdFromName($name)\r
+ {\r
+ $query = 'SELECT catid FROM %s WHERE cblog=%d and cname=%s;';\r
+ $query = sprintf($query, sql_table('category'), (integer) $this->blogid, DB::quoteValue($name));\r
+ \r
+ $res = DB::getValue();\r
+ if ( !$res )\r
+ {\r
return $this->getDefaultCategory();\r
}\r
- }\r
-\r
- /**\r
- * Get the the setting for the line break handling\r
- * [should be named as getConvertBreaks()]\r
- */\r
- function convertBreaks() {\r
- return $this->getSetting('bconvertbreaks');\r
+ return $res;\r
}\r
\r
/**\r
- * Set the the setting for the line break handling\r
- * \r
- * @param $val\r
- * new value for bconvertbreaks\r
- */\r
- function setConvertBreaks($val) {\r
- $this->setSetting('bconvertbreaks',$val);\r
- }\r
-\r
- /**\r
- * Insert a javascript that includes information about the settings\r
- * of an author: ConvertBreaks, MediaUrl and AuthorId\r
- * \r
- * @param $authorid\r
- * id of the author\r
- */ \r
- function insertJavaScriptInfo($authorid = '') {\r
+ * Blog::insertJavaScriptInfo()\r
+ * Insert a javascript that includes information about the settings\r
+ * of an author: ConvertBreaks, MediaUrl and AuthorId\r
+ * \r
+ * @param $authorid id of the author\r
+ */\r
+ public function insertJavaScriptInfo($authorid = '')\r
+ {\r
global $member, $CONF;\r
-\r
- if ($authorid == '')\r
+ \r
+ if ( $authorid == '' )\r
+ {\r
$authorid = $member->getID();\r
-\r
- ?>\r
- <script type="text/javascript">\r
- setConvertBreaks(<?php echo $this->convertBreaks() ? 'true' : 'false' ?>);\r
- setMediaUrl("<?php echo $CONF['MediaURL']?>");\r
- setAuthorId(<?php echo $authorid?>);\r
- </script><?php \r
+ }\r
+ \r
+ echo "<script type=\"text/javascript\">\n";\r
+ \r
+ if ( !$this->convertBreaks() )\r
+ {\r
+ echo "setConvertBreaks(false);\n";\r
+ }\r
+ else\r
+ {\r
+ echo "setConvertBreaks(true);\n";\r
+ }\r
+ echo "setMediaUrl('{$CONF['MediaURL']}');\n";\r
+ echo "setAuthorId('{$authorid}');\n";\r
+ echo "</script>\n";\r
+ return;\r
}\r
-\r
+ \r
/**\r
- * Set the the setting for allowing to publish postings in the past\r
- * \r
- * @param $val\r
- * new value for ballowpast\r
- */\r
- function setAllowPastPosting($val) {\r
- $this->setSetting('ballowpast',$val);\r
+ * Blog::setAllowPastPosting()\r
+ * Set the the setting for allowing to publish postings in the past\r
+ * \r
+ * @param boolean $val new value for ballowpast\r
+ * @return void\r
+ */\r
+ public function setAllowPastPosting($val)\r
+ {\r
+ $this->setSetting('ballowpast', $val);\r
+ return;\r
}\r
\r
/**\r
- * Get the the setting if it is allowed to publish postings in the past\r
- * [should be named as getAllowPastPosting()]\r
- */\r
- function allowPastPosting() {\r
+ * Blog::allowPastPosting()\r
+ * Get the the setting if it is allowed to publish postings in the past\r
+ * [should be named as getAllowPastPosting()]\r
+ * \r
+ * @param void\r
+ * @return boolean\r
+ */\r
+ public function allowPastPosting()\r
+ {\r
return $this->getSetting('ballowpast');\r
}\r
-\r
- function getCorrectTime($t=0) {\r
- if ($t == 0) $t = time();\r
+ \r
+ /**\r
+ * Blog::getCorrectTime()\r
+ * \r
+ * @param integer $t\r
+ * @return integer\r
+ */\r
+ public function getCorrectTime($t=0)\r
+ {\r
+ if ( $t == 0 )\r
+ {\r
+ $t = time();\r
+ }\r
return ($t + 3600 * $this->getTimeOffset());\r
}\r
-\r
- function getName() {\r
+ \r
+ /**\r
+ * Blog::getName()\r
+ * \r
+ * @param void\r
+ * @return string name of this weblog\r
+ */\r
+ public function getName()\r
+ {\r
return $this->getSetting('bname');\r
}\r
-\r
- function getShortName() {\r
- return $this->getSetting('bshortname');\r
+ \r
+ /**\r
+ * Blog::getShortName()\r
+ * \r
+ * @param void\r
+ * @return string short name of this weblog\r
+ */\r
+ public function getShortName()\r
+ {\r
+ return $this->getSetting('bshortname');\r
}\r
-\r
- function getMaxComments() {\r
+ \r
+ /**\r
+ * Blog::getMaxComments()\r
+ * \r
+ * @param void\r
+ * @return integer maximum number of comments\r
+ */\r
+ public function getMaxComments()\r
+ {\r
return $this->getSetting('bmaxcomments');\r
}\r
-\r
- function getNotifyAddress() {\r
+ \r
+ /**\r
+ * Blog::getNotifyAddress()\r
+ * \r
+ * @param void\r
+ * @return string mail address for notifying\r
+ */\r
+ public function getNotifyAddress()\r
+ {\r
return $this->getSetting('bnotify');\r
}\r
-\r
- function getNotifyType() {\r
+ \r
+ /**\r
+ * Blog::getNotifyType()\r
+ * \r
+ * @param void\r
+ * @return integer notifycation type\r
+ */\r
+ public function getNotifyType()\r
+ {\r
return $this->getSetting('bnotifytype');\r
}\r
-\r
- function notifyOnComment() {\r
+ \r
+ /**\r
+ * Blog::notifyOnComment()\r
+ * \r
+ * @param void\r
+ * @return boolean\r
+ */\r
+ public function notifyOnComment()\r
+ {\r
$n = $this->getNotifyType();\r
return (($n != 0) && (($n % 3) == 0));\r
}\r
-\r
- function notifyOnVote() {\r
+ \r
+ /**\r
+ * Blog::notifyOnVote()\r
+ * \r
+ * @param void\r
+ * @return boolean\r
+ */\r
+ public function notifyOnVote()\r
+ {\r
$n = $this->getNotifyType();\r
return (($n != 0) && (($n % 5) == 0));\r
}\r
-\r
- function notifyOnNewItem() {\r
+ \r
+ /**\r
+ * Blog::notifyOnNewItem()\r
+ * \r
+ * @param void\r
+ * @return boolean\r
+ */\r
+ public function notifyOnNewItem()\r
+ {\r
$n = $this->getNotifyType();\r
return (($n != 0) && (($n % 7) == 0));\r
}\r
-\r
- function setNotifyType($val) {\r
+ \r
+ /**\r
+ * Blog::setNotifyType()\r
+ * \r
+ * @param integer $val\r
+ * @return void\r
+ */\r
+ public function setNotifyType($val)\r
+ {\r
$this->setSetting('bnotifytype',$val);\r
+ return;\r
}\r
-\r
-\r
- function getTimeOffset() {\r
+ \r
+ /**\r
+ * Blog::getTimeOffset()\r
+ * @param void\r
+ * @return \r
+ */\r
+ public function getTimeOffset()\r
+ {\r
return $this->getSetting('btimeoffset');\r
}\r
-\r
- function commentsEnabled() {\r
+ \r
+ /**\r
+ * Blog::commentsEnabled()\r
+ * @param void\r
+ * @return integer enabled or not\r
+ */\r
+ public function commentsEnabled()\r
+ {\r
return $this->getSetting('bcomments');\r
}\r
-\r
- function getURL() {\r
+ \r
+ /**\r
+ * Blog::getURL()\r
+ * @param void\r
+ * @return string URI for this weblog\r
+ */\r
+ public function getURL()\r
+ {\r
return $this->getSetting('burl');\r
}\r
-\r
- function getDefaultSkin() {\r
+ \r
+ /**\r
+ * Blog::getDefaultSkin()\r
+ * @param void\r
+ * @return name of skin as default for this weblog\r
+ */\r
+ public function getDefaultSkin()\r
+ {\r
return $this->getSetting('bdefskin');\r
}\r
-\r
- function getUpdateFile() {\r
+ \r
+ /**\r
+ * Blog::getUpdateFile()\r
+ * @param void\r
+ * @return string name of file to be updated when weblog is updated\r
+ */\r
+ public function getUpdateFile()\r
+ {\r
return $this->getSetting('bupdate');\r
}\r
-\r
- function getDescription() {\r
+ \r
+ /**\r
+ * Blog::getDescription()\r
+ * @param void\r
+ * @return string description for this weblog\r
+ */\r
+ public function getDescription()\r
+ {\r
return $this->getSetting('bdesc');\r
}\r
-\r
- function isPublic() {\r
+ \r
+ /**\r
+ * Blog::isPublic()\r
+ * @param void\r
+ * @return integer publlic or not\r
+ */\r
+ public function isPublic()\r
+ {\r
return $this->getSetting('bpublic');\r
}\r
-\r
- function emailRequired() {\r
+ \r
+ /**\r
+ * Blog::emailRequired()\r
+ * @param void\r
+ * @return integer email is required when posting comment or not\r
+ */\r
+ public function emailRequired()\r
+ {\r
return $this->getSetting('breqemail');\r
}\r
-\r
- function getSearchable() {\r
+ \r
+ /**\r
+ * Blog::getSearchable()\r
+ * @param void\r
+ * @return integer searchable or not\r
+ */\r
+ public function getSearchable()\r
+ {\r
return $this->getSetting('bincludesearch');\r
}\r
-\r
- function getDefaultCategory() {\r
+ \r
+ /**\r
+ * Blog::getDefaultCategory()\r
+ * @param void\r
+ * @return ID for category as a default\r
+ */\r
+ public function getDefaultCategory()\r
+ {\r
return $this->getSetting('bdefcat');\r
}\r
-\r
- function setPublic($val) {\r
- $this->setSetting('bpublic',$val);\r
+ \r
+ /**\r
+ * Blog::setPublic()\r
+ * @param integer $val allow comments by non-registered members or not\r
+ * @return void\r
+ */\r
+ public function setPublic($val)\r
+ {\r
+ $this->setSetting('bpublic', $val);\r
+ return;\r
}\r
-\r
- function setSearchable($val) {\r
- $this->setSetting('bincludesearch',$val);\r
+ \r
+ /**\r
+ * Blog::setSearchable()\r
+ * @param integer $val searchable from the other blogs or not\r
+ * @return void\r
+ */\r
+ public function setSearchable($val)\r
+ {\r
+ $this->setSetting('bincludesearch', $val);\r
+ return;\r
}\r
-\r
- function setDescription($val) {\r
+ \r
+ /**\r
+ * Blog::setDescription\r
+ * @param string $val description for this weblog\r
+ * @return void\r
+ */\r
+ public function setDescription($val)\r
+ {\r
$this->setSetting('bdesc',$val);\r
+ return;\r
}\r
-\r
- function setUpdateFile($val) {\r
+ \r
+ /**\r
+ * Blog::setUpdateFile()\r
+ * @param string $val name of file to beupdated when weblog is updated\r
+ * @return \r
+ */\r
+ public function setUpdateFile($val)\r
+ {\r
$this->setSetting('bupdate',$val);\r
+ return;\r
}\r
-\r
- function setDefaultSkin($val) {\r
- $this->setSetting('bdefskin',$val);\r
+ \r
+ /**\r
+ * Blog::setDefaultSkin()\r
+ * @param integer $val ID for default skin to use when displaying this weblog\r
+ * @return void\r
+ */\r
+ public function setDefaultSkin($val)\r
+ {\r
+ $this->setSetting('bdefskin', $val);\r
+ return;\r
}\r
-\r
- function setURL($val) {\r
- $this->setSetting('burl',$val);\r
+ \r
+ /**\r
+ * Blog::setURL()\r
+ * @param string $val URI for this weblog\r
+ * @return \r
+ */\r
+ public function setURL($val)\r
+ {\r
+ $this->setSetting('burl', $val);\r
+ return;\r
}\r
-\r
- function setName($val) {\r
- $this->setSetting('bname',$val);\r
+ \r
+ /**\r
+ * Blog::setName()\r
+ * @param string $val name of this weblog\r
+ * @return void\r
+ */\r
+ public function setName($val)\r
+ {\r
+ $this->setSetting('bname', $val);\r
+ return;\r
}\r
-\r
- function setShortName($val) {\r
- $this->setSetting('bshortname',$val);\r
+ \r
+ /**\r
+ * Blog::setShortName()\r
+ * @param string $val short name for this weblog\r
+ * @return void\r
+ */\r
+ public function setShortName($val)\r
+ {\r
+ $this->setSetting('bshortname', $val);\r
+ return;\r
}\r
-\r
- function setCommentsEnabled($val) {\r
+ \r
+ /**\r
+ * Blog::setCommentsEnabled()\r
+ * @param integer $val enabling posting comment or not\r
+ * @return void\r
+ */\r
+ public function setCommentsEnabled($val)\r
+ {\r
$this->setSetting('bcomments',$val);\r
+ return;\r
}\r
-\r
- function setMaxComments($val) {\r
- $this->setSetting('bmaxcomments',$val);\r
+ \r
+ /**\r
+ * Blog::setMaxComments()\r
+ * @param integer $val maximum number of comments for this weblog\r
+ * @return void\r
+ */\r
+ public function setMaxComments($val)\r
+ {\r
+ $this->setSetting('bmaxcomments', $val);\r
+ return;\r
}\r
-\r
- function setNotifyAddress($val) {\r
- $this->setSetting('bnotify',$val);\r
+ \r
+ /**\r
+ * Blog::setNotifyAddress()\r
+ * @param string $val email to be notified if weblog updated\r
+ * @return void\r
+ */\r
+ public function setNotifyAddress($val)\r
+ {\r
+ $this->setSetting('bnotify', $val);\r
+ return;\r
}\r
-\r
- function setEmailRequired($val) {\r
- $this->setSetting('breqemail',$val);\r
+ \r
+ /**\r
+ * Blog::setEmailRequired()\r
+ * @param string requiring comments with email or not from non member\r
+ * @return void\r
+ */\r
+ public function setEmailRequired($val)\r
+ {\r
+ $this->setSetting('breqemail', $val);\r
+ return;\r
}\r
\r
+ /**\r
+ * Blog::setTimeOffset()\r
+ * @param integer $val time offset\r
+ * @return void\r
+ */\r
public function setTimeOffset($val)\r
{\r
// check validity of value\r
$this->setSetting('btimeoffset',$val);\r
return;\r
}\r
-\r
- function setDefaultCategory($val) {\r
+ \r
+ /**\r
+ * Blog::setDefaultCategory()\r
+ * @param integer $val ID for default category for this weblog\r
+ * @return \r
+ */\r
+ public function setDefaultCategory($val)\r
+ {\r
$this->setSetting('bdefcat',$val);\r
+ return;\r
}\r
-\r
- function getSetting($key) {\r
+ \r
+ /**\r
+ * Blog::getSetting()\r
+ * @param string $key key for setting of this weblog\r
+ * @return mixed value for the setting\r
+ */\r
+ public function getSetting($key)\r
+ {\r
return $this->settings[$key];\r
}\r
-\r
- function setSetting($key,$value) {\r
+ \r
+ /**\r
+ * Blog::setSetting()\r
+ * @param string $key key for setting of this weblog\r
+ * @param mixed $value value for the key\r
+ * @return \r
+ */\r
+ public function setSetting($key, $value)\r
+ {\r
$this->settings[$key] = $value;\r
+ return;\r
}\r
-\r
+ \r
/**\r
* Blog::addTeamMember()\r
* Tries to add a member to the team. \r
* Returns false if the member was already on the team\r
* \r
- * @param Integer $memberid id for member\r
- * @param Boolean $admin super-admin or not\r
- * @return Boolean Success/Fail\r
+ * @param integer $memberid id for member\r
+ * @param boolean $admin super-admin or not\r
+ * @return boolean Success/Fail\r
*/\r
- function addTeamMember($memberid, $admin)\r
+ public function addTeamMember($memberid, $admin)\r
{\r
global $manager;\r
\r
$admin = intval($admin);\r
\r
// check if member is already a member\r
- $tmem = Member::createFromID($memberid);\r
+ $tmem =& $manager->getMember($memberid);\r
\r
- if ( $tmem->isTeamMember($this->getID()) )\r
+ if ( $tmem->isTeamMember($this->blogid) )\r
{\r
return 0;\r
}\r
\r
- $manager->notify(\r
- 'PreAddTeamMember',\r
- array(\r
- 'blog' => &$this,\r
- 'member' => &$tmem,\r
- 'admin' => &$admin\r
- )\r
+ $data = array(\r
+ 'blog' => &$this,\r
+ 'member' => &$tmem,\r
+ 'admin' => &$admin\r
);\r
+ $manager->notify('PreAddTeamMember', $data);\r
\r
// add to team\r
- $query = "INSERT INTO %s (TMEMBER, TBLOG, TADMIN) VALUES (%d, %d, %d);";
- $query = sprintf($query, sql_table('team'), (integer) $memberid, (integer) $this->getID(), (integer) $admin);
+ $query = "INSERT INTO %s (TMEMBER, TBLOG, TADMIN) VALUES (%d, %d, %d);";\r
+ $query = sprintf($query, sql_table('team'), (integer) $memberid, (integer) $this->blogid, (integer) $admin);\r
DB::execute($query);\r
\r
- $manager->notify(\r
- 'PostAddTeamMember',\r
- array(\r
- 'blog' => &$this,\r
- 'member' => &$tmem,\r
- 'admin' => $admin\r
- )\r
+ $data = array(\r
+ 'blog' => &$this,\r
+ 'member' => &$tmem,\r
+ 'admin' => $admin\r
);\r
+ $manager->notify('PostAddTeamMember', $data);\r
\r
$logMsg = sprintf(_TEAM_ADD_NEWTEAMMEMBER, $tmem->getDisplayName(), $memberid, $this->getName());\r
ActionLog::add(INFO, $logMsg);\r
\r
return 1;\r
}\r
-\r
- function getID() {\r
+ \r
+ /**\r
+ * Blog::getID()\r
+ * @param void\r
+ * @return integer ID for this weblog\r
+ */\r
+ public function getID()\r
+ {\r
return (integer) $this->blogid;\r
}\r
-\r
+ \r
/**\r
- * Checks if a blog with a given shortname exists \r
- * Returns true if there is a blog with the given shortname (static)\r
- * \r
- * @param $name\r
- * blog shortname\r
- */\r
- function exists($name) {\r
+ * Checks if a blog with a given shortname exists \r
+ * Returns true if there is a blog with the given shortname (static)\r
+ * \r
+ * @param string $name blog shortname\r
+ * @return boolean exists or not\r
+ */\r
+ public function exists($name)\r
+ {\r
$r = DB::getResult('SELECT * FROM '.sql_table('blog').' WHERE bshortname='. DB::quoteValue($name));\r
return ($r->rowCount() != 0);\r
}\r
-\r
+ \r
/**\r
- * Checks if a blog with a given id exists \r
- * Returns true if there is a blog with the given ID (static)\r
- * \r
- * @param $id\r
- * blog id\r
- */\r
- function existsID($id) {\r
+ * Checks if a blog with a given id exists \r
+ * Returns true if there is a blog with the given ID (static)\r
+ * \r
+ * @param integer $id ID for searched weblog\r
+ * @return boolean exists or not\r
+ */\r
+ public function existsID($id)\r
+ {\r
$r = DB::getResult('SELECT * FROM '.sql_table('blog').' WHERE bnumber='.intval($id));\r
return ($r->rowCount() != 0);\r
}\r
-\r
+ \r
/**\r
- * flag there is a future post pending \r
- */\r
- function setFuturePost() {\r
- $query = 'UPDATE '.sql_table('blog')\r
- . " SET bfuturepost='1' WHERE bnumber=" . $this->getID();\r
+ * Blog::setFuturePost()\r
+ * flag there is a future post pending\r
+ * \r
+ * @param void\r
+ * @return void\r
+ */\r
+ public function setFuturePost()\r
+ {\r
+ $query = "UPDATE %s SET bfuturepost='1' WHERE bnumber=%d;";\r
+ $query = sprintf($query, sql_table('blog'), (integer) $this->blogid);\r
DB::execute($query);\r
+ return;\r
}\r
-\r
+ \r
/**\r
- * clear there is a future post pending \r
- */\r
- function clearFuturePost() {\r
- $query = 'UPDATE '.sql_table('blog')\r
- . " SET bfuturepost='0' WHERE bnumber=" . $this->getID();\r
+ * Blog::clearFuturePost()\r
+ * clear there is a future post pending\r
+ * \r
+ * @param void\r
+ * @return void\r
+ */\r
+ public function clearFuturePost()\r
+ {\r
+ $query = "UPDATE %s SET bfuturepost='0' WHERE bnumber=%d;";\r
+ $query = sprintf($query, sql_table('blog'), (integer) $this->blogid);\r
DB::execute($query);\r
+ return;\r
}\r
-\r
+ \r
/**\r
- * check if we should throw justPosted event \r
- */\r
- function checkJustPosted() {\r
+ * Blog::checkJustPosted()\r
+ * check if we should throw justPosted event \r
+ * \r
+ * @param void\r
+ * @return void\r
+ */\r
+ public function checkJustPosted()\r
+ {\r
global $manager;\r
-\r
- if ($this->settings['bfuturepost'] == 1) {\r
- $blogid = $this->getID();\r
- $result = DB::getResult("SELECT * FROM " . sql_table('item')\r
- . " WHERE iposted=0 AND iblog=" . $blogid . " AND itime<NOW()");\r
- if ( $result->rowCount() > 0 ) {\r
+ \r
+ if ( $this->settings['bfuturepost'] == 1 )\r
+ {\r
+ $query = "SELECT * FROM %s WHERE iposted=0 AND iblog=%d AND itime < NOW();";\r
+ $query = sprintf($query, sql_table('item'), (integer) $this->blogid);\r
+ \r
+ $result = DB::getResult($query);\r
+ if ( $result->rowCount() > 0 )\r
+ {\r
// This $pinged is allow a plugin to tell other hook to the event that a ping is sent already\r
// Note that the plugins's calling order is subject to thri order in the plugin list\r
- $pinged = false;\r
- $manager->notify(\r
- 'JustPosted',\r
- array('blogid' => $blogid,\r
- 'pinged' => &$pinged\r
- )\r
- );\r
-\r
+ $pinged = FALSE;\r
+ $manager->notify('JustPosted', array('blogid' => $this->blogid, 'pinged' => &$pinged));\r
+ \r
// clear all expired future posts\r
- DB::execute("UPDATE " . sql_table('item') . " SET iposted='1' WHERE iblog=" . $blogid . " AND itime<NOW()");\r
-\r
+ $query = "UPDATE %s SET iposted='1' WHERE iblog=%d AND itime < NOW();";\r
+ $query = spriintf($query, sql_table('item'), (integer) $this->blogid);\r
+ DB::execute($query);\r
+ \r
// check to see any pending future post, clear the flag is none\r
- $result = DB::getResult("SELECT * FROM " . sql_table('item')\r
- . " WHERE iposted=0 AND iblog=" . $blogid);\r
- if ( $result->rowCount() == 0 ) {\r
+ $query = "SELECT * FROM %s WHERE iposted=0 AND iblog=%d;";\r
+ $query = sprintf($query, sql_table('item'), (integer) $this->blogid);\r
+ \r
+ $result = DB::getResult($query);\r
+ if ( $result->rowCount() == 0 )\r
+ {\r
$this->clearFuturePost();\r
}\r
}\r
}\r
+ return;\r
}\r
-\r
+ \r
/**\r
+ * Blog::readLogFromList()\r
* Shows the given list of items for this blog\r
*\r
- * @param $itemarray\r
- * array of item numbers to be displayed\r
- * @param $template\r
- * String representing the template _NAME_ (!)\r
- * @param $highlight\r
- * contains a query that should be highlighted\r
- * @param $comments\r
- * 1=show comments 0=don't show comments\r
- * @param $dateheads\r
- * 1=show dateheads 0=don't show dateheads\r
- * @param $showDrafts\r
- * 0=do not show drafts 1=show drafts\r
- * @param $showFuture\r
- * 0=do not show future posts 1=show future posts\r
- * @returns int\r
- * amount of items shown\r
- */\r
- function readLogFromList($itemarray, $template, $highlight = '', $comments = 1, $dateheads = 1,$showDrafts = 0, $showFuture = 0) {\r
-\r
+ * @param array $itemarray array of item numbers to be displayed\r
+ * @param string $template string representing the template _NAME_ (!)\r
+ * @param string $highlight contains a query that should be highlighted\r
+ * @param boolean $comments 1=show comments 0=don't show comments\r
+ * @param boolean $dateheads 1=show dateheads 0=don't show dateheads\r
+ * @param boolean $showDrafts 0=do not show drafts 1=show drafts\r
+ * @param boolean $showFuture 0=do not show future posts 1=show future posts\r
+ * @return integer amount of items shown\r
+ */\r
+ public function readLogFromList($itemarray, $template, $highlight = '', $comments = 1, $dateheads = 1,$showDrafts = 0, $showFuture = 0)\r
+ {\r
$query = $this->getSqlItemList($itemarray,$showDrafts,$showFuture);\r
-\r
return $this->showUsingQuery($template, $query, $highlight, $comments, $dateheads);\r
}\r
-\r
+ \r
/**\r
* Blog::getSqlItemList()\r
* Returns the SQL query used to fill out templates for a list of items\r
* No LIMIT clause is added. (caller should add this if multiple pages are requested)\r
*\r
- * @param array $itemarray an array holding the item numbers of the items to be displayed\r
- * @param integer $showDrafts 0=do not show drafts 1=show drafts\r
- * @param integer $showFuture 0=do not show future posts 1=show future posts\r
+ * @param array $itemarray an array holding the item numbers of the items to be displayed\r
+ * @param integer $showDrafts 0=do not show drafts 1=show drafts\r
+ * @param integer $showFuture 0=do not show future posts 1=show future posts\r
* @return string either a full SQL query, or an empty string\r
- * \r
*/\r
- function getSqlItemList($itemarray,$showDrafts = 0,$showFuture = 0)\r
+ public function getSqlItemList($itemarray,$showDrafts = 0,$showFuture = 0)\r
{\r
if ( !is_array($itemarray) )\r
{\r
if ( !$showFuture )\r
{\r
// don't show future items\r
- $query .= " and i.itime<='" . DB::formatDateTime($this->getCorrectTime()) . "'";\r
+ $query .= ' and i.itime<=' . DB::formatDateTime($this->getCorrectTime());\r
}\r
\r
$query .= ' and i.inumber='.intval($value);\r
\r
return $query;\r
}\r
+ \r
+ /**\r
+ * Blog::convertBreaks()\r
+ * Get the the setting for the line break handling\r
+ * [should be named as getConvertBreaks()]\r
+ * \r
+ * @deprecated\r
+ * @param void\r
+ * @return \r
+ */\r
+ public function convertBreaks()\r
+ {\r
+ return $this->getSetting('bconvertbreaks');\r
+ }\r
+ \r
+ /**\r
+ * Set the the setting for the line break handling\r
+ * \r
+ * @deprecated\r
+ * @param boolean $val new value for bconvertbreaks\r
+ * @return void\r
+ */\r
+ public function setConvertBreaks($val)\r
+ {\r
+ $this->setSetting('bconvertbreaks', $val);\r
+ return;\r
+ }\r
}\r
+=======
+<?php
+
+/*
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2012 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * A class representing a blog and containing functions to get that blog shown
+ * on the screen
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2009 The Nucleus Group
+ * @version $Id: BLOG.php 1624 2012-01-09 11:36:20Z sakamocchi $
+ */
+
+if ( !function_exists('requestVar') ) exit;
+require_once dirname(__FILE__) . '/ITEMACTIONS.php';
+
+class Blog
+{
+ // blog id
+ public $blogid;
+
+ // After creating an object of the blog class, contains true if the BLOG object is
+ // valid (the blog exists)
+ public $isValid;
+
+ // associative array, containing all blogsettings (use the get/set functions instead)
+ private $settings;
+
+ // ID of currently selected category
+ private $selectedcatid;
+
+ /**
+ * Blog::_\construct()
+ * Creates a new BLOG object for the given blog
+ *
+ * @param integer $id blogid
+ * @return void
+ */
+ public function __construct($id)
+ {
+ global $catid;
+
+ $this->blogid = (integer) $id;
+ $this->readSettings();
+ $this->setSelectedCategory($catid);
+ return;
+ }
+
+ /**
+ * Blog::readLog()
+ * Shows the given amount of items for this blog
+ *
+ * @param string $template String representing the template _NAME_ (!)
+ * @param integer $amountEntries amount of entries to show
+ * @param integer $startpos offset from where items should be shown (e.g. 5 = start at fifth item)
+ * @return integer amount of items shown
+ */
+ public function readLog($template, $amountEntries, $offset = 0, $startpos = 0)
+ {
+ return $this->readLogAmount($template,$amountEntries,'','',1,1,$offset, $startpos);
+ }
+
+ /**
+ * Blog::showArchive()
+ * Shows an archive for a given month
+ *
+ * @param integer $year year
+ * @param integer $month month
+ * @param string $template String representing the template name to be used
+ * @return void
+ */
+ public function showArchive($templatename, $year, $month=0, $day=0)
+ {
+ // create extra where clause for select query
+ if ( $day == 0 && $month != 0 )
+ {
+ $timestamp_start = mktime(0,0,0,$month,1,$year);
+ // also works when $month==12
+ $timestamp_end = mktime(0,0,0,$month+1,1,$year);
+ }
+ elseif ( $month == 0 )
+ {
+ $timestamp_start = mktime(0,0,0,1,1,$year);
+ // also works when $month==12
+ $timestamp_end = mktime(0,0,0,12,31,$year);
+ }
+ else
+ {
+ $timestamp_start = mktime(0,0,0,$month,$day,$year);
+ $timestamp_end = mktime(0,0,0,$month,$day+1,$year);
+ }
+ $extra_query = " and i.itime>=%s and i.itime<%s";
+ $extra_query = sprintf($extra_query, DB::formatDateTime($timestamp_start), DB::formatDateTime($timestamp_end));
+
+ $this->readLogAmount($templatename,0,$extra_query,'',1,1);
+ return;
+ }
+
+ /**
+ * Blog::setSelectedCategory()
+ * Sets the selected category by id (only when category exists)
+ *
+ * @param integer $catid ID for category
+ * @return void
+ */
+ public function setSelectedCategory($catid)
+ {
+ if ( $this->isValidCategory($catid) || (intval($catid) == 0) )
+ {
+ $this->selectedcatid = intval($catid);
+ }
+ return;
+ }
+
+ /**
+ * Blog::setSelectedCategoryByName()
+ * Sets the selected category by name
+ *
+ * @param string $catname name of category
+ * @return void
+ */
+ public function setSelectedCategoryByName($catname)
+ {
+ $this->setSelectedCategory($this->getCategoryIdFromName($catname));
+ return;
+ }
+
+ /**
+ * Blog::getSelectedCategory()
+ * Returns the selected category
+ *
+ * @param void
+ * @return integer
+ */
+ public function getSelectedCategory()
+ {
+ return $this->selectedcatid;
+ }
+
+ /**
+ * Shows the given amount of items for this blog
+ *
+ * @param string $template string representing the template _NAME_ (!)
+ * @param integer $amountEntries amount of entries to show (0 = no limit)
+ * @param string $extraQuery extra conditions to be added to the query
+ * @param string $highlight contains a query that should be highlighted
+ * @param integer $comments 1=show comments 0=don't show comments
+ * @param integer $dateheads 1=show dateheads 0=don't show dateheads
+ * @param integer $offset offset
+ * @return integer amount of items shown
+ */
+ private function readLogAmount($template, $amountEntries, $extraQuery, $highlight, $comments, $dateheads, $offset = 0, $startpos = 0)
+ {
+ $query = $this->getSqlBlog($extraQuery);
+
+ if ( $amountEntries > 0 )
+ {
+ // $offset zou moeten worden:
+ // (($startpos / $amountentries) + 1) * $offset ... later testen ...
+ $query .= ' LIMIT ' . intval($startpos + $offset).',' . intval($amountEntries);
+ }
+ return $this->showUsingQuery($template, $query, $highlight, $comments, $dateheads);
+ }
+
+ /**
+ * Blog::showUsingQuery()
+ * Do the job for readLogAmmount
+ *
+ * @param string $templateName template name
+ * @param string $query string for query
+ * @param string $highlight string to be highlighted
+ * @param integer $comments the number of comments
+ * @param boolean $dateheads date header is needed or not
+ * @return integer the number of rows as a result of mysql query
+ */
+ private function showUsingQuery($templateName, $query, $highlight = '', $comments = 0, $dateheads = 1)
+ {
+ global $CONF, $manager, $currentTemplateName;
+
+ $lastVisit = cookieVar($CONF['CookiePrefix'] .'lastVisit');
+ if ( $lastVisit != 0 )
+ {
+ $lastVisit = $this->getCorrectTime($lastVisit);
+ }
+
+ // set templatename as global variable (so plugins can access it)
+ $currentTemplateName = $templateName;
+ $template =& $manager->getTemplate($templateName);
+
+ // create parser object & action handler
+ $handler = new ItemActions($this);
+ $handler->setTemplate($template);
+ $handler->setHighlight($highlight);
+ $handler->setLastVisit($lastVisit);
+ $handler->setShowComments($comments);
+
+ $parser = new Parser($handler);
+
+ // execute query
+ $items = DB::getResult($query);
+
+ // loop over all items
+ $old_date = 0;
+ foreach ( $items as $item )
+ {
+ // string timestamp -> unix timestamp
+ $item['timestamp'] = strtotime($item['itime']);
+
+ // action handler needs to know the item we're handling
+ $handler->setCurrentItem($item);
+
+ // add date header if needed
+ if ( $dateheads )
+ {
+ $new_date = date('dFY', $item['timestamp']);
+ if ( $new_date != $old_date )
+ {
+ // unless this is the first time, write date footer
+ $timestamp = $item['timestamp'];
+ if ( $old_date != 0 )
+ {
+ $oldTS = strtotime($old_date);
+ $data = array('blog' => &$this, 'timestamp' => $oldTS);
+ $manager->notify('PreDateFoot', $data);
+
+ if ( !in_array('DATE_FOOTER', $template) || empty($template['DATE_FOOTER']) )
+ {
+ $tmp_footer = '';
+ }
+ else
+ {
+ $tmp_footer = i18n::formatted_datetime($template['DATE_FOOTER'], $oldTS);
+ }
+ $parser->parse($tmp_footer);
+ $manager->notify('PostDateFoot', $data);
+ }
+
+ $data = array('blog' => &$this, 'timestamp' => $timestamp);
+ $manager->notify('PreDateHead', $data);
+
+ // note, to use templatvars in the dateheader, the %-characters need to be doubled in
+ // order to be preserved by strftime
+ if ( !in_array('DATE_HEADER', $template) || empty($template['DATE_HEADER']) )
+ {
+ $tmp_header = '';
+ }
+ else
+ {
+ $tmp_header = i18n::formatted_datetime($template['DATE_HEADER'], $timestamp);
+ }
+ $parser->parse($tmp_header);
+ $manager->notify('PostDateHead', $data);
+ }
+ $old_date = $new_date;
+ }
+
+ // parse item
+ $parser->parse($template['ITEM_HEADER']);
+ $data = array('blog' => &$this, 'item' => &$item);
+ $manager->notify('PreItem', $data);
+ $parser->parse($template['ITEM']);
+ $manager->notify('PostItem', $data);
+ $parser->parse($template['ITEM_FOOTER']);
+ }
+
+ $numrows = $items->rowCount();
+
+ // add another date footer if there was at least one item
+ if ( ($numrows > 0) && $dateheads )
+ {
+ $data = array('blog' => &$this, 'timestamp' => strtotime($old_date));
+ $manager->notify('PreDateFoot', $data);
+ $parser->parse($template['DATE_FOOTER']);
+ $manager->notify('PostDateFoot', $data);
+ }
+
+ $items->closeCursor();
+ return $numrows;
+ }
+
+ /**
+ * Blog::showOneitem()
+ * Simplified function for showing only one item
+ *
+ * @param integer $itemid ID for item
+ * @param array $template template for item
+ * @param string $highlight string for highlight
+ * @return integer 1
+ */
+ public function showOneitem($itemid, $template, $highlight)
+ {
+ $extraQuery = ' and inumber=' . intval($itemid);
+
+ return $this->readLogAmount($template, 1, $extraQuery, $highlight, 0, 0);
+ }
+
+ /**
+ * Blog::addItem()
+ * Adds an item to this blog
+ *
+ * @param integer $catid ID for category
+ * @param string $title ID for
+ * @param string $body text for body
+ * @param string $more text for more
+ * @param integer $blogid ID for blog
+ * @param integer $authorid ID for author
+ * @param timestamp $timestamp UNIX timestamp for post
+ * @param boolean $closed opened or closed
+ * @param boolean $draft draft or not
+ * @param boolean $posted posted or not
+ * @return integer ID for added item
+ */
+ function additem($catid, $title, $body, $more, $blogid, $authorid, $timestamp, $closed, $draft, $posted='1')
+ {
+ global $manager;
+
+ $blogid = (integer) $blogid;
+ $authorid = (integer) $authorid;
+ $title = $title;
+ $body = $body;
+ $more = $more;
+ $catid = intval($catid);
+
+ // convert newlines to <br />
+ if ( $this->convertBreaks() )
+ {
+ $body = addBreaks($body);
+ $more = addBreaks($more);
+ }
+
+ if ( $closed != '1' )
+ {
+ $closed = '0';
+ }
+ if ( $draft != '0' )
+ {
+ $draft = '1';
+ }
+
+ if ( !$this->isValidCategory($catid) )
+ {
+ $catid = $this->getDefaultCategory();
+ }
+
+ $isFuture = 0;
+ if ( $timestamp > $this->getCorrectTime() )
+ {
+ $isFuture = 1;
+ }
+
+ $timestamp = date('Y-m-d H:i:s',$timestamp);
+
+ $data = array('title' => &$title, 'body' => &$body, 'more' => &$more, 'blog' => $this, 'authorid' => &$authorid, 'timestamp' => &$timestamp, 'closed' => &$closed, 'draft' => &$draft, 'catid' => &$catid);
+ $manager->notify('PreAddItem', $data);
+
+ $ititle = DB::quoteValue($title);
+ $ibody = DB::quoteValue($body);
+ $imore = DB::quoteValue($more);
+ $timestamp = DB::formatDateTime(strtotime($timestamp));
+
+ $query = "INSERT INTO %s (ITITLE, IBODY, IMORE, IBLOG, IAUTHOR, ITIME, ICLOSED, IDRAFT, ICAT, IPOSTED) VALUES (%s, %s, %s, %d, %d, %s, %s, %s, %s, %s)";
+ $query = sprintf($query, sql_table('item'), $ititle, $ibody, $imore, $blogid, $authorid, $timestamp, $closed, $draft, $catid, $posted);
+ DB::execute($query);
+ $itemid = DB::getInsertId();
+
+ $data = array('itemid' => $itemid);
+ $manager->notify('PostAddItem', $data);
+
+ if ( !$draft )
+ {
+ $this->updateUpdateFile();
+ }
+ // send notification mail
+ if ( !$draft && !$isFuture && $this->getNotifyAddress() && $this->notifyOnNewItem() )
+ {
+ $this->sendNewItemNotification($itemid, $title, $body);
+ }
+ return $itemid;
+ }
+
+ /**
+ * Blog::sendNewItemNotification()
+ * Send a new item notification to the notification list
+ *
+ * @param string $itemid ID of the item
+ * @param string $title title of the item
+ * @param string $body body of the item
+ * @return void
+ */
+ public function sendNewItemNotification($itemid, $title, $body)
+ {
+ global $CONF, $member;
+
+ $ascii = Entity::anchor_footnoting($body);
+
+ $message = _NOTIFY_NI_MSG . " \n";
+ $temp = parse_url($CONF['Self']);
+ if ( $temp['scheme'] )
+ {
+ $message .= Link::create_item_link($itemid) . "\n\n";
+ }
+ else
+ {
+ $tempurl = $this->getURL();
+ if ( i18n::substr($tempurl, -1) == '/' || i18n::substr($tempurl, -4) == '.php' )
+ {
+ $message .= $tempurl . '?itemid=' . $itemid . "\n\n";
+ }
+ else
+ {
+ $message .= $tempurl . '/?itemid=' . $itemid . "\n\n";
+ }
+ }
+ $message .= _NOTIFY_TITLE . ' ' . strip_tags($title) . "\n";
+ $message .= _NOTIFY_CONTENTS . "\n " . $ascii . "\n";
+ $message .= NOTIFICATION::get_mail_footer();
+
+ $subject = $this->getName() . ': ' . _NOTIFY_NI_TITLE;
+
+ $from = $member->getNotifyFromMailAddress();
+
+ NOTIFICATION::mail($this->getNotifyAddress(), $subject, $message, $from, i18n::get_current_charset());
+ return;
+ }
+
+ /**
+ * Blog::createNewCategory()
+ * Creates a new category for this blog
+ *
+ * @param string $catName name of the new category. When empty, a name is generated automatically (starting with newcat)
+ * @param string $catDescription description of the new category. Defaults to 'New Category'
+ * @return integer ID for new category on success. 0 on failure
+ */
+ public function createNewCategory($catName = '', $catDescription = _CREATED_NEW_CATEGORY_DESC)
+ {
+ global $member, $manager;
+
+ if ( !$member->blogAdminRights($this->blogid) )
+ {
+ return 0;
+ }
+
+ // generate
+ if ( $catName == '' )
+ {
+ $catName = _CREATED_NEW_CATEGORY_NAME;
+ $i = 1;
+
+ $res = DB::getResult('SELECT * FROM '.sql_table('category')." WHERE cname='".$catName.$i."' and cblog=".$this->blogid);
+ while ( $res->rowCount() > 0 )
+ {
+ $i++;
+ $res = DB::getResult('SELECT * FROM '.sql_table('category')." WHERE cname='".$catName.$i."' and cblog=".$this->blogid);
+ }
+
+ $catName = $catName . $i;
+ }
+
+ $data = array(
+ 'blog' => &$this,
+ 'name' => &$catName,
+ 'description' => $catDescription
+ );
+ $manager->notify('PreAddCategory', $data);
+
+ $query = "INSERT INTO %s (cblog, cname, cdesc) VALUES (%d, %s, %s)";
+ $query = sprintf($query, sql_table('category'), (integer) $this->blogid, DB::quoteValue($catName), DB::quoteValue($catDescription));
+ DB::execute($query);
+ $catid = DB::getInsertId();
+
+ $data = array(
+ 'blog' => &$this,
+ 'name' => $catName,
+ 'description' => $catDescription,
+ 'catid' => $catid
+ );
+ $manager->notify('PostAddCategory', $data);
+
+ return $catid;
+ }
+
+ /**
+ * Blog::search()
+ * Searches all months of this blog for the given query
+ *
+ * @param string $query search query
+ * @param array $template template to be used (__NAME__ of the template)
+ * @param integer $amountMonths max amount of months to be search (0 = all)
+ * @param integer $maxresults max number of results to show
+ * @param integer $startpos offset
+ * @return amount of hits found
+ */
+ public function search($query, $template, $amountMonths, $maxresults, $startpos) {
+ global $CONF, $manager;
+
+ $highlight = '';
+ $sqlquery = $this->getSqlSearch($query, $amountMonths, $highlight);
+
+ if ( $sqlquery == '' )
+ {
+ // no query -> show everything
+ $extraquery = '';
+ $amountfound = $this->readLogAmount($template, $maxresults, $extraQuery, $query, 1, 1);
+ }
+ else
+ {
+ // add LIMIT to query (to split search results into pages)
+ if ( intval($maxresults > 0) )
+ {
+ $sqlquery .= ' LIMIT ' . intval($startpos) . ',' . intval($maxresults);
+ }
+
+ // show results
+ $amountfound = $this->showUsingQuery($template, $sqlquery, $highlight, 1, 1);
+
+ // when no results were found, show a message
+ if ( $amountfound == 0 )
+ {
+ $template =& $manager->getTemplate($template);
+ $vars = array(
+ 'query' => Entity::hsc($query),
+ 'blogid' => $this->blogid
+ );
+ echo Template::fill($template['SEARCH_NOTHINGFOUND'], $vars);
+ }
+ }
+ return $amountfound;
+ }
+
+ /**
+ * Blog::getSqlSearch()
+ * Returns an SQL query to use for a search query
+ * No LIMIT clause is added. (caller should add this if multiple pages are requested)
+ *
+ * @param string $query search query
+ * @param integer $amountMonths amount of months to search back. Default = 0 = unlimited
+ * @param string $mode either empty, or 'count'. In this case, the query will be a SELECT COUNT(*) query
+ * @return string $highlight words to highlight (out parameter)
+ * @return string either a full SQL query, or an empty string (if querystring empty)
+ */
+ public function getSqlSearch($query, $amountMonths = 0, &$highlight, $mode = '')
+ {
+ $searchclass = new Search($query);
+
+ $highlight = $searchclass->inclusive;
+
+ // if querystring is empty, return empty string
+ if ( $searchclass->inclusive == '' )
+ {
+ return '';
+ }
+
+ $where = $searchclass->boolean_sql_where('ititle,ibody,imore');
+ $select = $searchclass->boolean_sql_select('ititle,ibody,imore');
+
+ // get list of blogs to search
+ $blogs = $searchclass->blogs; // array containing blogs that always need to be included
+ $blogs[] = $this->blogid; // also search current blog (duh)
+ $blogs = array_unique($blogs); // remove duplicates
+ $selectblogs = '';
+ if ( count($blogs) > 0 )
+ {
+ $selectblogs = ' and i.iblog in (' . implode(',', $blogs) . ')';
+ }
+
+ if ( $mode == '' )
+ {
+ $query = 'SELECT i.inumber as itemid, i.ititle as title, i.ibody as body, i.itime, i.imore as more, i.icat as catid, i.iclosed as closed,
+ m.mname as author, m.mrealname as authorname, m.mnumber as authorid, m.memail as authormail, m.murl as authorurl,
+ c.cname as category';
+
+ if ( $select )
+ {
+ $query .= ', '.$select. ' as score ';
+ }
+ }
+ else
+ {
+ $query = 'SELECT COUNT(*) as result ';
+ }
+
+ $query .= ' FROM '.sql_table('item').' as i, '.sql_table('member').' as m, '.sql_table('category').' as c'
+ . ' WHERE i.iauthor=m.mnumber'
+ . ' and i.icat=c.catid'
+ // exclude drafts
+ . ' and i.idraft=0'
+ . $selectblogs
+ // don't show future items
+ . ' and i.itime<=' . DB::formatDateTime($this->getCorrectTime())
+ . ' and '.$where;
+
+ // take into account amount of months to search
+ if ( $amountMonths > 0 )
+ {
+ $localtime = getdate($this->getCorrectTime());
+ $timestamp_start = mktime(0,0,0,$localtime['mon'] - $amountMonths,1,$localtime['year']);
+ $query .= ' and i.itime>' . DB::formatDateTime($timestamp_start);
+ }
+
+ if ( $mode == '' )
+ {
+ if ( $select )
+ {
+ $query .= ' ORDER BY score DESC';
+ }
+ else
+ {
+ $query .= ' ORDER BY i.itime DESC ';
+ }
+ }
+
+ return $query;
+ }
+
+ /**
+ * Blog::getSqlBlog()
+ * Returns the SQL query that's normally used to display the blog items on the index type skins
+ * No LIMIT clause is added. (caller should add this if multiple pages are requested)
+ *
+ * @param string $extraQuery extra query string
+ * @param string $mode either empty, or 'count'. In this case, the query will be a SELECT COUNT(*) query
+ * @return string either a full SQL query, or an empty string
+ */
+ public function getSqlBlog($extraQuery, $mode = '')
+ {
+ if ( $mode == '' )
+ {
+ $query = 'SELECT i.inumber as itemid, i.ititle as title, i.ibody as body, m.mname as author,
+ m.mrealname as authorname, i.itime, i.imore as more, m.mnumber as authorid, m.memail as authormail,
+ m.murl as authorurl, c.cname as category, i.icat as catid, i.iclosed as closed';
+ }
+ else
+ {
+ $query = 'SELECT COUNT(*) as result ';
+ }
+
+ $query .= ' FROM '.sql_table('item').' as i, '.sql_table('member').' as m, '.sql_table('category').' as c'
+ . ' WHERE i.iblog='.$this->blogid
+ . ' and i.iauthor=m.mnumber'
+ . ' and i.icat=c.catid'
+ . ' and i.idraft=0' // exclude drafts
+ . ' and i.itime<=' . DB::formatDateTime($this->getCorrectTime()); // don't show future items
+
+ if ( $this->selectedcatid )
+ {
+ $query .= ' and i.icat=' . $this->selectedcatid . ' ';
+ }
+
+ $query .= $extraQuery;
+
+ if ( $mode == '' )
+ {
+ $query .= ' ORDER BY i.itime DESC';
+ }
+ return $query;
+ }
+
+ /**
+ * Blog::showArchiveList()
+ * Shows the archivelist using the given template
+ *
+ * @param string $template template name
+ * @param string $mode year/month/day
+ * @param integer $limit limit of record count
+ * @return void
+ */
+ public function showArchiveList($template, $mode = 'month', $limit = 0)
+ {
+ global $CONF, $catid, $manager;
+
+ if ( !isset ($linkparams) )
+ {
+ $linkparams = array();
+ }
+
+ if ( $catid )
+ {
+ $linkparams = array('catid' => $catid);
+ }
+
+ $template =& $manager->getTemplate($template);
+ $listitem['blogid'] = $this->blogid;
+
+ if ( !array_key_exists('ARCHIVELIST_HEADER', $template) || !$template['ARCHIVELIST_HEADER'] )
+ {
+ $tplt = '';
+ }
+ else
+ {
+ $tplt = $template['ARCHIVELIST_HEADER'];
+ }
+
+ echo Template::fill($tplt, $listitem);
+
+ $query = 'SELECT itime, SUBSTRING(itime,1,4) AS Year, SUBSTRING(itime,6,2) AS Month, SUBSTRING(itime,9,2) AS Day'
+ . ' FROM '.sql_table('item')
+ . ' WHERE iblog=' . $this->blogid
+ . ' AND itime <=' . DB::formatDateTime($this->getCorrectTime()) // don't show future items!
+ . ' AND idraft=0'; // don't show draft items
+
+ if ( $catid )
+ {
+ $query .= ' and icat=' . intval($catid);
+ }
+
+ $query .= ' GROUP BY Year';
+ if ( $mode == 'month' || $mode == 'day' )
+ {
+ $query .= ', Month';
+ }
+ if ( $mode == 'day' )
+ {
+ $query .= ', Day';
+ }
+
+ $query .= ' ORDER BY itime DESC';
+
+ if ( $limit > 0 )
+ {
+ $query .= ' LIMIT ' . intval($limit);
+ }
+
+ $res = DB::getResult($query);
+ foreach ( $res as $current )
+ {
+ /* string time -> unix timestamp */
+ $current['itime'] = strtotime($current['itime']);
+
+ if ( $mode == 'day' )
+ {
+ $archivedate = date('Y-m-d',$current['itime']);
+ $archive['day'] = date('d',$current['itime']);
+ $listitem['day'] = date('d',$current['itime']);
+ $listitem['month'] = date('m',$current['itime']);
+ $archive['month'] = $listitem['month'];
+ }
+ elseif ( $mode == 'year' )
+ {
+ $archivedate = date('Y',$current['itime']);
+ $listitem['day'] = '';
+ $listitem['month'] = '';
+ $archive['day'] = '';
+ $archive['month'] = '';
+ }
+ else
+ {
+ $archivedate = date('Y-m',$current['itime']);
+ $listitem['month'] = date('m',$current['itime']);
+ $archive['month'] = $listitem['month'];
+ $listitem['day'] = '';
+ $archive['day'] = '';
+ }
+
+ $listitem['year'] = date('Y',$current['itime']);
+ $archive['year'] = $listitem['year'];
+ $listitem['archivelink'] = Link::create_archive_link($this->blogid,$archivedate,$linkparams);
+
+ $data = array('listitem' => &$listitem);
+ $manager->notify('PreArchiveListItem', $data);
+
+ $temp = Template::fill($template['ARCHIVELIST_LISTITEM'],$listitem);
+ echo i18n::formatted_datetime($temp, $current['itime']);
+ return;
+ }
+
+ $res->closeCursor();
+
+ if ( !array_key_exists('ARCHIVELIST_FOOTER', $template) || !$template['ARCHIVELIST_FOOTER'] )
+ {
+ $tplt = '';
+ }
+ else
+ {
+ $tplt = $template['ARCHIVELIST_FOOTER'];
+ }
+
+ echo Template::fill($tplt, $listitem);
+ return;
+ }
+
+ /**
+ * Blog::showCategoryList()
+ * Shows the list of categories using a given template
+ *
+ * @param string $template Template Name
+ * @return void
+ */
+ public function showCategoryList($template)
+ {
+ global $CONF, $archive, $archivelist, $manager;
+
+ /*
+ * determine arguments next to catids
+ * I guess this can be done in a better way, but it works
+ */
+ $linkparams = array();
+ if ( $archive )
+ {
+ $blogurl = Link::create_archive_link($this->blogid, $archive, '');
+ $linkparams['blogid'] = $this->blogid;
+ $linkparams['archive'] = $archive;
+ }
+ else if ( $archivelist )
+ {
+ $blogurl = Link::create_archivelist_link($this->blogid, '');
+ $linkparams['archivelist'] = $archivelist;
+ }
+ else
+ {
+ $blogurl = Link::create_blogid_link($this->blogid, '');
+ $linkparams['blogid'] = $this->blogid;
+ }
+
+ $template =& $manager->getTemplate($template);
+
+ //: Change: Set nocatselected variable
+ if ( $this->selectedcatid )
+ {
+ $nocatselected = 'no';
+ }
+ else
+ {
+ $nocatselected = 'yes';
+ }
+
+ $args = array(
+ 'blogid' => $this->blogid,
+ 'blogurl' => $blogurl,
+ 'self' => $CONF['Self'],
+ 'catiscurrent' => $nocatselected, // Change: Set catiscurrent template variable for header
+ 'currentcat' => $nocatselected
+ );
+
+ /* output header of category list item */
+ if ( !array_key_exists('CATLIST_HEADER', $template) || empty($template['CATLIST_HEADER']) )
+ {
+ echo Template::fill(NULL, $args);
+ }
+ else
+ {
+ echo Template::fill($template['CATLIST_HEADER'], $args);
+ }
+
+ $query = "SELECT catid, cdesc as catdesc, cname as catname FROM %s WHERE cblog=%d ORDER BY cname ASC;";
+ $query = sprintf($query, sql_table('category'), (integer) $this->blogid);
+ $res = DB::getResult($query);
+
+ foreach ( $res as $row )
+ {
+ $args = array(
+ 'catid' => $row['catid'],
+ 'name' => $row['catname'],
+ 'extra' => $linkparams
+ );
+
+ $row['blogid'] = $this->blogid;
+ $row['blogurl'] = $blogurl;
+ $row['catlink'] = Link::create_link('category', $args);
+ $row['self'] = $CONF['Self'];
+
+ // this gives catiscurrent = no when no category is selected.
+ $row['catiscurrent'] = 'no';
+ $row['currentcat'] = 'no';
+
+ if ( $this->selectedcatid )
+ {
+ if ( $this->selectedcatid == $row['catid'] )
+ {
+ $row['catiscurrent'] = 'yes';
+ $row['currentcat'] = 'yes';
+ }
+ }
+ else
+ {
+ global $itemid;
+ if ( (integer) $itemid && $manager->existsItem((integer) $itemid, 0, 0) )
+ {
+ $iobj =& $manager->getItem($itemid, 0, 0);
+ $cid = $iobj['catid'];
+
+ if ( $cid == $row['catid'] )
+ {
+ $row['catiscurrent'] = 'yes';
+ $row['currentcat'] = 'yes';
+ }
+ }
+ }
+
+ $data = array('listitem' => &$row);
+ $manager->notify('PreCategoryListItem', $data);
+
+ if ( !array_key_exists('CATLIST_LISTITEM', $template) || empty($template['CATLIST_LISTITEM']))
+ {
+ echo Template::fill(NULL, $row);
+ }
+ else
+ {
+ echo Template::fill($template['CATLIST_LISTITEM'], $row);
+ }
+ }
+
+ $res->closeCursor();
+
+ $args = array(
+ 'blogid' => $this->blogid,
+ 'blogurl' => $blogurl,
+ 'self' => $CONF['Self'],
+ 'catiscurrent' => $nocatselected, //: Change: Set catiscurrent template variable for footer
+ 'currentcat' => $nocatselected
+ );
+
+ if ( !array_key_exists('CATLIST_FOOTER', $template) || empty($template['CATLIST_FOOTER']))
+ {
+ echo Template::fill(NULL, $args);
+ }
+ else
+ {
+ echo Template::fill($template['CATLIST_FOOTER'], $args);
+ }
+
+ return;
+ }
+
+ /**
+ * Blog::showBlogList()
+ * Shows a list of all blogs in the system using a given template
+ * ordered by number, name, shortname or description
+ * in ascending or descending order
+ *
+ * @param string $template tempalte name
+ * @param string $bnametype bname/bshortname
+ * @param string $orderby string for 'ORDER BY' SQL
+ * @param string $direction ASC/DESC
+ * @return void
+ */
+ static public function showBlogList($template, $bnametype, $orderby, $direction)
+ {
+ global $CONF, $manager;
+
+ switch ( $orderby )
+ {
+ case 'number':
+ $orderby='bnumber';
+ break;
+ case 'name':
+ $orderby='bname';
+ break;
+ case 'shortname':
+ $orderby='bshortname';
+ break;
+ case 'description':
+ $orderby='bdesc';
+ break;
+ default:
+ $orderby='bnumber';
+ break;
+ }
+
+ $direction=strtolower($direction);
+ switch ( $direction )
+ {
+ case 'asc':
+ $direction='ASC';
+ break;
+ case 'desc':
+ $direction='DESC';
+ break;
+ default:
+ $direction='ASC';
+ break;
+ }
+
+ $template =& $manager->getTemplate($template);
+
+ if ( array_key_exists('BLOGLIST_HEADER', $template) && !empty($template['BLOGLIST_HEADER']) )
+ {
+ $vars = array(
+ 'sitename' => $CONF['SiteName'],
+ 'siteurl' => $CONF['IndexURL']
+ );
+
+ echo Template::fill($template['BLOGLIST_HEADER'], $vars);
+ }
+
+ if ( array_key_exists('BLOGLIST_LISTITEM', $template) && !empty($template['BLOGLIST_LISTITEM']) )
+ {
+ $query = 'SELECT bnumber, bname, bshortname, bdesc, burl FROM '.sql_table('blog').' ORDER BY '.$orderby.' '.$direction;
+ $res = DB::getResult($query);
+
+ foreach ( $res as $row )
+ {
+ $list = array();
+ $list['bloglink'] = Link::create_blogid_link($row['bnumber']);
+ $list['blogdesc'] = $row['bdesc'];
+ $list['blogurl'] = $row['burl'];
+
+ if ( $bnametype == 'shortname' )
+ {
+ $list['blogname'] = $row['bshortname'];
+ }
+ else
+ {
+ /* all other cases */
+ $list['blogname'] = $row['bname'];
+ }
+
+ $data = array('listitem' => &$list);
+ $manager->notify('PreBlogListItem', $data);
+
+ echo Template::fill($template['BLOGLIST_LISTITEM'], $list);
+ }
+
+ $res->closeCursor();
+ }
+
+
+ if ( array_key_exists('BLOGLIST_FOOTER', $template) && !empty($template['BLOGLIST_FOOTER']) )
+ {
+ $vars = array(
+ 'sitename' => $CONF['SiteName'],
+ 'siteurl' => $CONF['IndexURL']
+ );
+ echo Template::fill($template['BLOGLIST_FOOTER']);
+ }
+ return;
+ }
+
+ /**
+ * Blog::readSettings()
+ * Read the blog settings
+ *
+ * @param void
+ * @return void
+ */
+ public function readSettings()
+ {
+ $query = 'SELECT * FROM %s WHERE bnumber=%d;';
+ $query = sprintf($query, sql_table('blog'), (integer) $this->blogid);
+ $res = DB::getResult($query);
+
+ $this->isValid = ($res->rowCount() > 0);
+ if ( $this->isValid )
+ {
+ $this->settings = $res->fetch(PDO::FETCH_ASSOC);
+ }
+ return;
+ }
+
+ /**
+ * Blog::writeSettings()
+ * Write the blog settings
+ */
+ public function writeSettings()
+ {
+ // (can't use floatval since not available prior to PHP 4.2)
+ $offset = $this->getTimeOffset();
+ if ( !is_float($offset) )
+ {
+ $offset = (integer) $offset;
+ }
+
+ $query = 'UPDATE '.sql_table('blog')
+ . ' SET bname=' . DB::quoteValue($this->getName()) . ','
+ . ' bshortname='. DB::quoteValue($this->getShortName()) . ','
+ . ' bcomments='. intval($this->commentsEnabled()) . ','
+ . ' bmaxcomments=' . intval($this->getMaxComments()) . ','
+ . ' btimeoffset=' . $offset . ','
+ . ' bpublic=' . intval($this->isPublic()) . ','
+ . ' breqemail=' . intval($this->emailRequired()) . ','
+ . ' bconvertbreaks=' . intval($this->convertBreaks()) . ','
+ . ' ballowpast=' . intval($this->allowPastPosting()) . ','
+ . ' bnotify=' . DB::quoteValue($this->getNotifyAddress()) . ','
+ . ' bnotifytype=' . intval($this->getNotifyType()) . ','
+ . ' burl=' . DB::quoteValue($this->getURL()) . ','
+ . ' bupdate=' . DB::quoteValue($this->getUpdateFile()) . ','
+ . ' bdesc=' . DB::quoteValue($this->getDescription()) . ','
+ . ' bdefcat=' . intval($this->getDefaultCategory()) . ','
+ . ' bdefskin=' . intval($this->getDefaultSkin()) . ','
+ . ' bincludesearch=' . intval($this->getSearchable())
+ . ' WHERE bnumber=' . intval($this->blogid);
+ DB::execute($query);
+ return;
+ }
+
+ /**
+ * Blog::updateUpdatefile()
+ * Update the update file if requested
+ *
+ * @param void
+ * @return void
+ */
+ public function updateUpdatefile()
+ {
+ if ( $this->getUpdateFile() )
+ {
+ $f_update = fopen($this->getUpdateFile(), 'w');
+ fputs($f_update,$this->getCorrectTime());
+ fclose($f_update);
+ }
+ return;
+ }
+
+ /**
+ * Blog::isValidCategory()
+ * Check if a category with a given catid is valid
+ *
+ * @param integer $catid ID for category
+ * @return boolean exists or not
+ */
+ public function isValidCategory($catid)
+ {
+ $query = 'SELECT * FROM %s WHERE cblog=%d and catid=%d;';
+ $query = sprintf($query, sql_table('category'), (integer) $this->blogid, (integer) $catid);
+ $res = DB::getResult($query);
+ return ($res->rowCount() != 0);
+ }
+
+ /**
+ * Blog::getCategoryName()
+ * Get the category name for a given catid
+ *
+ * @param integer $catid ID for category
+ * @return string name of category
+ */
+ public function getCategoryName($catid)
+ {
+ $query = 'SELECT cname FROM %s WHERE cblog=%d and catid=%d;';
+ $query = sprintf($query, sql_table('category'), (integer) $this->blogid, (integer) $catid);
+ $res = DB::getValue($query);
+ return $res;
+ }
+
+ /**
+ * Blog::getCategoryDesc()
+ * Get the category description for a given catid
+ *
+ * @param $catid
+ * category id
+ */
+ public function getCategoryDesc($catid)
+ {
+ $query = 'SELECT cdesc FROM %s WHERE cblog=%d and catid=%d;';
+ $query = sprintf($query, sql_table('category'), (integer) $this->blogid, (integer) $catid);
+ $res = DB::getValue($query);
+ return $res;
+ }
+
+ /**
+ * Blog::getCategoryIdFromName
+ * Get the category id for a given category name
+ *
+ * @param string $name category name
+ * @return ID for category
+ */
+ public function getCategoryIdFromName($name)
+ {
+ $query = 'SELECT catid FROM %s WHERE cblog=%d and cname=%s;';
+ $query = sprintf($query, sql_table('category'), (integer) $this->blogid, DB::quoteValue($name));
+
+ $res = DB::getValue();
+ if ( !$res )
+ {
+ return $this->getDefaultCategory();
+ }
+ return $res;
+ }
+
+ /**
+ * Blog::insertJavaScriptInfo()
+ * Insert a javascript that includes information about the settings
+ * of an author: ConvertBreaks, MediaUrl and AuthorId
+ *
+ * @param $authorid id of the author
+ */
+ public function insertJavaScriptInfo($authorid = '')
+ {
+ global $member, $CONF;
+
+ if ( $authorid == '' )
+ {
+ $authorid = $member->getID();
+ }
+
+ echo "<script type=\"text/javascript\">\n";
+
+ if ( !$this->convertBreaks() )
+ {
+ echo "setConvertBreaks(false);\n";
+ }
+ else
+ {
+ echo "setConvertBreaks(true);\n";
+ }
+ echo "setMediaUrl('{$CONF['MediaURL']}');\n";
+ echo "setAuthorId('{$authorid}');\n";
+ echo "</script>\n";
+ return;
+ }
+
+ /**
+ * Blog::setAllowPastPosting()
+ * Set the the setting for allowing to publish postings in the past
+ *
+ * @param boolean $val new value for ballowpast
+ * @return void
+ */
+ public function setAllowPastPosting($val)
+ {
+ $this->setSetting('ballowpast', $val);
+ return;
+ }
+
+ /**
+ * Blog::allowPastPosting()
+ * Get the the setting if it is allowed to publish postings in the past
+ * [should be named as getAllowPastPosting()]
+ *
+ * @param void
+ * @return boolean
+ */
+ public function allowPastPosting()
+ {
+ return $this->getSetting('ballowpast');
+ }
+
+ /**
+ * Blog::getCorrectTime()
+ *
+ * @param integer $t
+ * @return integer
+ */
+ public function getCorrectTime($t=0)
+ {
+ if ( $t == 0 )
+ {
+ $t = time();
+ }
+ return ($t + 3600 * $this->getTimeOffset());
+ }
+
+ /**
+ * Blog::getName()
+ *
+ * @param void
+ * @return string name of this weblog
+ */
+ public function getName()
+ {
+ return $this->getSetting('bname');
+ }
+
+ /**
+ * Blog::getShortName()
+ *
+ * @param void
+ * @return string short name of this weblog
+ */
+ public function getShortName()
+ {
+ return $this->getSetting('bshortname');
+ }
+
+ /**
+ * Blog::getMaxComments()
+ *
+ * @param void
+ * @return integer maximum number of comments
+ */
+ public function getMaxComments()
+ {
+ return $this->getSetting('bmaxcomments');
+ }
+
+ /**
+ * Blog::getNotifyAddress()
+ *
+ * @param void
+ * @return string mail address for notifying
+ */
+ public function getNotifyAddress()
+ {
+ return $this->getSetting('bnotify');
+ }
+
+ /**
+ * Blog::getNotifyType()
+ *
+ * @param void
+ * @return integer notifycation type
+ */
+ public function getNotifyType()
+ {
+ return $this->getSetting('bnotifytype');
+ }
+
+ /**
+ * Blog::notifyOnComment()
+ *
+ * @param void
+ * @return boolean
+ */
+ public function notifyOnComment()
+ {
+ $n = $this->getNotifyType();
+ return (($n != 0) && (($n % 3) == 0));
+ }
+
+ /**
+ * Blog::notifyOnVote()
+ *
+ * @param void
+ * @return boolean
+ */
+ public function notifyOnVote()
+ {
+ $n = $this->getNotifyType();
+ return (($n != 0) && (($n % 5) == 0));
+ }
+
+ /**
+ * Blog::notifyOnNewItem()
+ *
+ * @param void
+ * @return boolean
+ */
+ public function notifyOnNewItem()
+ {
+ $n = $this->getNotifyType();
+ return (($n != 0) && (($n % 7) == 0));
+ }
+
+ /**
+ * Blog::setNotifyType()
+ *
+ * @param integer $val
+ * @return void
+ */
+ public function setNotifyType($val)
+ {
+ $this->setSetting('bnotifytype',$val);
+ return;
+ }
+
+ /**
+ * Blog::getTimeOffset()
+ * @param void
+ * @return
+ */
+ public function getTimeOffset()
+ {
+ return $this->getSetting('btimeoffset');
+ }
+
+ /**
+ * Blog::commentsEnabled()
+ * @param void
+ * @return integer enabled or not
+ */
+ public function commentsEnabled()
+ {
+ return $this->getSetting('bcomments');
+ }
+
+ /**
+ * Blog::getURL()
+ * @param void
+ * @return string URI for this weblog
+ */
+ public function getURL()
+ {
+ return $this->getSetting('burl');
+ }
+
+ /**
+ * Blog::getDefaultSkin()
+ * @param void
+ * @return name of skin as default for this weblog
+ */
+ public function getDefaultSkin()
+ {
+ return $this->getSetting('bdefskin');
+ }
+
+ /**
+ * Blog::getUpdateFile()
+ * @param void
+ * @return string name of file to be updated when weblog is updated
+ */
+ public function getUpdateFile()
+ {
+ return $this->getSetting('bupdate');
+ }
+
+ /**
+ * Blog::getDescription()
+ * @param void
+ * @return string description for this weblog
+ */
+ public function getDescription()
+ {
+ return $this->getSetting('bdesc');
+ }
+
+ /**
+ * Blog::isPublic()
+ * @param void
+ * @return integer publlic or not
+ */
+ public function isPublic()
+ {
+ return $this->getSetting('bpublic');
+ }
+
+ /**
+ * Blog::emailRequired()
+ * @param void
+ * @return integer email is required when posting comment or not
+ */
+ public function emailRequired()
+ {
+ return $this->getSetting('breqemail');
+ }
+
+ /**
+ * Blog::getSearchable()
+ * @param void
+ * @return integer searchable or not
+ */
+ public function getSearchable()
+ {
+ return $this->getSetting('bincludesearch');
+ }
+
+ /**
+ * Blog::getDefaultCategory()
+ * @param void
+ * @return ID for category as a default
+ */
+ public function getDefaultCategory()
+ {
+ return $this->getSetting('bdefcat');
+ }
+
+ /**
+ * Blog::setPublic()
+ * @param integer $val allow comments by non-registered members or not
+ * @return void
+ */
+ public function setPublic($val)
+ {
+ $this->setSetting('bpublic', $val);
+ return;
+ }
+
+ /**
+ * Blog::setSearchable()
+ * @param integer $val searchable from the other blogs or not
+ * @return void
+ */
+ public function setSearchable($val)
+ {
+ $this->setSetting('bincludesearch', $val);
+ return;
+ }
+
+ /**
+ * Blog::setDescription
+ * @param string $val description for this weblog
+ * @return void
+ */
+ public function setDescription($val)
+ {
+ $this->setSetting('bdesc',$val);
+ return;
+ }
+
+ /**
+ * Blog::setUpdateFile()
+ * @param string $val name of file to beupdated when weblog is updated
+ * @return
+ */
+ public function setUpdateFile($val)
+ {
+ $this->setSetting('bupdate',$val);
+ return;
+ }
+
+ /**
+ * Blog::setDefaultSkin()
+ * @param integer $val ID for default skin to use when displaying this weblog
+ * @return void
+ */
+ public function setDefaultSkin($val)
+ {
+ $this->setSetting('bdefskin', $val);
+ return;
+ }
+
+ /**
+ * Blog::setURL()
+ * @param string $val URI for this weblog
+ * @return
+ */
+ public function setURL($val)
+ {
+ $this->setSetting('burl', $val);
+ return;
+ }
+
+ /**
+ * Blog::setName()
+ * @param string $val name of this weblog
+ * @return void
+ */
+ public function setName($val)
+ {
+ $this->setSetting('bname', $val);
+ return;
+ }
+
+ /**
+ * Blog::setShortName()
+ * @param string $val short name for this weblog
+ * @return void
+ */
+ public function setShortName($val)
+ {
+ $this->setSetting('bshortname', $val);
+ return;
+ }
+
+ /**
+ * Blog::setCommentsEnabled()
+ * @param integer $val enabling posting comment or not
+ * @return void
+ */
+ public function setCommentsEnabled($val)
+ {
+ $this->setSetting('bcomments',$val);
+ return;
+ }
+
+ /**
+ * Blog::setMaxComments()
+ * @param integer $val maximum number of comments for this weblog
+ * @return void
+ */
+ public function setMaxComments($val)
+ {
+ $this->setSetting('bmaxcomments', $val);
+ return;
+ }
+
+ /**
+ * Blog::setNotifyAddress()
+ * @param string $val email to be notified if weblog updated
+ * @return void
+ */
+ public function setNotifyAddress($val)
+ {
+ $this->setSetting('bnotify', $val);
+ return;
+ }
+
+ /**
+ * Blog::setEmailRequired()
+ * @param string requiring comments with email or not from non member
+ * @return void
+ */
+ public function setEmailRequired($val)
+ {
+ $this->setSetting('breqemail', $val);
+ return;
+ }
+
+ /**
+ * Blog::setTimeOffset()
+ * @param integer $val time offset
+ * @return void
+ */
+ public function setTimeOffset($val)
+ {
+ // check validity of value
+ // 1. replace , by . (common mistake)
+ $val = str_replace(',','.',$val);
+
+ // 2. cast to float or int
+ if ( is_numeric($val) && (i18n::strpos($val, '.5') === (i18n::strlen($val) - 2)) )
+ {
+ $val = (float) $val;
+ }
+ else
+ {
+ $val = (integer) $val;
+ }
+
+ $this->setSetting('btimeoffset',$val);
+ return;
+ }
+
+ /**
+ * Blog::setDefaultCategory()
+ * @param integer $val ID for default category for this weblog
+ * @return
+ */
+ public function setDefaultCategory($val)
+ {
+ $this->setSetting('bdefcat',$val);
+ return;
+ }
+
+ /**
+ * Blog::getSetting()
+ * @param string $key key for setting of this weblog
+ * @return mixed value for the setting
+ */
+ public function getSetting($key)
+ {
+ return $this->settings[$key];
+ }
+
+ /**
+ * Blog::setSetting()
+ * @param string $key key for setting of this weblog
+ * @param mixed $value value for the key
+ * @return
+ */
+ public function setSetting($key, $value)
+ {
+ $this->settings[$key] = $value;
+ return;
+ }
+
+ /**
+ * Blog::addTeamMember()
+ * Tries to add a member to the team.
+ * Returns false if the member was already on the team
+ *
+ * @param integer $memberid id for member
+ * @param boolean $admin super-admin or not
+ * @return boolean Success/Fail
+ */
+ public function addTeamMember($memberid, $admin)
+ {
+ global $manager;
+
+ $memberid = intval($memberid);
+ $admin = intval($admin);
+
+ // check if member is already a member
+ $tmem =& $manager->getMember($memberid);
+
+ if ( $tmem->isTeamMember($this->blogid) )
+ {
+ return 0;
+ }
+
+ $data = array(
+ 'blog' => &$this,
+ 'member' => &$tmem,
+ 'admin' => &$admin
+ );
+ $manager->notify('PreAddTeamMember', $data);
+
+ // add to team
+ $query = "INSERT INTO %s (TMEMBER, TBLOG, TADMIN) VALUES (%d, %d, %d);";
+ $query = sprintf($query, sql_table('team'), (integer) $memberid, (integer) $this->blogid, (integer) $admin);
+ DB::execute($query);
+
+ $data = array(
+ 'blog' => &$this,
+ 'member' => &$tmem,
+ 'admin' => $admin
+ );
+ $manager->notify('PostAddTeamMember', $data);
+
+ $logMsg = sprintf(_TEAM_ADD_NEWTEAMMEMBER, $tmem->getDisplayName(), $memberid, $this->getName());
+ ActionLog::add(INFO, $logMsg);
+
+ return 1;
+ }
+
+ /**
+ * Blog::getID()
+ * @param void
+ * @return integer ID for this weblog
+ */
+ public function getID()
+ {
+ return (integer) $this->blogid;
+ }
+
+ /**
+ * Checks if a blog with a given shortname exists
+ * Returns true if there is a blog with the given shortname (static)
+ *
+ * @param string $name blog shortname
+ * @return boolean exists or not
+ */
+ public function exists($name)
+ {
+ $r = DB::getResult('SELECT * FROM '.sql_table('blog').' WHERE bshortname='. DB::quoteValue($name));
+ return ($r->rowCount() != 0);
+ }
+
+ /**
+ * Checks if a blog with a given id exists
+ * Returns true if there is a blog with the given ID (static)
+ *
+ * @param integer $id ID for searched weblog
+ * @return boolean exists or not
+ */
+ public function existsID($id)
+ {
+ $r = DB::getResult('SELECT * FROM '.sql_table('blog').' WHERE bnumber='.intval($id));
+ return ($r->rowCount() != 0);
+ }
+
+ /**
+ * Blog::setFuturePost()
+ * flag there is a future post pending
+ *
+ * @param void
+ * @return void
+ */
+ public function setFuturePost()
+ {
+ $query = "UPDATE %s SET bfuturepost='1' WHERE bnumber=%d;";
+ $query = sprintf($query, sql_table('blog'), (integer) $this->blogid);
+ DB::execute($query);
+ return;
+ }
+
+ /**
+ * Blog::clearFuturePost()
+ * clear there is a future post pending
+ *
+ * @param void
+ * @return void
+ */
+ public function clearFuturePost()
+ {
+ $query = "UPDATE %s SET bfuturepost='0' WHERE bnumber=%d;";
+ $query = sprintf($query, sql_table('blog'), (integer) $this->blogid);
+ DB::execute($query);
+ return;
+ }
+
+ /**
+ * Blog::checkJustPosted()
+ * check if we should throw justPosted event
+ *
+ * @param void
+ * @return void
+ */
+ public function checkJustPosted()
+ {
+ global $manager;
+
+ if ( $this->settings['bfuturepost'] == 1 )
+ {
+ $query = "SELECT * FROM %s WHERE iposted=0 AND iblog=%d AND itime < NOW();";
+ $query = sprintf($query, sql_table('item'), (integer) $this->blogid);
+
+ $result = DB::getResult($query);
+ if ( $result->rowCount() > 0 )
+ {
+ // This $pinged is allow a plugin to tell other hook to the event that a ping is sent already
+ // Note that the plugins's calling order is subject to thri order in the plugin list
+ $pinged = FALSE;
+ $data = array('blogid' => $this->blogid, 'pinged' => &$pinged);
+ $manager->notify('JustPosted', $data);
+
+ // clear all expired future posts
+ $query = "UPDATE %s SET iposted='1' WHERE iblog=%d AND itime < NOW();";
+ $query = spriintf($query, sql_table('item'), (integer) $this->blogid);
+ DB::execute($query);
+
+ // check to see any pending future post, clear the flag is none
+ $query = "SELECT * FROM %s WHERE iposted=0 AND iblog=%d;";
+ $query = sprintf($query, sql_table('item'), (integer) $this->blogid);
+
+ $result = DB::getResult($query);
+ if ( $result->rowCount() == 0 )
+ {
+ $this->clearFuturePost();
+ }
+ }
+ }
+ return;
+ }
+
+ /**
+ * Blog::readLogFromList()
+ * Shows the given list of items for this blog
+ *
+ * @param array $itemarray array of item numbers to be displayed
+ * @param string $template string representing the template _NAME_ (!)
+ * @param string $highlight contains a query that should be highlighted
+ * @param boolean $comments 1=show comments 0=don't show comments
+ * @param boolean $dateheads 1=show dateheads 0=don't show dateheads
+ * @param boolean $showDrafts 0=do not show drafts 1=show drafts
+ * @param boolean $showFuture 0=do not show future posts 1=show future posts
+ * @return integer amount of items shown
+ */
+ public function readLogFromList($itemarray, $template, $highlight = '', $comments = 1, $dateheads = 1,$showDrafts = 0, $showFuture = 0)
+ {
+ $query = $this->getSqlItemList($itemarray,$showDrafts,$showFuture);
+ return $this->showUsingQuery($template, $query, $highlight, $comments, $dateheads);
+ }
+
+ /**
+ * Blog::getSqlItemList()
+ * Returns the SQL query used to fill out templates for a list of items
+ * No LIMIT clause is added. (caller should add this if multiple pages are requested)
+ *
+ * @param array $itemarray an array holding the item numbers of the items to be displayed
+ * @param integer $showDrafts 0=do not show drafts 1=show drafts
+ * @param integer $showFuture 0=do not show future posts 1=show future posts
+ * @return string either a full SQL query, or an empty string
+ */
+ public function getSqlItemList($itemarray,$showDrafts = 0,$showFuture = 0)
+ {
+ if ( !is_array($itemarray) )
+ {
+ return '';
+ }
+
+ $showDrafts = intval($showDrafts);
+ $showFuture = intval($showFuture);
+ $items = array();
+
+ foreach ( $itemarray as $value )
+ {
+ if ( intval($value) )
+ {
+ $items[] = intval($value);
+ }
+ }
+ if ( !count($items) )
+ {
+ return '';
+ }
+
+ $i = count($items);
+ $query = '';
+ foreach ( $items as $value )
+ {
+ $query .= '('
+ . 'SELECT'
+ . ' i.inumber as itemid,'
+ . ' i.ititle as title,'
+ . ' i.ibody as body,'
+ . ' m.mname as author,'
+ . ' m.mrealname as authorname,'
+ . ' i.itime,'
+ . ' i.imore as more,'
+ . ' m.mnumber as authorid,'
+ . ' m.memail as authormail,'
+ . ' m.murl as authorurl,'
+ . ' c.cname as category,'
+ . ' i.icat as catid,'
+ . ' i.iclosed as closed';
+
+ $query .= ' FROM '
+ . sql_table('item') . ' as i, '
+ . sql_table('member') . ' as m, '
+ . sql_table('category') . ' as c'
+ . ' WHERE'
+ . ' i.iblog='.$this->blogid
+ . ' and i.iauthor=m.mnumber'
+ . ' and i.icat=c.catid';
+
+ // exclude drafts
+ if ( !$showDrafts )
+ {
+ $query .= ' and i.idraft=0';
+ }
+ if ( !$showFuture )
+ {
+ // don't show future items
+ $query .= ' and i.itime<=' . DB::formatDateTime($this->getCorrectTime());
+ }
+
+ $query .= ' and i.inumber='.intval($value);
+ $query .= ')';
+ $i--;
+ if ($i) $query .= ' UNION ';
+ }
+
+ return $query;
+ }
+
+ /**
+ * Blog::convertBreaks()
+ * Get the the setting for the line break handling
+ * [should be named as getConvertBreaks()]
+ *
+ * @deprecated
+ * @param void
+ * @return
+ */
+ public function convertBreaks()
+ {
+ return $this->getSetting('bconvertbreaks');
+ }
+
+ /**
+ * Set the the setting for the line break handling
+ *
+ * @deprecated
+ * @param boolean $val new value for bconvertbreaks
+ * @return void
+ */
+ public function setConvertBreaks($val)
+ {
+ $this->setSetting('bconvertbreaks', $val);
+ return;
+ }
+}
+>>>>>>> skinnable-master