/** * Convert opml array into more convenient array with xmlUrl as key * * @param array $array Array obtained from Opml file * @param array $listFolders List of current folders * * @return array New formated array */ public static function convertOpmlArray($array, $listFolders = array()) { $newArray = array(); for ($i = 0, $len = count($array); $i < $len; $i++) { if (isset($array[$i]['outline']) && (isset($array[$i]['text']) || isset($array[$i]['title']))) { // here is a folder if (isset($array[$i]['text'])) { $listFolders[] = $array[$i]['text']; } else { $listFolders[] = $array[$i]['title']; } $newArray = array_merge($newArray, Opml::convertOpmlArray($array[$i]['outline'], $listFolders)); array_pop($listFolders); } else { if (isset($array[$i]['xmlUrl'])) { // here is a feed $xmlUrl = MyTool::smallHash($array[$i]['xmlUrl']); if (isset($newArray[$xmlUrl])) { //feed already exists foreach ($listFolders as $val) { // add folder to the feed if (!in_array($val, $newArray[$xmlUrl]['folders'])) { $newArray[$xmlUrl]['folders'][] = $val; } } } else { // here is a new feed foreach ($array[$i] as $attr => $val) { $newArray[$xmlUrl][$attr] = $val; } $newArray[$xmlUrl]['folders'] = $listFolders; } } } } return $newArray; }
/** * add channel * * @param string $xmlUrl String corresponding to the XML URL * * @return true|false True if add is success, false otherwise */ public function addChannel($xmlUrl) { $feedHash = MyTool::smallHash($xmlUrl); $error = ''; if (!isset($this->_data['feeds'][$feedHash])) { $output = $this->loadRss($xmlUrl); if (empty($output['feed']['error'])) { $output['feed']['xmlUrl'] = $xmlUrl; $output['feed']['nbUnread'] = count($output['items']); $output['feed']['nbAll'] = count($output['items']); $this->_data['feeds'][$feedHash] = $output['feed']; $this->_data['needSort'] = true; $items = $output['items']; foreach (array_keys($items) as $itemHash) { if (empty($items[$itemHash]['via'])) { $items[$itemHash]['via'] = $output['feed']['htmlUrl']; } if (empty($items[$itemHash]['author'])) { $items[$itemHash]['author'] = $output['feed']['title']; } else { $items[$itemHash]['author'] = $output['feed']['title'] . ' (' . $items[$itemHash]['author'] . ')'; } $items[$itemHash]['xmlUrl'] = $xmlUrl; $this->_data['newItems'][$feedHash . $itemHash] = array($items[$itemHash]['time'], 0); $items[$feedHash . $itemHash] = $items[$itemHash]; unset($items[$itemHash]); } $this->writeFeed($feedHash, $items); } else { $error = $output['feed']['error']; } } else { $error = Intl::msg('Duplicated feed'); } return array('error' => $error); }
foreach ($_POST['feeds'] as $feedHash) { $feedsHash[] = $feedHash; } } foreach ($feedsHash as $feedHash) { $feed = $kf->getFeed($feedHash); $addFoldersHash = $feed['foldersHash']; if (!empty($_POST['addfolders'])) { foreach ($_POST['addfolders'] as $folderHash) { if (!in_array($folderHash, $addFoldersHash)) { $addFoldersHash[] = $folderHash; } } } if (!empty($_POST['addnewfolder'])) { $newFolderHash = MyTool::smallHash($_POST['addnewfolder']); $kf->addFolder($_POST['addnewfolder'], $newFolderHash); $addFoldersHash[] = $newFolderHash; } $removeFoldersHash = array(); if (!empty($_POST['removefolders'])) { foreach ($_POST['removefolders'] as $folderHash) { $removeFoldersHash[] = $folderHash; } } $addFoldersHash = array_diff($addFoldersHash, $removeFoldersHash); $kf->editFeed($feedHash, '', '', $addFoldersHash, '', ''); } $kf->sortFolders(); $kf->writeData(); MyTool::redirect();