add bookmarks api and iimports, bugfixes
This commit is contained in:
@ -108,7 +108,6 @@ class Bookmarks extends Controller {
|
||||
}
|
||||
Navigation::setCrumbComponent( 'BookmarkBreadCrumbs', 'bookmarks/bookmarks/' . $id );
|
||||
|
||||
|
||||
$bookmarks = self::$bookmarks->noFolder();
|
||||
|
||||
$panelArray = [];
|
||||
@ -399,4 +398,118 @@ class Bookmarks extends Controller {
|
||||
Session::flash( 'success', 'Bookmark data refreshed.' );
|
||||
return Redirect::to( 'bookmarks/bookmark/' . $bookmark->ID );
|
||||
}
|
||||
|
||||
public function import() {
|
||||
// echo '<pre>';
|
||||
|
||||
if ( ! Input::exists('submit') ) {
|
||||
return Views::view( 'bookmarks.import' );
|
||||
}
|
||||
|
||||
if ( ! Forms::check( 'importBookmarks' ) ) {
|
||||
Issues::add( 'error', [ 'There was an error importing your bookmarks.' => Check::userErrors() ] );
|
||||
return Views::view( 'bookmarks.import' );
|
||||
}
|
||||
|
||||
if (isset($_FILES['bookmark_file'])) {
|
||||
$file = $_FILES['bookmark_file'];
|
||||
|
||||
// Check file size
|
||||
if ($file['size'] > 1024 * 1024) { // 1024 KB = 1 MB
|
||||
die('The file is too large. Maximum size is 1 MB.');
|
||||
}
|
||||
|
||||
// Check file extension
|
||||
$fileExtension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
|
||||
if ($fileExtension !== 'html') {
|
||||
die('Invalid file type. Only .html files are allowed.');
|
||||
}
|
||||
|
||||
// Proceed with file processing
|
||||
$fileContent = file_get_contents($file['tmp_name']);
|
||||
} else {
|
||||
die('No file was uploaded.');
|
||||
}
|
||||
|
||||
$out = $this->parseBookmarks($fileContent);
|
||||
$date = 'today';
|
||||
$description = 'Imported on ' . $date . ' from file: ' . $file['name'];
|
||||
|
||||
$importFolder = self::$folders->create( 'New Import', 0, $description );
|
||||
// $importFolder = 1;
|
||||
// echo 'make import folder: ' . PHP_EOL;
|
||||
foreach ($out as $folder => $bookmarks) {
|
||||
// echo 'make folder: ' . $folder . PHP_EOL;
|
||||
$currentFolder = self::$folders->create( $folder, $importFolder, $description );
|
||||
foreach ($bookmarks as $index => $bookmark) {
|
||||
// echo 'make folder: ' . $bookmark['url'] . PHP_EOL;
|
||||
self::$bookmarks->create( $bookmark['name'], $bookmark['url'], $currentFolder);
|
||||
}
|
||||
}
|
||||
|
||||
Session::flash( 'success', 'Your Bookmark has been created.' );
|
||||
Redirect::to( 'bookmarks/bookmarks/'. $importFolder );
|
||||
// echo '</pre>';
|
||||
// exit;
|
||||
// dv ( $out );
|
||||
}
|
||||
|
||||
public function parseBookmarks($htmlContent)
|
||||
{
|
||||
$started = false;
|
||||
$out = [];
|
||||
$currentFolder = [];
|
||||
$folderName = ['unknown'];
|
||||
$lines = explode("\n", $htmlContent);
|
||||
foreach ($lines as $line) {
|
||||
if ( $started == false ) {
|
||||
if (preg_match("/<h1>(.*?)<\/h1>/i", $line, $matches)) {
|
||||
$started = true;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (preg_match('/<DL><p>/i', $line, $matches)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (preg_match('/<H3(.*)>(.*?)<\/h3>/i', $line, $matches)) {
|
||||
$newFolder = $matches[2];
|
||||
$out[$newFolder] = [];
|
||||
array_unshift($folderName, $newFolder );
|
||||
continue;
|
||||
}
|
||||
|
||||
if (preg_match('/<\/DL><p>/i', $line, $matches)) {
|
||||
array_shift($folderName);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (preg_match('/<A HREF="(.*?)"(.*)>(.*?)<\/A>/i', $line, $matches)) {
|
||||
$href = $matches[1];
|
||||
$guts = $matches[2];
|
||||
$text = $matches[3];
|
||||
$added = '';
|
||||
$icon = '';
|
||||
|
||||
if (preg_match('/ADD_DATE="(.*?)"/i', $guts, $addMatches)) {
|
||||
$added = $addMatches[1];
|
||||
}
|
||||
if (preg_match('/ICON="(.*?)"/i', $guts, $iconMatches)) {
|
||||
$icon = $iconMatches[1];
|
||||
}
|
||||
|
||||
$currentFolder = $folderName[0];
|
||||
$out[$currentFolder][] = [
|
||||
'name' => $text,
|
||||
'url' => $href,
|
||||
'addDate' => $added,
|
||||
'icon' => $icon,
|
||||
'folderName' => $folderName[0],
|
||||
];
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user