/**
  * List of episode contributors
  *
  * **Examples**
  *
  * Iterating over a list of contributors
  * 
  * ```jinja
  * {% for contributor in episode.contributors %}
  * 	{{ contributor.name }}
  * 	{% if not loop.last %}, {% endif %}
  * {% endfor %}
  * ```
  * 
  * Iterating over a grouped list of contributors
  * 
  * ```jinja
  * {% for contributorGroup in episode.contributors({groupby: "group"}) %}
  * 	<strong>{{ contributorGroup.group.title }}:</strong> 
  * 	{% for contributor in contributorGroup.contributors %}
  * 		{{ contributor.name }}
  * 		{% if not loop.last %}, {% endif %}
  * 	{% endfor %}
  * {% endfor %}
  * ```
  * 
  * **Parameters**
  *
  * - **id:**      Fetch one contributor by its id.
  *                Example: `episode.contributors({id: 'james'}).name`
  * - **group:**   group slug. If none is given, show all contributors.
  * - **role:**    role slug. If none is given, show all contributors.
  * - **groupby:** group or role slug. Group by "group" or "role".
  * 	         If used, the returned data is has another layer for the groups.
  * 	         See examples for more details.
  * - **order:**   Designates the ascending or descending order of the 'orderby' parameter. Defaults to 'ASC'.
  *   - 'ASC' - ascending order from lowest to highest values (1, 2, 3; a, b, c).
  *   - 'DESC' - descending order from highest to lowest values (3, 2, 1; c, b, a).
  * - **orderby:** Sort contributors by parameter. Defaults to 'position'.
  *   - 'position' - Order by the contributors position in the episode.
  *   - 'comment' - Order by the contributors comment in the episode.
  *
  * @accessor
  * @dynamicAccessor episode.contributors
  */
 public static function accessorEpisodeContributors($return, $method_name, $episode, $post, $args = array())
 {
     return $episode->with_blog_scope(function () use($return, $method_name, $episode, $post, $args) {
         $defaults = array('order' => 'ASC', 'orderby' => 'position');
         $args = wp_parse_args($args, $defaults);
         $contributions = EpisodeContribution::find_all_by_episode_id($episode->id);
         $contributions = \Podlove\Modules\Contributors\Contributors::orderContributions($contributions, $args);
         return \Podlove\Modules\Contributors\Contributors::filterContributions($contributions, $args);
     });
 }
 public static function clone_contributors($new_post_id, $old_post_object)
 {
     $old_episode = Episode::find_one_by_post_id($old_post_object->ID);
     $new_episode = Episode::find_or_create_by_post_id($new_post_id);
     $old_contributions = EpisodeContribution::find_all_by_episode_id($old_episode->id);
     foreach ($old_contributions as $old_contribution) {
         $c = new EpisodeContribution();
         $c->contributor_id = $old_contribution->contributor_id;
         $c->episode_id = $new_episode->id;
         $c->role_id = $old_contribution->role_id;
         $c->group_id = $old_contribution->group_id;
         $c->position = $old_contribution->position;
         $c->comment = $old_contribution->comment;
         $c->save();
     }
 }
 public static function adn_tags($text, $post_id, $selected_role, $selected_group)
 {
     $contributor_adn_accounts = '';
     $episode = \Podlove\Model\Episode::find_or_create_by_post_id($post_id);
     $contributions = \Podlove\Modules\Contributors\Model\EpisodeContribution::find_all_by_episode_id($episode->id);
     $adn_service = \Podlove\Modules\Social\Model\Service::find_one_by_property('type', 'app.net');
     if (!$adn_service) {
         return;
     }
     foreach ($contributions as $contribution) {
         $contributor_adn_accounts .= '';
         $social_accounts = \Podlove\Modules\Social\Model\ContributorService::find_all_by_contributor_id($contribution->contributor_id);
         array_map(function ($account) use($adn_service, &$contributor_adn_accounts, $contribution, $selected_role, $selected_group) {
             if ($account->service_id == $adn_service->id) {
                 if ($selected_role == '') {
                     if ($selected_group == '') {
                         $contributor_adn_accounts .= "@" . $account->value . " ";
                     } else {
                         if ($contribution->group_id == $selected_group) {
                             $contributor_adn_accounts .= "@" . $account->value . " ";
                         }
                     }
                 } else {
                     if ($selected_group == '' && $contribution->role_id == $selected_role) {
                         $contributor_adn_accounts .= "@" . $account->value . " ";
                     } else {
                         if ($contribution->group_id == $selected_group && $contribution->role_id == $selected_role) {
                             $contributor_adn_accounts .= "@" . $account->value . " ";
                         }
                     }
                 }
             }
         }, $social_accounts);
     }
     $total_text_length = strlen($text) + strlen($contributor_adn_accounts);
     if ($total_text_length <= 256) {
         return str_replace('{episodeContributors}', $contributor_adn_accounts, $text);
     }
     return str_replace('{episodeContributors}', '', $text);
 }
 function manage_podcast_columns($column_name)
 {
     switch ($column_name) {
         case 'contributors':
             $episode = \Podlove\Model\Episode::find_one_by_post_id(get_the_ID());
             if (!$episode) {
                 return;
             }
             $contributors = \Podlove\Modules\Contributors\Model\EpisodeContribution::find_all_by_episode_id($episode->id);
             $contributor_list = "";
             foreach ($contributors as $contributor_id => $contributor) {
                 $contributor_details = $contributor->getContributor();
                 if (is_object($contributor_details)) {
                     $contributor_list = $contributor_list . "<a href=\"" . site_url() . "/wp-admin/edit.php?post_type=podcast&contributor=" . $contributor_details->id . "\">" . $contributor_details->getName() . "</a>, ";
                 }
             }
             echo substr($contributor_list, 0, -2);
             break;
     }
 }