%PDF- %PDF-
Direktori : /proc/thread-self/root/var/www/businessmultisite/wp-content/plugins/timber-library/lib/ |
Current File : //proc/thread-self/root/var/www/businessmultisite/wp-content/plugins/timber-library/lib/Comment.php |
<?php namespace Timber; use Timber\User; use Timber\Core; use Timber\CoreInterface; /** * The Timber\Comment class is used to view the output of comments. 99% of the time this will be in the context of the comments on a post. However you can also fetch a comment directly using its comment ID. * @example * ```php * $comment = new Timber\Comment($comment_id); * $context['comment_of_the_day'] = $comment; * Timber::render('index.twig', $context); * ``` * * ```twig * <p class="comment">{{comment_of_the_day.content}}</p> * <p class="comment-attribution">- {{comment.author.name}}</p> * ``` * * ```html * <p class="comment">But, O Sarah! If the dead can come back to this earth and flit unseen around those they loved, I shall always be near you; in the garish day and in the darkest night -- amidst your happiest scenes and gloomiest hours - always, always; and if there be a soft breeze upon your cheek, it shall be my breath; or the cool air fans your throbbing temple, it shall be my spirit passing by.</p> * <p class="comment-attribution">- Sullivan Ballou</p> * ``` */ class Comment extends Core implements CoreInterface { public $PostClass = 'Post'; public $object_type = 'comment'; public static $representation = 'comment'; public $ID; public $id; public $comment_author_email; public $comment_content; public $comment_date; public $comment_ID; public $user_id; public $post_id; public $comment_author; public $_depth = 0; protected $children = array(); /** * @param int $cid */ public function __construct( $cid ) { $this->init($cid); } public function __toString() { return $this->content(); } /** * @internal * @param integer $cid */ public function init( $cid ) { $comment_data = $cid; if ( is_integer($cid) ) { $comment_data = get_comment($cid); } $this->import($comment_data); $this->ID = $this->comment_ID; $this->id = $this->comment_ID; $comment_meta_data = $this->get_meta_fields($this->ID); $this->import($comment_meta_data); } /** * @api * @example * ```twig * <h3>Comments by...</h3> * <ol> * {% for comment in post.comments %} * <li>{{comment.author.name}}, who has the following roles: {{comment.author.roles|join(', ')}}</li> * {% endfor %} * </ol> * ``` * ```html * <h3>Comments by...</h3> * <ol> * <li>Jared Novack, who is a contributor</li> * <li>Katie Ricci, who is a subscriber</li> * <li>Rebecca Pearl, who is a author</li> * </ol> * ``` * @return User */ public function author() { if ( $this->user_id ) { return new User($this->user_id); } else { $author = new User(0); if ( isset($this->comment_author) && $this->comment_author ) { $author->name = $this->comment_author; } else { $author->name = 'Anonymous'; } } return $author; } /** * Fetches the Gravatar * @api * @example * ```twig * <img src="{{comment.avatar(36,template_uri~"/img/dude.jpg")}}" alt="Image of {{comment.author.name}}" /> * ``` * ```html * <img src="http://gravatar.com/i/sfsfsdfasdfsfa.jpg" alt="Image of Katherine Rich" /> * ``` * @param int $size * @param string $default * @return bool|mixed|string */ public function avatar( $size = 92, $default = '' ) { if ( !get_option('show_avatars') ) { return false; } if ( !is_numeric($size) ) { $size = '92'; } $email = $this->avatar_email(); $args = array('size' => $size, 'default' => $default); $args = apply_filters('pre_get_avatar_data', $args, $email); if ( isset($args['url']) ) { return $args['url']; } $email_hash = ''; if ( !empty($email) ) { $email_hash = md5(strtolower(trim($email))); } $host = $this->avatar_host($email_hash); $default = $this->avatar_default($default, $email, $size, $host); if ( !empty($email) ) { $avatar = $this->avatar_out($default, $host, $email_hash, $size); } else { $avatar = $default; } return $avatar; } /** * @api * @return string */ public function content() { return trim(apply_filters('comment_text', $this->comment_content)); } /** * @api * @return array Comments */ public function children() { return $this->children; } /** * @param Comment $child_comment; */ public function add_child( Comment $child_comment ) { if ( !is_array($this->children) ) { $this->children = array(); } return $this->children[] = $child_comment; } /** * @param int $depth */ public function update_depth( $depth = 0 ) { $this->_depth = $depth; $children = $this->children(); foreach ( $children as $comment ) { $child_depth = $depth + 1; $comment->update_depth( $child_depth ); } } public function depth() { return $this->_depth; } /** * @api * @example * ```twig * {% if comment.approved %} * Your comment is good * {% else %} * Do you kiss your mother with that mouth? * {% endif %} * ``` * @return boolean */ public function approved() { return Helper::is_true($this->comment_approved); } /** * @api * @example * ```twig * {% for comment in post.comments %} * <article class="comment"> * <p class="date">Posted on {{ comment.date }}:</p> * <p class="comment">{{ comment.content }}</p> * </article> * {% endfor %} * ``` * ```html * <article class="comment"> * <p class="date">Posted on September 28, 2015:</p> * <p class="comment">Happy Birthday!</p> * </article> * ``` * @return string */ public function date( $date_format = '' ) { $df = $date_format ? $date_format : get_option('date_format'); $the_date = (string) mysql2date($df, $this->comment_date); return apply_filters('get_comment_date ', $the_date, $df); } /** * @api * @example * ```twig * {% for comment in post.comments %} * <article class="comment"> * <p class="date">Posted on {{ comment.date }} at {{comment.time}}:</p> * <p class="comment">{{ comment.content }}</p> * </article> * {% endfor %} * ``` * ```html * <article class="comment"> * <p class="date">Posted on September 28, 2015 at 12:45 am:</p> * <p class="comment">Happy Birthday!</p> * </article> * ``` * @return string */ public function time( $time_format = '' ) { $tf = $time_format ? $time_format : get_option('time_format'); $the_time = (string) mysql2date($tf, $this->comment_date); return apply_filters('get_comment_time', $the_time, $tf); } /** * @param string $field_name * @return mixed */ public function meta( $field_name ) { return $this->get_meta_field($field_name); } /** * @api * @return bool */ public function is_child() { return $this->comment_parent > 0; } /** * @internal * @param int $comment_id * @return mixed */ protected function get_meta_fields( $comment_id = null ) { if ( $comment_id === null ) { $comment_id = $this->ID; } //Could not find a WP function to fetch all comment meta data, so I made one. apply_filters('timber_comment_get_meta_pre', array(), $comment_id); $comment_metas = get_comment_meta($comment_id); foreach ( $comment_metas as &$cm ) { if ( is_array($cm) && count($cm) == 1 ) { $cm = $cm[0]; } } $comment_metas = apply_filters('timber_comment_get_meta', $comment_metas, $comment_id); return $comment_metas; } /** * * @internal * @param string $field_name * @return mixed */ protected function get_meta_field( $field_name ) { $value = apply_filters('timber_comment_get_meta_field_pre', null, $this->ID, $field_name, $this); if ( $value === null ) { $value = get_comment_meta($this->ID, $field_name, true); } $value = apply_filters('timber_comment_get_meta_field', $value, $this->ID, $field_name, $this); return $value; } /** * Enqueue the WP threaded comments javascript, * and fetch the reply link for various comments. * @api * @return string */ public function reply_link( $reply_text = 'Reply' ) { if ( is_singular() && comments_open() && get_option('thread_comments') ) { wp_enqueue_script('comment-reply'); } // Get the comments depth option from the admin panel $max_depth = get_option('thread_comments_depth'); // Default args $args = array( 'add_below' => 'comment', 'respond_id' => 'respond', 'reply_text' => $reply_text, 'depth' => $this->depth() + 1, 'max_depth' => $max_depth, ); return get_comment_reply_link($args, $this->ID, $this->post_id); } /* AVATAR Stuff ======================= */ /** * @internal * @return string */ protected function avatar_email() { $id = (int) $this->user_id; $user = get_userdata($id); if ( $user ) { $email = $user->user_email; } else { $email = $this->comment_author_email; } return $email; } /** * @internal * @param string $email_hash * @return string */ protected function avatar_host( $email_hash ) { if ( is_ssl() ) { $host = 'https://secure.gravatar.com'; } else { if ( !empty($email_hash) ) { $host = sprintf("http://%d.gravatar.com", (hexdec($email_hash[0]) % 2)); } else { $host = 'http://0.gravatar.com'; } } return $host; } /** * @internal * @todo what if it's relative? * @param string $default * @param string $email * @param string $size * @param string $host * @return string */ protected function avatar_default( $default, $email, $size, $host ) { if ( substr($default, 0, 1) == '/' ) { $default = home_url().$default; } if ( empty($default) ) { $avatar_default = get_option('avatar_default'); if ( empty($avatar_default) ) { $default = 'mystery'; } else { $default = $avatar_default; } } if ( 'mystery' == $default ) { $default = $host.'/avatar/ad516503a11cd5ca435acc9bb6523536?s='.$size; // ad516503a11cd5ca435acc9bb6523536 == md5('unknown@gravatar.com') } else if ( 'blank' == $default ) { $default = $email ? 'blank' : includes_url('images/blank.gif'); } else if ( !empty($email) && 'gravatar_default' == $default ) { $default = ''; } else if ( 'gravatar_default' == $default ) { $default = $host.'/avatar/?s='.$size; } else if ( empty($email) && !strstr($default, 'http://') ) { $default = $host.'/avatar/?d='.$default.'&s='.$size; } return $default; } /** * @internal * @param string $default * @param string $host * @param string $email_hash * @param string $size * @return mixed */ protected function avatar_out( $default, $host, $email_hash, $size ) { $out = $host.'/avatar/'.$email_hash.'?s='.$size.'&d='.urlencode($default); $rating = get_option('avatar_rating'); if ( !empty($rating) ) { $out .= '&r='.$rating; } return str_replace('&', '&', esc_url($out)); } }