]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
merge fix 776
authorThomas Citharel <tcit@tcit.fr>
Fri, 15 Aug 2014 22:54:46 +0000 (00:54 +0200)
committerThomas Citharel <tcit@tcit.fr>
Fri, 15 Aug 2014 22:54:46 +0000 (00:54 +0200)
1  2 
inc/poche/Poche.class.php

index 098dd7c19c16b6f1891157c32a7639ac0b10e1f1,bcf2ddeb6b36d3b0f88b458be3da87e807717d6e..64a5c4f792e8c3dc8e8d61392795a199fb1c58e5
@@@ -548,140 -901,125 +548,139 @@@ class Poch
      }
  
      /**
 -     * import datas into your poche
 +     * import datas into your wallabag
       * @return boolean
       */
-     public function import()
-     {
-         if (isset($_FILES['file'])) {
-             Tools::logm('Import stated: parsing file');
-             // assume, that file is in json format
-             $str_data = file_get_contents($_FILES['file']['tmp_name']);
-             $data = json_decode($str_data, true);
-             if ($data === null) {
-                 // not json - assume html
-                 $html = new simple_html_dom();
-                 $html->load_file($_FILES['file']['tmp_name']);
-                 $data = array();
-                 $read = 0;
-                 foreach(array('ol','ul') as $list) {
-                     foreach($html->find($list) as $ul) {
-                         foreach($ul->find('li') as $li) {
-                             $tmpEntry = array();
-                             $a = $li->find('a');
-                             $tmpEntry['url'] = $a[0]->href;
-                             $tmpEntry['tags'] = $a[0]->tags;
-                             $tmpEntry['is_read'] = $read;
-                             if ($tmpEntry['url']) {
-                                 $data[] = $tmpEntry;
-                             }
-                         }
 +
-                         // the second <ol/ul> is for read links
-                         $read = ((sizeof($data) && $read) ? 0 : 1);
-                     }
-                 }
+     public function import() {
+       if ( isset($_FILES['file']) && $_FILES['file']['tmp_name'] ) {
+         Tools::logm('Import stated: parsing file');
+         // assume, that file is in json format
+         $str_data = file_get_contents($_FILES['file']['tmp_name']);
+         $data = json_decode($str_data, true);
+         if ( $data === null ) {
+           //not json - assume html
+           $html = new simple_html_dom();
+           $html->load_file($_FILES['file']['tmp_name']);
+           $data = array();
+           $read = 0;
+           foreach (array('ol','ul') as $list) {
+             foreach ($html->find($list) as $ul) {
+               foreach ($ul->find('li') as $li) {
+                 $tmpEntry = array();
+                   $a = $li->find('a');
+                   $tmpEntry['url'] = $a[0]->href;
+                   $tmpEntry['tags'] = $a[0]->tags;
+                   $tmpEntry['is_read'] = $read;
+                   if ($tmpEntry['url']) {
+                     $data[] = $tmpEntry;
+                   }
+               }
+               # the second <ol/ul> is for read links
+               $read = ((sizeof($data) && $read)?0:1);
              }
 -        }
+           }
++      }
  
 -        //for readability structure
 -        foreach ($data as $record) {
 -          if (is_array($record)) {
 -            $data[] = $record;
 -            foreach ($record as $record2) {
 -              if (is_array($record2)) {
 -                $data[] = $record2;
 -              }
 +            // for readability structure
 +
 +            foreach($data as $record) {
 +                if (is_array($record)) {
 +                    $data[] = $record;
 +                    foreach($record as $record2) {
 +                        if (is_array($record2)) {
 +                            $data[] = $record2;
 +                        }
 +                    }
 +                }
              }
 -          }
 -        }
  
 -        $urlsInserted = array(); //urls of articles inserted
 -        foreach ($data as $record) {
 -          $url = trim( isset($record['article__url']) ? $record['article__url'] : (isset($record['url']) ? $record['url'] : '') );
 -          if ( $url and !in_array($url, $urlsInserted) ) {
 -            $title = (isset($record['title']) ? $record['title'] :  _('Untitled - Import - ').'</a> <a href="./?import">'._('click to finish import').'</a><a>');
 -            $body = (isset($record['content']) ? $record['content'] : '');
 -            $isRead = (isset($record['is_read']) ? intval($record['is_read']) : (isset($record['archive'])?intval($record['archive']):0));
 -            $isFavorite = (isset($record['is_fav']) ? intval($record['is_fav']) : (isset($record['favorite'])?intval($record['favorite']):0) );
 -            //insert new record
 -            $id = $this->store->add($url, $title, $body, $this->user->getId(), $isFavorite, $isRead);
 -            if ( $id ) {
 -              $urlsInserted[] = $url; //add
 -
 -              if ( isset($record['tags']) && trim($record['tags']) ) {
 -                //@TODO: set tags
 +            $urlsInserted = array(); //urls of articles inserted
 +            foreach($data as $record) {
 +                $url = trim(isset($record['article__url']) ? $record['article__url'] : (isset($record['url']) ? $record['url'] : ''));
 +                if ($url and !in_array($url, $urlsInserted)) {
 +                    $title = (isset($record['title']) ? $record['title'] : _('Untitled - Import - ') . '</a> <a href="./?import">' . _('click to finish import') . '</a><a>');
 +                    $body = (isset($record['content']) ? $record['content'] : '');
 +                    $isRead = (isset($record['is_read']) ? intval($record['is_read']) : (isset($record['archive']) ? intval($record['archive']) : 0));
 +                    $isFavorite = (isset($record['is_fav']) ? intval($record['is_fav']) : (isset($record['favorite']) ? intval($record['favorite']) : 0));
  
 -              }
 +                    // insert new record
 +
 +                    $id = $this->store->add($url, $title, $body, $this->user->getId() , $isFavorite, $isRead);
 +                    if ($id) {
 +                        $urlsInserted[] = $url; //add
 +                        if (isset($record['tags']) && trim($record['tags'])) {
 +
 +                            // @TODO: set tags
 +
 +                        }
 +                    }
 +                }
 +            }
 +
 +            $i = sizeof($urlsInserted);
 +            if ($i > 0) {
 +                $this->messages->add('s', _('Articles inserted: ') . $i . _('. Please note, that some may be marked as "read".'));
              }
 -          }
 -        }
  
-             Tools::logm('Import of articles finished: ' . $i . ' articles added (w/o content if not provided).');
 -        $i = sizeof($urlsInserted);
 -        if ( $i > 0 ) {
 -          $this->messages->add('s', _('Articles inserted: ').$i._('. Please note, that some may be marked as "read".'));
--        }
+         Tools::logm('Import of articles finished: '.$i.' articles added (w/o content if not provided).');
+       }
+       else {
+         $this->messages->add('s', _('Did you forget to select a file?'));
+       }
 -      //file parsing finished here
 +        // file parsing finished here
 +        // now download article contents if any
 +        // check if we need to download any content
  
 -      //now download article contents if any
 +        $recordsDownloadRequired = $this->store->retrieveUnfetchedEntriesCount($this->user->getId());
  
 -      //check if we need to download any content
 -      $recordsDownloadRequired = $this->store->retrieveUnfetchedEntriesCount($this->user->getId());
 -      if ( $recordsDownloadRequired == 0 ) {
 -        //nothing to download
 -        $this->messages->add('s', _('Import finished.'));
 -        Tools::logm('Import finished completely');
 -        Tools::redirect();
 -      }
 -      else {
 -        //if just inserted - don't download anything, download will start in next reload
 -        if ( !isset($_FILES['file']) ) {
 -          //download next batch
 -          Tools::logm('Fetching next batch of articles...');
 -          $items = $this->store->retrieveUnfetchedEntries($this->user->getId(), IMPORT_LIMIT);
 +        if ($recordsDownloadRequired == 0) {
  
 -          $purifier = $this->getPurifier();
 +            // nothing to download
  
 -          foreach ($items as $item) {
 -            $url = new Url(base64_encode($item['url']));
 -            Tools::logm('Fetching article '.$item['id']);
 -            $content = Tools::getPageContent($url);
 +            $this->messages->add('s', _('Import finished.'));
 +            Tools::logm('Import finished completely');
 +            Tools::redirect();
 +        }
 +        else {
  
 -            $title = (($content['rss']['channel']['item']['title'] != '') ? $content['rss']['channel']['item']['title'] : _('Untitled'));
 -            $body = (($content['rss']['channel']['item']['description'] != '') ? $content['rss']['channel']['item']['description'] : _('Undefined'));
 +            // if just inserted - don't download anything, download will start in next reload
  
 -            //clean content to prevent xss attack
 -            $title = $purifier->purify($title);
 -            $body = $purifier->purify($body);
 +            if (!isset($_FILES['file'])) {
  
 -            $this->store->updateContentAndTitle($item['id'], $title, $body, $this->user->getId());
 -            Tools::logm('Article '.$item['id'].' updated.');
 -          }
 +                // download next batch
 +
 +                Tools::logm('Fetching next batch of articles...');
 +                $items = $this->store->retrieveUnfetchedEntries($this->user->getId() , IMPORT_LIMIT);
 +                $purifier = $this->_getPurifier();
 +                foreach($items as $item) {
 +                    $url = new Url(base64_encode($item['url']));
 +                    Tools::logm('Fetching article ' . $item['id']);
 +                    $content = Tools::getPageContent($url);
 +                    $title = (($content['rss']['channel']['item']['title'] != '') ? $content['rss']['channel']['item']['title'] : _('Untitled'));
 +                    $body = (($content['rss']['channel']['item']['description'] != '') ? $content['rss']['channel']['item']['description'] : _('Undefined'));
  
 +                    // clean content to prevent xss attack
 +
 +                    $title = $purifier->purify($title);
 +                    $body = $purifier->purify($body);
 +                    $this->store->updateContentAndTitle($item['id'], $title, $body, $this->user->getId());
 +                    Tools::logm('Article ' . $item['id'] . ' updated.');
 +                }
 +            }
          }
 -      }
  
 -      return array('includeImport'=>true, 'import'=>array('recordsDownloadRequired'=>$recordsDownloadRequired, 'recordsUnderDownload'=> IMPORT_LIMIT, 'delay'=> IMPORT_DELAY * 1000) );
 +        return array(
 +            'includeImport' => true,
 +            'import' => array(
 +                'recordsDownloadRequired' => $recordsDownloadRequired,
 +                'recordsUnderDownload' => IMPORT_LIMIT,
 +                'delay' => IMPORT_DELAY * 1000
 +            )
 +        );
      }
  
      /**