/** * retrieve array of XoopsBlock objects meeting certain conditions * * @param CriteriaElement|null $criteria criteria to match * @param bool $id_as_key should the blocks' bid be the key for the returned array? * * @return XoopsBlock[] **/ public function getDistinctObjects(CriteriaElement $criteria = null, $id_as_key = false) { $ret = array(); $qb = $this->db2->createXoopsQueryBuilder(); $eb = $qb->expr(); $qb->select('DISTINCT(b.bid)')->addSelect('b.*')->fromPrefix('system_block', 'b')->leftJoinPrefix('b', 'system_blockmodule', 'l', $eb->eq('b.bid', 'l.block_id')); if (isset($criteria) && $criteria instanceof CriteriaElement) { $criteria->renderQb($qb); } $result = $qb->execute(); if (!$result) { return $ret; } while ($myrow = $result->fetch(\PDO::FETCH_ASSOC)) { $block = new XoopsBlock(); $block->assignVars($myrow); if (!$id_as_key) { $ret[] = $block; } else { $ret[$myrow['bid']] = $block; } unset($block); } return $ret; }
/** * get counts matching a condition * * @param CriteriaElement|null $criteria {@link CriteriaElement} to match * * @return array of counts */ public function getCounts(CriteriaElement $criteria = null) { $qb = \Xoops::getInstance()->db()->createXoopsQueryBuilder(); $eb = $qb->expr(); $ret = array(); $sql_where = ''; $limit = null; $start = null; $groupby_key = $this->handler->keyName; if (isset($criteria) && $criteria instanceof CriteriaElement) { if ($groupby = $criteria->getGroupby()) { $groupby_key = $groupby; } } $qb->select($groupby_key)->addSelect('COUNT(*)')->from($this->handler->table, null); if (isset($criteria) && $criteria instanceof CriteriaElement) { $qb = $criteria->renderQb($qb); } $result = $qb->execute(); if (!$result) { return $ret; } while (list($id, $count) = $result->fetch(\PDO::FETCH_NUM)) { $ret[$id] = $count; } return $ret; }
/** * getRandomObject - return a randomly selected object * * @param CriteriaElement|null $criteria criteria to match * * @return \Xoops\Core\Kernel\XoopsObject|null object or null if no matching object found */ public function getRandomObject(CriteriaElement $criteria = null) { $qb = $this->handler->db2->createXoopsQueryBuilder(); $qb->select('COUNT(*)')->from($this->handler->table, null); if (null !== $criteria) { $qb = $criteria->renderQb($qb); } $result = $qb->execute(); $count = $result->fetchColumn(); $offset = mt_rand(0, $count - 1); $qb = $this->handler->db2->createXoopsQueryBuilder(); $qb->select($this->handler->keyName)->from($this->handler->table, null); if (null !== $criteria) { $qb = $criteria->renderQb($qb); } $qb->setFirstResult($offset)->setMaxResults(1); $result = $qb->execute(); $randomKey = $result->fetchColumn(); return $this->handler->get($randomKey); }
/** * Load some modules * * @param CriteriaElement|null $criteria criteria to match * @param boolean $id_as_key Use the ID as key into the array * * @return array */ public function getObjectsArray(CriteriaElement $criteria = null, $id_as_key = false) { $ret = array(); $qb = $this->db2->createXoopsQueryBuilder(); $qb->select('*')->fromPrefix('system_module', null); if (isset($criteria) && $criteria instanceof CriteriaElement) { $criteria->setSort('weight'); $criteria->renderQb($qb); $qb->addOrderBy('mid', 'ASC'); } // During install, we start with no tables and no installed modules. We need to // handle the resulting exceptions and return an empty array. try { if (!($result = $qb->execute())) { return $ret; } } catch (\Doctrine\DBAL\Driver\PDOException $e) { return $ret; } catch (\Doctrine\DBAL\Exception\TableNotFoundException $e) { return $ret; } catch (\PDOException $e) { return $ret; } while ($myrow = $result->fetch(\PDO::FETCH_ASSOC)) { $module = new XoopsModule(); $module->assignVars($myrow); if (!$id_as_key) { $ret[] = $module; } else { $ret[$myrow['mid']] = $module; } unset($module); } return $ret; }
/** * Get count of users belonging to certain groups and matching criteria * Temporary solution * * @param array $groups IDs of groups * @param CriteriaElement|null $criteria criteria to match * * @return int count of users */ public function getUserCountByGroupLink($groups, $criteria = null) { $qb = $this->userHandler->db2->createXoopsQueryBuilder(); $eb = $qb->expr(); $qb->select('COUNT(DISTINCT u.uid)')->fromPrefix('system_user', 'u')->leftJoinPrefix('u', 'system_usergroup', 'm', 'm.uid = u.uid'); $where = false; if (!empty($groups)) { $qb->where($eb->in('m.groupid', $groups)); $where = true; } if (isset($criteria) && $criteria instanceof CriteriaElement) { $whereMode = $where ? 'AND' : ''; $criteria->renderQb($qb, $whereMode); } $result = $qb->execute(); $ret = $result->fetchColumn(0); return $ret; }
/** * Get some {@link NotificationsNotification}s * * @param CriteriaElement|null $criteria criteria object * @param bool $id_as_key Use IDs as keys into the array? * * @return array Array of {@link NotificationsNotification} objects */ public function getObjectsArray(CriteriaElement $criteria = null, $id_as_key = false) { $qb = $this->db2->createXoopsQueryBuilder()->select('*')->from($this->table, null); if (isset($criteria) && $criteria instanceof CriteriaElement) { $criteria->renderQb($qb); } $result = $qb->execute(); $ret = array(); if (!$result) { return $ret; } while ($myrow = $result->fetch(\PDO::FETCH_ASSOC)) { $notification = new NotificationsNotification(); $notification->assignVars($myrow); if (!$id_as_key) { $ret[] = $notification; } else { $ret[$myrow['id']] = $notification; } unset($notification); } return $ret; }
/** * Change a field for objects with a certain criteria * * @param string $fieldname Name of the field * @param mixed $fieldvalue Value to write * @param CriteriaElement|null $criteria {@link CriteriaElement} * @param bool $force force to query * * @return bool */ public function updateAll($fieldname, $fieldvalue, CriteriaElement $criteria = null, $force = false) { $qb = $this->handler->db2->createXoopsQueryBuilder(); //$queryFunc = empty($force) ? 'query' : 'queryF'; $qb->update($this->handler->table); if (isset($criteria)) { $qb = $criteria->renderQb($qb); } $qb->set($fieldname, $qb->createNamedParameter($fieldvalue)); return $qb->execute(); }
/** * Load some modules * * @param CriteriaElement|null $criteria {@link CriteriaElement} * @param boolean $id_as_key Use the ID as key into the array * * @return array */ public function getObjectsArray(CriteriaElement $criteria = null, $id_as_key = false) { $ret = array(); $qb = $this->db2->createXoopsQueryBuilder(); $qb->select('*')->fromPrefix('modules', null); if (isset($criteria) && $criteria instanceof CriteriaElement) { $criteria->setSort('weight'); $criteria->renderQb($qb); $qb->addOrderBy('mid', 'ASC'); } try { if (!($result = $qb->execute())) { return $ret; } } catch (Exception $e) { return $ret; } while ($myrow = $result->fetch(PDO::FETCH_ASSOC)) { $module = new XoopsModule(); $module->assignVars($myrow); if (!$id_as_key) { $ret[] = $module; } else { $ret[$myrow['mid']] = $module; } unset($module); } return $ret; }
/** * getTplObjects * * @param CriteriaElement|null $criteria criteria to match * @param bool $getsource include the source * @param bool $id_as_key use the object id as array key * * @return array */ public function getTplObjects(CriteriaElement $criteria = null, $getsource = false, $id_as_key = false) { $qb = $this->db2->createXoopsQueryBuilder(); $eb = $qb->expr(); $ret = array(); if (!$getsource) { $qb->select('*')->fromPrefix('system_tplfile', 'f'); } else { $qb->select('f.*')->addSelect('s.tpl_source')->fromPrefix('system_tplfile', 'f')->leftJoinPrefix('f', 'system_tplsource', 's', $eb->eq('s.tpl_id', 'f.tpl_id')); } if (isset($criteria) && $criteria instanceof CriteriaElement) { $criteria->renderQb($qb); } $result = $qb->execute(); if (!$result) { return $ret; } while ($myrow = $result->fetch(\PDO::FETCH_ASSOC)) { $tplfile = new XoopsTplFile(); $tplfile->assignVars($myrow); if (!$id_as_key) { $ret[] = $tplfile; } else { $ret[$myrow['tpl_id']] = $tplfile; } unset($tplfile); } return $ret; }
/** * Delete objects matching a condition against linked objects * * @param CriteriaElement|null $criteria criteria to match * * @return false|int count of objects * * @todo DELETE ... LEFT JOIN is not portable * Note Alain91 : multi tables delete is not allowed in Doctrine */ public function deleteByLink(CriteriaElement $criteria = null) { if (!$this->validateLinks()) { return false; } if (empty($criteria)) { //avoid delete all records return false; } $sql = "DELETE FROM {$this->handler->table} AS o " . "LEFT JOIN {$this->handler->table_link} AS l " . "ON o.{$this->handler->field_object} = l.{$this->handler->field_link}"; if (isset($criteria) && $criteria instanceof CriteriaElement) { $sql .= " " . $criteria->renderWhere(); } return $this->handler->db2->executeUpdate($sql); }