boolean */ public static function isEditable($rs) { # If user is admin or contentadmin, true if ($rs->core->auth->check('contentadmin',$rs->core->blog->id)) { return true; } # No user id in result ? false if (!$rs->exists('user_id')) { return false; } # If user is usage and owner of the entrie if ($rs->core->auth->check('usage',$rs->core->blog->id) && $rs->user_id == $rs->core->auth->userID()) { return true; } return false; } /** Returns whether post is deletable @param rs Invisible parameter @return boolean */ public static function isDeletable($rs) { # If user is admin, or contentadmin, true if ($rs->core->auth->check('contentadmin',$rs->core->blog->id)) { return true; } # No user id in result ? false if (!$rs->exists('user_id')) { return false; } # If user has delete rights and is owner of the entrie if ($rs->core->auth->check('delete',$rs->core->blog->id) && $rs->user_id == $rs->core->auth->userID()) { return true; } return false; } /** Returns whether post is the first one of its day. @param rs Invisible parameter @return boolean */ public static function firstPostOfDay($rs) { if ($rs->isStart()) { return true; } $cdate = date('Ymd',strtotime($rs->post_dt)); $rs->movePrev(); $ndate = date('Ymd',strtotime($rs->post_dt)); $rs->moveNext(); return $ndate != $cdate; } /** Returns whether post is the last one of its day. @param rs Invisible parameter @return boolean */ public static function lastPostOfDay($rs) { if ($rs->isEnd()) { return true; } $cdate = date('Ymd',strtotime($rs->post_dt)); $rs->moveNext(); $ndate = date('Ymd',strtotime($rs->post_dt)); $rs->movePrev(); return $ndate != $cdate; } /** Returns whether post has been updated since publication. @return boolean */ public static function isRepublished($rs) { return ($rs->getTS('upddt') + dt::getTimeOffset($rs->post_tz)) > $rs->getTS(); } /** Returns full post URL. @param rs Invisible parameter @return string */ public static function getURL($rs) { return $rs->core->blog->url.$rs->core->getPostPublicURL( $rs->post_type,html::sanitizeURL($rs->post_url) ); } /** Returns whether post has an excerpt. @param rs Invisible parameter @return boolean */ public static function isExtended($rs) { return $rs->post_excerpt_xhtml != ''; } /** Returns post timestamp. @param rs Invisible parameter @param type string (dt|upddt|creadt) defaults to post_dt @return integer */ public static function getTS($rs,$type='') { if ($type == 'upddt') { return strtotime($rs->post_upddt); } elseif ($type == 'creadt') { return strtotime($rs->post_creadt); } else { return strtotime($rs->post_dt); } } /** Returns post date formating according to the ISO 8601 standard. @param rs Invisible parameter @param type string (dt|upddt|creadt) defaults to post_dt @return string */ public static function getISO8601Date($rs,$type='') { if ($type == 'upddt' || $type == 'creadt') { return dt::iso8601($rs->getTS($type)+dt::getTimeOffset($rs->post_tz),$rs->post_tz); } else { return dt::iso8601($rs->getTS(),$rs->post_tz); } } /** Returns post date formating according to RFC 822. @param rs Invisible parameter @param type string (dt|upddt|creadt) defaults to post_dt @return string */ public static function getRFC822Date($rs,$type='') { if ($type == 'upddt' || $type == 'creadt') { return dt::rfc822($rs->getTS($type)+dt::getTimeOffset($rs->post_tz),$rs->post_tz); } else { return dt::rfc822($rs->getTS($type),$rs->post_tz); } } /** Returns post date with $format as formatting pattern. If format is empty, uses date_format blog setting. @param rs Invisible parameter @param format string Date format pattern @param type string (dt|upddt|creadt) defaults to post_dt @return string */ public static function getDate($rs,$format,$type='') { if (!$format) { $format = $rs->core->blog->settings->system->date_format; } if ($type == 'upddt') { return dt::dt2str($format,$rs->post_upddt,$rs->post_tz); } elseif ($type == 'creadt') { return dt::dt2str($format,$rs->post_creadt,$rs->post_tz); } else { return dt::dt2str($format,$rs->post_dt); } } /** Returns post time with $format as formatting pattern. If format is empty, uses time_format blog setting. @param rs Invisible parameter @param format string Time format pattern @param type string (dt|upddt|creadt) defaults to post_dt @return string */ public static function getTime($rs,$format,$type='') { if (!$format) { $format = $rs->core->blog->settings->system->time_format; } if ($type == 'upddt') { return dt::dt2str($format,$rs->post_upddt,$rs->post_tz); } elseif ($type == 'creadt') { return dt::dt2str($format,$rs->post_creadt,$rs->post_tz); } else { return dt::dt2str($format,$rs->post_dt); } } /** Returns author common name using user_id, user_name, user_firstname and user_displayname fields. @param rs Invisible parameter @return string */ public static function getAuthorCN($rs) { return dcUtils::getUserCN($rs->user_id, $rs->user_name, $rs->user_firstname, $rs->user_displayname); } /** Returns author common name with a link if he specified one in its preferences. @param rs Invisible parameter @return string */ public static function getAuthorLink($rs) { $res = '%1$s'; $url = $rs->user_url; if ($url) { $res = '%1$s'; } return sprintf($res,html::escapeHTML($rs->getAuthorCN()),html::escapeHTML($url)); } /** Returns author e-mail address. If $encoded is true, "@" sign is replaced by "%40" and "." by "%2e". @param rs Invisible parameter @param encoded boolean Encode address. @return string */ public static function getAuthorEmail($rs,$encoded=true) { if ($encoded) { return strtr($rs->user_email,array('@'=>'%40','.'=>'%2e')); } return $rs->user_email; } /** Returns post feed unique ID. @param rs Invisible parameter @return string */ public static function getFeedID($rs) { return 'urn:md5:'.md5($rs->core->blog->uid.$rs->post_id); $url = parse_url($rs->core->blog->url); $date_part = date('Y-m-d',strtotime($rs->post_creadt)); return 'tag:'.$url['host'].','.$date_part.':'.$rs->post_id; } /** Returns post content. If $absolute_urls is true, appends full blog URL to each relative post URLs. @param rs Invisible parameter @param absolute_urls boolean With absolute URLs @return string */ public static function getContent($rs,$absolute_urls=false) { if ($absolute_urls) { return html::absoluteURLs($rs->post_content_xhtml,$rs->getURL()); } else { return $rs->post_content_xhtml; } } /** Returns post excerpt. If $absolute_urls is true, appends full blog URL to each relative post URLs. @param rs Invisible parameter @param absolute_urls boolean With absolute URLs @return string */ public static function getExcerpt($rs,$absolute_urls=false) { if ($absolute_urls) { return html::absoluteURLs($rs->post_excerpt_xhtml,$rs->getURL()); } else { return $rs->post_excerpt_xhtml; } } } /** @ingroup DC_CORE @brief Dotclear dates record helpers. This class adds new methods to database dates results. You can call them on every record comming from dcBlog::getDates. @warning You should not give the first argument (usualy $rs) of every described function. */ class rsExtDates { /** @param rs Invisible parameter @return integer Date timestamp */ public static function ts($rs) { return strtotime($rs->dt); } /** @param rs Invisible parameter @return string Date year */ public static function year($rs) { return date('Y',strtotime($rs->dt)); } /** @param rs Invisible parameter @return string Date month */ public static function month($rs) { return date('m',strtotime($rs->dt)); } /** @param rs Invisible parameter @return integer Date day */ public static function day($rs) { return date('d',strtotime($rs->dt)); } /** Returns date month archive full URL. @param rs Invisible parameter @param core dcCore dcCore instance @return integer */ public static function url($rs,$core) { $url = date('Y/m',strtotime($rs->dt)); return $core->blog->url.$core->url->getURLFor('archive',$url); } /** Returns whether date is the first of year. @param rs Invisible parameter @return boolean */ public static function yearHeader($rs) { if ($rs->isStart()) { return true; } $y = $rs->year(); $rs->movePrev(); $py = $rs->year(); $rs->moveNext(); return $y != $py; } /** Returns whether date is the last of year. @param rs Invisible parameter @return boolean */ public static function yearFooter($rs) { if ($rs->isEnd()) { return true; } $y = $rs->year(); if ($rs->moveNext()) { $ny = $rs->year(); $rs->movePrev(); return $y != $ny; } return false; } } /** @ingroup DC_CORE @brief Dotclear dates record helpers. This class adds new methods to database dates results. You can call them on every record comming from dcAuth::checkUser and dcCore::getUsers. @warning You should not give the first argument (usualy $rs) of every described function. */ class rsExtUser { /** Returns a user option. @param rs Invisible parameter @param name string Option name @return string */ public static function option($rs,$name) { $options = self::options($rs); if (isset($options[$name])) { return $options[$name]; } return null; } /** Returns all user options. @param rs Invisible parameter @return array */ public static function options($rs) { $options = @unserialize($rs->user_options); if (is_array($options)) { return $options; } return array(); } } ?>