]> git.immae.eu Git - github/shaarli/Shaarli.git/commitdiff
Merge pull request #840 from ArthurHoaro/api/putLink
authorArthurHoaro <arthur@hoa.ro>
Sun, 7 May 2017 13:55:38 +0000 (15:55 +0200)
committerGitHub <noreply@github.com>
Sun, 7 May 2017 13:55:38 +0000 (15:55 +0200)
REST API: implement PUT method

1  2 
index.php

diff --combined index.php
index 76aa1ae0efbc1c9d5945b34b29c23ae576b06e34,d6642b68e9471e8d1d9a4f372a2d88ce131438bd..b8d20055016bb0a1c8e1cfb935cb6111ae5e522f
+++ b/index.php
@@@ -62,7 -62,6 +62,7 @@@ require_once 'application/CachedPage.ph
  require_once 'application/config/ConfigPlugin.php';
  require_once 'application/FeedBuilder.php';
  require_once 'application/FileUtils.php';
 +require_once 'application/History.php';
  require_once 'application/HttpUtils.php';
  require_once 'application/Languages.php';
  require_once 'application/LinkDB.php';
@@@ -473,6 -472,34 +473,6 @@@ if (isset($_POST['login'])
      }
  }
  
 -// ------------------------------------------------------------------------------------------
 -// Misc utility functions:
 -
 -// Convert post_max_size/upload_max_filesize (e.g. '16M') parameters to bytes.
 -function return_bytes($val)
 -{
 -    $val = trim($val); $last=strtolower($val[strlen($val)-1]);
 -    switch($last)
 -    {
 -        case 'g': $val *= 1024;
 -        case 'm': $val *= 1024;
 -        case 'k': $val *= 1024;
 -    }
 -    return $val;
 -}
 -
 -// Try to determine max file size for uploads (POST).
 -// Returns an integer (in bytes)
 -function getMaxFileSize()
 -{
 -    $size1 = return_bytes(ini_get('post_max_size'));
 -    $size2 = return_bytes(ini_get('upload_max_filesize'));
 -    // Return the smaller of two:
 -    $maxsize = min($size1,$size2);
 -    // FIXME: Then convert back to readable notations ? (e.g. 2M instead of 2000000)
 -    return $maxsize;
 -}
 -
  // ------------------------------------------------------------------------------------------
  // Token management for XSRF protection
  // Token should be used in any form which acts on data (create,update,delete,import...).
