function getQueryInfo() { global $egApprovedRevsNamespaces; $tables = array('ar' => 'approved_revs_files', 'im' => 'image', 'p' => 'page'); $fields = array('im.img_name AS title', 'ar.approved_sha1 AS approved_sha1', 'ar.approved_timestamp AS approved_ts', 'im.img_sha1 AS latest_sha1', 'im.img_timestamp AS latest_ts', 'p.page_id AS id'); $join_conds = array('im' => array('LEFT OUTER JOIN', 'ar.file_title=im.img_name'), 'p' => array('LEFT OUTER JOIN', 'im.img_name=p.page_title')); # # ALLFILES: list all approved pages # also includes $this->mMode == 'undesignated', see formatResult() # if ($this->mMode == 'allapproved') { $conds = "p.page_namespace=" . NS_FILE; // get everything from approved_revs table # # UNAPPROVED # } elseif ($this->mMode == 'unapproved') { $tables['c'] = 'categorylinks'; $join_conds['c'] = array('LEFT OUTER JOIN', 'p.page_id=c.cl_from'); $join_conds['im'] = array('RIGHT OUTER JOIN', 'ar.file_title=im.img_name'); $perms = ApprovedRevs::getPermissions(); if (in_array("File", $perms['Namespaces'])) { // if all files approvable no additional conditions required // besides NS_FILE requirement below $conds = ''; } else { list($ns, $cat, $pg) = ApprovedRevs::getPermissionsStringsForDB(); $conds = array(); if ($cat !== false) { $conds[] = "(c.cl_to IN ({$cat}))"; } if ($pg !== false) { $conds[] = "(p.page_id IN ({$pg}))"; } if (count($conds) > 0) { $conds = ' AND (' . implode(' OR ', $conds) . ')'; } else { $conds = ''; } } $conds = "ar.file_title IS NULL AND p.page_namespace=" . NS_FILE . $conds; # # UNDESIGNATED # } else { if ($this->mMode == 'undesignated') { $tables['c'] = 'categorylinks'; $join_conds['c'] = array('LEFT OUTER JOIN', 'p.page_id=c.cl_from'); $join_conds['im'] = array('LEFT OUTER JOIN', 'ar.file_title=im.img_name'); $perms = ApprovedRevs::getPermissions(); if (in_array("File", $perms['Namespaces'])) { // if all files approvable should break out of this...since none can be // undesignated if they're all approvable $conds = ' AND p.page_namespace=1 AND p.page_namespace=2'; // impossible condition, hack } else { list($ns, $cat, $pg) = ApprovedRevs::getPermissionsStringsForDB(); $conds = array(); // WAS: if ($cat !== false) $conds[] = "(c.cl_to NOT IN ($cat) OR c.cl_to IS NULL)"; if ($cat !== false) { $conds[] = "p.page_id NOT IN (SELECT DISTINCT cl_from FROM categorylinks WHERE cl_to IN ({$cat}))"; } if ($pg !== false) { $conds[] = "(p.page_id NOT IN ({$pg}))"; } if (count($conds) > 0) { $conds = ' AND (' . implode(' AND ', $conds) . ')'; } else { $conds = ''; } } $conds = "p.page_namespace=" . NS_FILE . $conds; # # NOTLATEST # } else { // Name/Title both exist, sha1's don't match OR timestamps don't match $conds = "p.page_namespace=" . NS_FILE . " AND (ar.approved_sha1!=im.img_sha1 OR ar.approved_timestamp!=im.img_timestamp)"; } } return array('tables' => $tables, 'fields' => $fields, 'join_conds' => $join_conds, 'conds' => $conds, 'options' => array('DISTINCT')); }
/** * (non-PHPdoc) * @see QueryPage::getSQL() */ function getQueryInfo() { global $egApprovedRevsNamespaces; $tables = array('ar' => 'approved_revs', 'p' => 'page', 'pp' => 'page_props'); $fields = array('p.page_id AS id', 'ar.rev_id AS rev_id', 'p.page_latest AS latest_id'); $join_conds = array('p' => array('JOIN', 'ar.page_id=p.page_id'), 'pp' => array('LEFT OUTER JOIN', 'ar.page_id=pp_page')); $bannedNS = '(p.page_namespace NOT IN (' . implode(',', ApprovedRevs::getBannedNamespaceIDs()) . '))'; # # ALLPAGES: all approved pages # also includes $this->mMode == 'undesignated', see formatResult() # if ($this->mMode == 'all') { $conds = $bannedNS; // get everything from approved_revs table // keep default: $conds = "$namespacesString (pp_propname = 'approvedrevs' AND pp_value = 'y')"; # # UNAPPROVED # } elseif ($this->mMode == 'unapproved') { $tables['c'] = 'categorylinks'; $join_conds['p'] = array('RIGHT OUTER JOIN', 'ar.page_id=p.page_id'); // override $join_conds['c'] = array('LEFT OUTER JOIN', 'p.page_id=cl_from'); list($ns, $cat, $pg) = ApprovedRevs::getPermissionsStringsForDB(); $conds = $ns === false ? '' : "(p.page_namespace IN ({$ns})) OR "; $conds .= $cat === false ? '' : "(c.cl_to IN ({$cat})) OR "; $conds .= $pg === false ? '' : "(p.page_id IN ({$pg})) OR "; $conds .= "(pp_propname = 'approvedrevs' AND pp_value = 'y')"; $conds = "ar.page_id IS NULL AND ({$conds}) AND {$bannedNS}"; # # UNDESIGNATED # } else { if ($this->mMode == 'undesignated') { $tables['c'] = 'categorylinks'; $join_conds['p'] = array('LEFT OUTER JOIN', 'ar.page_id=p.page_id'); // override $join_conds['c'] = array('LEFT OUTER JOIN', 'p.page_id=cl_from'); list($ns, $cat, $pg) = ApprovedRevs::getPermissionsStringsForDB(); $conds = ""; $conds .= $ns === false ? '' : "(p.page_namespace NOT IN ({$ns})) AND "; $conds .= $cat === false ? '' : "(p.page_id NOT IN (SELECT DISTINCT cl_from FROM categorylinks WHERE cl_to IN ({$cat}))) AND "; $conds .= $pg === false ? '' : "(p.page_id NOT IN ({$pg})) AND "; $conds .= "(pp_propname IS NULL OR NOT (pp_propname = 'approvedrevs' AND pp_value = 'y'))"; $options = array('DISTINCT' => true); # # NOTLATEST # } else { // gets pages in approved_revs table that // (a) are not the latest rev // (b) satisfy MediaWiki:approvedrevs-permissions // $tables['c'] = 'categorylinks'; // $join_conds['c'] = array( 'LEFT OUTER JOIN', 'p.page_id=cl_from' ); // $conds = "p.page_latest != ar.rev_id AND ($conds)"; $conds = "p.page_latest != ar.rev_id AND {$bannedNS}"; // gets everything in the approved_revs table that is not latest rev } } $return = array('tables' => $tables, 'fields' => $fields, 'join_conds' => $join_conds, 'conds' => $conds, 'options' => array('DISTINCT')); return $return; }