Exemplo n.º 1
0
esc_attr_e('Filter', 'glotpress');
?>
" name="filter" /></dd>
	</dl>
	<dl class="filters-expanded sort hidden clearfix">
		<dt><?php 
_x('By:', 'sort by', 'glotpress');
?>
</dt>
		<dd>
		<?php 
$default_sort = get_user_option('gp_default_sort');
if (!is_array($default_sort)) {
    $default_sort = array('by' => 'priority', 'how' => 'desc');
}
$sort_bys = wp_list_pluck(gp_get_sort_by_fields(), 'title');
echo gp_radio_buttons('sort[by]', $sort_bys, gp_array_get($sort, 'by', $default_sort['by']));
?>
		</dd>
		<dt><?php 
_e('Order:', 'glotpress');
?>
</dt>
		<dd>
		<?php 
echo gp_radio_buttons('sort[how]', array('asc' => __('Ascending', 'glotpress'), 'desc' => __('Descending', 'glotpress')), gp_array_get($sort, 'how', $default_sort['how']));
?>
		</dd>
		<?php 
/**
 * Fires after the translation set sort options.
Exemplo n.º 2
0
 public function for_translation($project, $translation_set, $page, $filters = array(), $sort = array())
 {
     global $wpdb;
     $locale = GP_Locales::by_slug($translation_set->locale);
     $join_type = 'INNER';
     $sort_bys = wp_list_pluck(gp_get_sort_by_fields(), 'sql_sort_by');
     $default_sort = get_user_option('gp_default_sort');
     if (!is_array($default_sort)) {
         $default_sort = array('by' => 'priority', 'how' => 'desc');
     }
     $sort_by = gp_array_get($sort_bys, gp_array_get($sort, 'by'), gp_array_get($sort_bys, $default_sort['by']));
     $sort_hows = array('asc' => 'ASC', 'desc' => 'DESC');
     $sort_how = gp_array_get($sort_hows, gp_array_get($sort, 'how'), gp_array_get($sort_hows, $default_sort['how']));
     $collation = 'yes' === gp_array_get($filters, 'case_sensitive') ? 'BINARY' : '';
     $where = array();
     if (gp_array_get($filters, 'term')) {
         $like = "LIKE {$collation} '%" . esc_sql($wpdb->esc_like(gp_array_get($filters, 'term'))) . "%'";
         $where[] = '(' . implode(' OR ', array_map(function ($x) use($like) {
             return "({$x} {$like})";
         }, array('o.singular', 't.translation_0', 'o.plural', 't.translation_1', 'o.context', 'o.references'))) . ')';
     }
     if (gp_array_get($filters, 'before_date_added')) {
         $where[] = $wpdb->prepare('t.date_added > %s', gp_array_get($filters, 'before_date_added'));
     }
     if (gp_array_get($filters, 'translation_id')) {
         $where[] = $wpdb->prepare('t.id = %d', gp_array_get($filters, 'translation_id'));
     }
     if (gp_array_get($filters, 'original_id')) {
         $where[] = $wpdb->prepare('o.id = %d', gp_array_get($filters, 'original_id'));
     }
     if ('yes' == gp_array_get($filters, 'warnings')) {
         $where[] = 't.warnings IS NOT NULL';
         $where[] = 't.warnings != ""';
     } elseif ('no' == gp_array_get($filters, 'warnings')) {
         $where[] = 't.warnings IS NULL';
     }
     if ('yes' == gp_array_get($filters, 'with_context')) {
         $where[] = 'o.context IS NOT NULL';
     }
     if ('yes' == gp_array_get($filters, 'with_comment')) {
         $where[] = 'o.comment IS NOT NULL AND o.comment <> ""';
     }
     if (gp_array_get($filters, 'user_login')) {
         $user = get_user_by('login', $filters['user_login']);
         // do not return any entries if the user doesn't exist
         $where[] = $wpdb->prepare('t.user_id = %d', $user && $user->ID ? $user->ID : -1);
     }
     if (!GP::$permission->current_user_can('write', 'project', $project->id)) {
         $where[] = 'o.priority > -2';
     }
     $priorities = gp_array_get($filters, 'priority');
     if ($priorities) {
         $valid_priorities = array_keys(GP::$original->get_static('priorities'));
         $priorities = array_filter(gp_array_get($filters, 'priority'), function ($p) use($valid_priorities) {
             return in_array($p, $valid_priorities, true);
         });
         $priorities_where = array();
         foreach ($priorities as $single_priority) {
             $priorities_where[] = $wpdb->prepare('o.priority = %s', $single_priority);
         }
         if (!empty($priorities_where)) {
             $priorities_where = '(' . implode(' OR ', $priorities_where) . ')';
             $where[] = $priorities_where;
         }
     }
     $join_where = array();
     $status = gp_array_get($filters, 'status', 'current_or_waiting_or_fuzzy_or_untranslated');
     $statuses = explode('_or_', $status);
     if (in_array('untranslated', $statuses)) {
         if ($statuses == array('untranslated')) {
             $where[] = 't.translation_0 IS NULL';
         }
         $join_type = 'LEFT';
         $join_where[] = 't.status != "rejected"';
         $join_where[] = 't.status != "old"';
         $statuses = array_filter($statuses, function ($x) {
             return $x != 'untranslated';
         });
     }
     $all_statuses = $this->get_static('statuses');
     $statuses = array_filter($statuses, function ($s) use($all_statuses) {
         return in_array($s, $all_statuses);
     });
     if (!empty($statuses)) {
         $statuses_where = array();
         foreach ($statuses as $single_status) {
             $statuses_where[] = $wpdb->prepare('t.status = %s', $single_status);
         }
         $statuses_where = '(' . implode(' OR ', $statuses_where) . ')';
         $join_where[] = $statuses_where;
     }
     /**
      * Filter the SQL WHERE clause to get available translations.
      *
      * @since 1.0.0
      *
      * @param array              $where           An array of where conditions.
      * @param GP_Translation_Set $translation_set Current translation set.
      */
     $where = apply_filters('gp_for_translation_where', $where, $translation_set);
     $where = implode(' AND ', $where);
     if ($where) {
         $where = 'AND ' . $where;
     }
     $join_where = implode(' AND ', $join_where);
     if ($join_where) {
         $join_where = 'AND ' . $join_where;
     }
     $sql_sort = sprintf($sort_by, $sort_how);
     $limit = $this->sql_limit_for_paging($page, $this->per_page);
     $sql_for_translations = "\n\t\t\tSELECT SQL_CALC_FOUND_ROWS t.*, o.*, t.id as id, o.id as original_id, t.status as translation_status, o.status as original_status, t.date_added as translation_added, o.date_added as original_added\n\t\t\tFROM {$wpdb->gp_originals} as o\n\t\t\t{$join_type} JOIN {$wpdb->gp_translations} AS t ON o.id = t.original_id AND t.translation_set_id = " . (int) $translation_set->id . " {$join_where}\n\t\t\tWHERE o.project_id = " . (int) $project->id . " AND o.status = '+active' {$where} ORDER BY {$sql_sort} {$limit}";
     $rows = $this->many_no_map($sql_for_translations);
     $this->found_rows = $this->found_rows();
     $translations = array();
     foreach ((array) $rows as $row) {
         $row->user = $row->user_last_modified = null;
         if ($row->user_id && 'no-limit' !== $this->per_page) {
             $row->user = get_userdata($row->user_id);
         }
         if ($row->user_id_last_modified && 'no-limit' !== $this->per_page) {
             $row->user_last_modified = get_userdata($row->user_id_last_modified);
         }
         $row->translations = array();
         for ($i = 0; $i < $locale->nplurals; $i++) {
             $row->translations[] = $row->{"translation_" . $i};
         }
         $row->references = preg_split('/\\s+/', $row->references, -1, PREG_SPLIT_NO_EMPTY);
         $row->extracted_comments = $row->comment;
         $row->warnings = $row->warnings ? maybe_unserialize($row->warnings) : null;
         unset($row->comment);
         foreach (range(0, $this->get_static('number_of_plural_translations')) as $i) {
             $member = "translation_{$i}";
             unset($row->{$member});
         }
         $row->row_id = $row->original_id . ($row->id ? "-{$row->id}" : '');
         $translations[] = new Translation_Entry((array) $row);
     }
     unset($rows);
     return $translations;
 }