{
private $networks = array();
- public function __construct(PlIterator $it)
+ public function __construct(PlInnerSubIterator $it)
{
+ $this->pid = $it->value();
while ($network = $it->next()) {
- $this->networks[$network['nwid']] = $network['address'];
+ $network['network_type'] = new PlFlagSet($network['network_type']);
+ $this->networks[$network['id']] = $network;
}
}
public static function fetchData(array $pids, ProfileVisibility $visibility)
{
- $data = XDB::iterator('SELECT pid, nwid, address, network_type
- FROM profile_networking
+ $data = XDB::iterator('SELECT pid, id, address, pne.network_type, pne.filter, pne.link
+ FROM profile_networking AS pn
+ LEFT JOIN profile_networking_enum AS pne USING(nwid)
WHERE pid IN {?} AND pub IN {?}
ORDER BY ' . XDB::formatCustomOrder('pid', $pids) . ',
- network_type, nwid',
+ pn.nwid, id',
$pids, $visibility->levels());
return PlIteratorUtils::subIterator($data, PlIteratorUtils::arrayValueCallback('pid'));
public function get($flags, $limit = null)
{
+ if (!$flags) {
+ $flags = Profile::NETWORKING_ALL;
+ }
$nws = array();
$nb = 0;
foreach ($this->networks as $id => $nw) {
- // XXX hardcoded reference to web site index
- if (
- (($flags & Profile::NETWORKING_WEB) && $nw['network_type'] == 0)
- ||
- (! ($flags & Profile::NETWORKING_WEB))
- ) {
+ if (($flags & Profile::NETWORKING_WEB) && $nw['network_type']->hasFlag('web') ||
+ ($flags & Profile::NETWORKING_IM) && $nw['network_type']->hasFlag('im') ||
+ ($flags & Profile::NETWORKING_SOCIAL) && $nw['network_type']->hasFlag('social') ||
+ ($flags & Profile::NETWORKING_ALL)) {
$nws[$id] = $nw;
++$nb;
- }
- if ($nb >= $limit) {
- break;
+ if ($nb >= $limit) {
+ break;
+ }
}
}
return $nws;
DROP TABLE IF EXISTS profile_networking;
CREATE TABLE `profile_networking_enum` (
- `network_type` tinyint unsigned NOT NULL,
+ `nwid` tinyint unsigned NOT NULL,
`name` varchar(30) NOT NULL,
`icon` varchar(50) NOT NULL COMMENT 'icon filename',
`filter` enum('email','web','number','none') NOT NULL DEFAULT 'none' COMMENT 'filter type for addresses',
+ `network_type` enum('web','im','social','other') NOT NULL DEFAULT 'other',
`link` varchar(255) NOT NULL COMMENT 'string used to forge an URL linking to the the profile page',
- PRIMARY KEY (`network_type`)
+ PRIMARY KEY (`nwid`)
) ENGINE=InnoDB, CHARSET=utf8, COMMENT='types of networking addresses';
CREATE TABLE `profile_networking` (
`pid` int NOT NULL COMMENT 'profile id',
- `nwid` tinyint unsigned NOT NULL COMMENT 'number of the address for the user',
- `network_type` tinyint unsigned NOT NULL,
+ `id` tinyint unsigned NOT NULL COMMENT 'number of the address for the user',
+ `nwid` tinyint unsigned NOT NULL COMMENT 'id of network, see profile_networking_enum',
`address` varchar(255) NOT NULL,
`pub` enum('private','public') NOT NULL DEFAULT 'private',
- PRIMARY KEY (`pid`, `nwid`),
+ PRIMARY KEY (`pid`, `id`),
INDEX uid (pid)
) ENGINE=InnoDB, CHARSET=utf8, COMMENT='networking addresses';
-- Insert a first address type for old URLs
-INSERT INTO `profile_networking_enum` (`network_type`, `name`, `icon`, `filter`)
- VALUES (0, 'Page web', 'web.gif', 'web');
+INSERT INTO `profile_networking_enum` (`nwid`, `name`, `icon`, `filter`, `network_type`, `link`)
+ VALUES (0, 'Page web', 'web.gif', 'web', 'web', '%s');
-INSERT INTO `profile_networking` (`pid`, `nwid`, `network_type`, `address`, `pub`)
+INSERT INTO `profile_networking` (`pid`, `id`, `nwid`, `address`, `pub`)
SELECT `user_id`, 0, 0, `profile_web`, `profile_web_pub`
FROM #x4dat#.`auth_user_quick`
WHERE `profile_web` <> "";