. * * @category Main * @package RPMPHP * * @author Remi Collet * @author Johan Cwiklinski * @copyright 2010-2014 Remi Collet * @license http://www.gnu.org/licenses/agpl-3.0-standalone.html AGPL License 3.0 or (at your option) any later version * @link https://git.remirepo.net/cgit/web/rpmphp.git/ * @since The begining of times. */ class TableUpstream extends CommonTable { /** * Create the table and populate it with known repo * * @return void */ protected function createTable() { // Table schema $sql = "CREATE TABLE IF NOT EXISTS `upstream` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `type` varchar(20) NOT NULL, `channel` varchar(20) NOT NULL, `stable` varchar(20) DEFAULT NULL, `unstable` varchar(20) DEFAULT NULL, `state` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name_type` (`name`,`type`), KEY `type` (`type`), KEY `channel` (`channel`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;"; $this->exec($sql); } /** * Add or update an upstream record * * @param string $type of package (R, pear, pecl, ...) * @param string $channel providing this package * @param string $name of the RPM * @param string $ver version * @param boolean $stable true if stable version, else unstable * @param string $statename additional comment (alpha, beta, ...) * * @return integer id of the created/updatedrecord */ public function record($type, $channel, $name, $ver, $stable, $statename='') { $key = array( 'name' => $name, 'type' => $type ); $input = array( 'channel' => $channel, ); $input[$stable ? 'stable' : 'unstable'] = $ver; if ($statename) { $input['state'] = $statename; } $data = $this->find($key); if ($data) { if ($this->update($data['id'], $input)) { return $data['id']; } return false; } return $this->add(array_merge($key, $input)); } /** * return the channel list for type of package * * @param string $type of package * * @return hashtable */ public function getChannels($type) { $crit = array( 'DISTINCT' => true, 'FIELDS' => 'channel', 'ORDER' => 'channel', 'type' => $type ); $tab = array(); foreach ($this->request($crit) as $data) { $tab[] = $data['channel']; } return $tab; } } ?>