@@@ -728,12 -755,6 +728,12 @@@ function renderPage($conf, $pluginManag
          die($e->getMessage());
      }
  
 +    try {
 +        $history = new History($conf->get('resource.history'));
 +    } catch(Exception $e) {
 +        die($e->getMessage());
 +    }
 +
      $PAGE = new PageBuilder($conf);
      $PAGE->assign('linkcount', count($LINKSDB));
      $PAGE->assign('privateLinkcount', count_private($LINKSDB));
              $conf->set('api.secret', escape($_POST['apiSecret']));
              try {
                  $conf->write(isLoggedIn());
 +                $history->updateSettings();
                  invalidateCaches($conf->get('resource.page_cache'));
              }
              catch(Exception $e) {
              $PAGE->assign('theme', $conf->get('resource.theme'));
              $PAGE->assign('theme_available', ThemeUtils::getThemes($conf->get('resource.raintpl_tpl')));
              $PAGE->assign('redirector', $conf->get('redirector.url'));
 -            list($timezone_form, $timezone_js) = generateTimeZoneForm($conf->get('general.timezone'));
 -            $PAGE->assign('timezone_form', $timezone_form);
 -            $PAGE->assign('timezone_js',$timezone_js);
 +            list($continents, $cities) = generateTimeZoneData(
 +                timezone_identifiers_list(),
 +                $conf->get('general.timezone')
 +            );
 +            $PAGE->assign('continents', $continents);
 +            $PAGE->assign('cities', $cities);
              $PAGE->assign('private_links_default', $conf->get('privacy.default_private_links', false));
              $PAGE->assign('session_protection_disabled', $conf->get('security.session_protection_disabled', false));
              $PAGE->assign('enable_rss_permalinks', $conf->get('feed.rss_permalinks', false));
              $PAGE->assign('hide_public_links', $conf->get('privacy.hide_public_links', false));
              $PAGE->assign('api_enabled', $conf->get('api.enabled', true));
              $PAGE->assign('api_secret', $conf->get('api.secret'));
 +            $history->updateSettings();
              $PAGE->renderPage('configure');
              exit;
          }
                  unset($tags[array_search($needle,$tags)]); // Remove tag.
                  $value['tags']=trim(implode(' ',$tags));
                  $LINKSDB[$key]=$value;
 +                $history->updateLink($LINKSDB[$key]);
              }
              $LINKSDB->save($conf->get('resource.page_cache'));
              echo '<script>alert("Tag was removed from '.count($linksToAlter).' links.");document.location=\'?do=changetag\';</script>';
                  $tags[array_search($needle, $tags)] = trim($_POST['totag']);
                  $value['tags'] = implode(' ', array_unique($tags));
                  $LINKSDB[$key] = $value;
 +                $history->updateLink($LINKSDB[$key]);
              }
              $LINKSDB->save($conf->get('resource.page_cache')); // Save to disk.
              echo '<script>alert("Tag was renamed in '.count($linksToAlter).' links.");document.location=\'?searchtags='.urlencode(escape($_POST['totag'])).'\';</script>';
              $created = DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $linkdate);
              $updated = new DateTime();
              $shortUrl = $LINKSDB[$id]['shorturl'];
 +            $new = false;
          } else {
              // New link
              $created = DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $linkdate);
              $updated = null;
              $shortUrl = link_small_hash($created, $id);
 +            $new = true;
          }
  
          // Remove multiple spaces.
  
          $LINKSDB[$id] = $link;
          $LINKSDB->save($conf->get('resource.page_cache'));
 +        if ($new) {
 +            $history->addLink($link);
 +        } else {
 +            $history->updateLink($link);
 +        }
  
          // If we are called from the bookmarklet, we must close the popup:
          if (isset($_GET['source']) && ($_GET['source']=='bookmarklet' || $_GET['source']=='firefoxsocialapi')) {
          $pluginManager->executeHooks('delete_link', $link);
          unset($LINKSDB[$id]);
          $LINKSDB->save($conf->get('resource.page_cache')); // save to disk
 +        $history->deleteLink($link);
  
          // If we are called from the bookmarklet, we must close the popup:
          if (isset($_GET['source']) && ($_GET['source']=='bookmarklet' || $_GET['source']=='firefoxsocialapi')) { echo '<script>self.close();</script>'; exit; }
  
          if (! isset($_POST['token']) || ! isset($_FILES['filetoupload'])) {
              // Show import dialog
 -            $PAGE->assign('maxfilesize', getMaxFileSize());
 +            $PAGE->assign(
 +                'maxfilesize',
 +                get_max_upload_size(
 +                    ini_get('post_max_size'),
 +                    ini_get('upload_max_filesize'),
 +                    false
 +                )
 +            );
 +            $PAGE->assign(
 +                'maxfilesizeHuman',
 +                get_max_upload_size(
 +                    ini_get('post_max_size'),
 +                    ini_get('upload_max_filesize'),
 +                    true
 +                )
 +            );
              $PAGE->renderPage('import');
              exit;
          }
              // The file is too big or some form field may be missing.
              echo '<script>alert("The file you are trying to upload is probably'
                  .' bigger than what this webserver can accept ('
 -                .getMaxFileSize().' bytes).'
 +                .get_max_upload_size(ini_get('post_max_size'), ini_get('upload_max_filesize')).').'
                  .' Please upload in smaller chunks.");document.location=\'?do='
                  .Router::$PAGE_IMPORT .'\';</script>';
              exit;
              $_POST,
              $_FILES,
              $LINKSDB,
 -            $conf
 +            $conf,
 +            $history
          );
          echo '<script>alert("'.$status.'");document.location=\'?do='
               .Router::$PAGE_IMPORT .'\';</script>';
  
      // Plugin administration form action
      if ($targetPage == Router::$PAGE_SAVE_PLUGINSADMIN) {
 +        $history->updateSettings();
          try {
              if (isset($_POST['parameters_form'])) {
                  unset($_POST['parameters_form']);
@@@ -1993,10 -1982,16 +1993,10 @@@ function install($conf
          exit;
      }
  
 -    // Display config form:
 -    list($timezone_form, $timezone_js) = generateTimeZoneForm();
 -    $timezone_html = '';
 -    if ($timezone_form != '') {
 -        $timezone_html = '<tr><td><b>Timezone:</b></td><td>'.$timezone_form.'</td></tr>';
 -    }
 -
      $PAGE = new PageBuilder($conf);
 -    $PAGE->assign('timezone_html',$timezone_html);
 -    $PAGE->assign('timezone_js',$timezone_js);
 +    list($continents, $cities) = generateTimeZoneData(timezone_identifiers_list(), date_default_timezone_get());
 +    $PAGE->assign('continents', $continents);
 +    $PAGE->assign('cities', $cities);
      $PAGE->renderPage('install');
      exit;
  }
@@@ -2251,6 -2246,7 +2251,7 @@@ $app->group('/api/v1', function() 
      $this->get('/links', '\Shaarli\Api\Controllers\Links:getLinks')->setName('getLinks');
      $this->get('/links/{id:[\d]+}', '\Shaarli\Api\Controllers\Links:getLink')->setName('getLink');
      $this->post('/links', '\Shaarli\Api\Controllers\Links:postLink')->setName('postLink');
+     $this->put('/links/{id:[\d]+}', '\Shaarli\Api\Controllers\Links:putLink')->setName('putLink');
  })->add('\Shaarli\Api\ApiMiddleware');
  
  $response = $app->run(true);