]> projects.mako.cc - scuttle/blob - import.php
updated readme with information on a series of bugs I know exist
[scuttle] / import.php
1 <?php
2 /***************************************************************************
3 Copyright (c) 2004 - 2006 Marcus Campbell
4 http://scuttle.org/
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 ***************************************************************************/
20
21 require_once 'header.inc.php';
22
23 $sf = new ServiceFactory();
24 $userservice     =& $sf->getServiceInstance('UserService');
25 $templateservice =& $sf->getServiceInstance('TemplateService');
26
27 $tplVars = array();
28
29 if ($userservice->isLoggedOn() && sizeof($_FILES) > 0 && $_FILES['userfile']['size'] > 0) {
30     $userinfo = $userservice->getCurrentUser();
31
32     if (isset($_POST['status']) && is_numeric($_POST['status'])) {
33       $status = intval($_POST['status']);
34     }
35     else {
36       $status = 2;
37     }
38
39     $depth = array();
40     $xml_parser = xml_parser_create();
41     xml_set_element_handler($xml_parser, "startElement", "endElement");
42
43     if (!($fp = fopen($_FILES['userfile']['tmp_name'], "r")))
44         die(T_("Could not open XML input"));
45
46     while ($data = fread($fp, 4096)) {
47         if (!xml_parse($xml_parser, $data, feof($fp))) {
48             die(sprintf(T_("XML error: %s at line %d"),
49                 xml_error_string(xml_get_error_code($xml_parser)),
50                 xml_get_current_line_number($xml_parser)));
51         }
52     }
53     xml_parser_free($xml_parser);
54     header('Location: '. createURL('bookmarks', $userinfo[$userservice->getFieldName('username')]));
55 }
56 else {
57   $templatename = 'importDelicious.tpl';
58   $tplVars['subtitle'] = T_('Import Bookmarks from del.icio.us');
59   $tplVars['formaction']  = createURL('import');
60   $templateservice->loadTemplate($templatename, $tplVars);
61 }
62
63 function startElement($parser, $name, $attrs) {
64     global $depth, $status, $tplVars, $userservice;
65
66     $sf = new ServiceFactory();
67     $bookmarkservice =& $sf->getServiceInstance('BookmarkService');
68     $cacheservice    =& $sf->getServiceInstance('CacheService');
69
70     if ($name == 'POST') {
71         while(list($attrTitle, $attrVal) = each($attrs)) {
72             switch ($attrTitle) {
73                 case 'HREF':
74                     $bAddress = $attrVal;
75                     break;
76                 case 'DESCRIPTION':
77                     $bTitle = $attrVal;
78                     break;
79                 case 'EXTENDED':
80                     $bDescription = $attrVal;
81                     break;
82                 case 'TIME':
83                     $bDatetime = $attrVal;
84                     break;
85                 case 'PRIVATE':
86                     $bStatus = (strcasecmp('yes', $attrVal) == 0) ? 2 : $status ;
87                     break;
88                 case 'TAG':
89                     $tags = strtolower($attrVal);
90                     break;
91             }
92         }
93         if ($bookmarkservice->bookmarkExists($bAddress, $userservice->getCurrentUserId())) {
94             $tplVars['error'] = T_('You have already submitted this bookmark.');
95         } else {
96             // Strangely, PHP can't work out full ISO 8601 dates, so we have to chop off the Z.
97             $bDatetime = substr($bDatetime, 0, -1);
98
99             // If bookmark claims to be from the future, set it to be now instead
100             if (strtotime($bDatetime) > time()) {
101                 $bDatetime = gmdate('Y-m-d H:i:s');
102             }
103
104             if ($bookmarkservice->addBookmark($bAddress, $bTitle, $bDescription, $bStatus, $tags, $bDatetime, true, true))
105                 $tplVars['msg'] = T_('Bookmark imported.');
106             else
107                 $tplVars['error'] = T_('There was an error saving your bookmark. Please try again or contact the administrator.');
108         }
109     }
110     $depth[$parser]++;
111 }
112
113 function endElement($parser, $name) {
114     global $depth;
115     $depth[$parser]--;
116 }
117 ?>

Benjamin Mako Hill || Want to submit a patch?