use Drupal\Core\Render\Element\Link;
use Drupal\Core\Render\Markup;
use Drupal\Core\StringTranslation\TranslatableMarkup;
-use Drupal\Core\PhpStorage\PhpStorageFactory;
use Drupal\Core\StringTranslation\PluralTranslatableMarkup;
use Drupal\Core\Render\BubbleableMetadata;
use Drupal\Core\Render\Element;
*
* Correct:
* @code
- * $my_substring = Unicode::substr($original_string, 0, 5);
+ * $my_substring = mb_substr($original_string, 0, 5);
* @endcode
*
* @}
* If the query parameter isn't present, then the URL of the current
* request is returned.
*
- * @see \Drupal\Core\EventSubscriber\RedirectResponseSubscriber::checkRedirectUrl()
- *
* @ingroup form_api
*
* @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0.
* Use the redirect.destination service.
+ *
+ * @see \Drupal\Core\EventSubscriber\RedirectResponseSubscriber::checkRedirectUrl()
+ * @see https://www.drupal.org/node/2448603
*/
function drupal_get_destination() {
return \Drupal::destination()->getAsArray();
*
* @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0.
* Use \Drupal::service('email.validator')->isValid().
+ *
+ * @see https://www.drupal.org/node/2912661
*/
function valid_email_address($mail) {
return \Drupal::service('email.validator')->isValid($mail);
* Drupal\Core\Template\Attribute, call
* \Drupal\Component\Utility\UrlHelper::stripDangerousProtocols() instead.
*
- * @see \Drupal\Component\Utility\UrlHelper::stripDangerousProtocols()
- * @see \Drupal\Component\Utility\UrlHelper::filterBadProtocol()
- *
* @deprecated in Drupal 8.0.x-dev, will be removed before Drupal 9.0.0.
* Use UrlHelper::stripDangerousProtocols() or UrlHelper::filterBadProtocol()
* instead. UrlHelper::stripDangerousProtocols() can be used in conjunction
- * with \Drupal\Component\Utility\SafeMarkup::format() and an @variable
+ * with \Drupal\Component\Render\FormattableMarkup and an @variable
* placeholder which will perform the necessary escaping.
* UrlHelper::filterBadProtocol() is functionality equivalent to check_url()
* apart from the fact it is protected from double escaping bugs. Note that
* this method no longer marks its output as safe.
+ *
+ * @see \Drupal\Component\Utility\UrlHelper::stripDangerousProtocols()
+ * @see \Drupal\Component\Utility\UrlHelper::filterBadProtocol()
+ * @see https://www.drupal.org/node/2560027
*/
function check_url($uri) {
return Html::escape(UrlHelper::stripDangerousProtocols($uri));
* A translated string representation of the size.
*/
function format_size($size, $langcode = NULL) {
- if ($size < Bytes::KILOBYTE) {
+ $absolute_size = abs($size);
+ if ($absolute_size < Bytes::KILOBYTE) {
return \Drupal::translation()->formatPlural($size, '1 byte', '@count bytes', [], ['langcode' => $langcode]);
}
- else {
- $size = $size / Bytes::KILOBYTE; // Convert bytes to kilobytes.
- $units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
- foreach ($units as $unit) {
- if (round($size, 2) >= Bytes::KILOBYTE) {
- $size = $size / Bytes::KILOBYTE;
- }
- else {
- break;
- }
- }
- $args = ['@size' => round($size, 2)];
- $options = ['langcode' => $langcode];
- switch ($unit) {
- case 'KB':
- return new TranslatableMarkup('@size KB', $args, $options);
- case 'MB':
- return new TranslatableMarkup('@size MB', $args, $options);
- case 'GB':
- return new TranslatableMarkup('@size GB', $args, $options);
- case 'TB':
- return new TranslatableMarkup('@size TB', $args, $options);
- case 'PB':
- return new TranslatableMarkup('@size PB', $args, $options);
- case 'EB':
- return new TranslatableMarkup('@size EB', $args, $options);
- case 'ZB':
- return new TranslatableMarkup('@size ZB', $args, $options);
- case 'YB':
- return new TranslatableMarkup('@size YB', $args, $options);
+ // Create a multiplier to preserve the sign of $size.
+ $sign = $absolute_size / $size;
+ foreach (['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] as $unit) {
+ $absolute_size /= Bytes::KILOBYTE;
+ $rounded_size = round($absolute_size, 2);
+ if ($rounded_size < Bytes::KILOBYTE) {
+ break;
}
}
+ $args = ['@size' => $rounded_size * $sign];
+ $options = ['langcode' => $langcode];
+ switch ($unit) {
+ case 'KB':
+ return new TranslatableMarkup('@size KB', $args, $options);
+
+ case 'MB':
+ return new TranslatableMarkup('@size MB', $args, $options);
+
+ case 'GB':
+ return new TranslatableMarkup('@size GB', $args, $options);
+
+ case 'TB':
+ return new TranslatableMarkup('@size TB', $args, $options);
+
+ case 'PB':
+ return new TranslatableMarkup('@size PB', $args, $options);
+
+ case 'EB':
+ return new TranslatableMarkup('@size EB', $args, $options);
+
+ case 'ZB':
+ return new TranslatableMarkup('@size ZB', $args, $options);
+
+ case 'YB':
+ return new TranslatableMarkup('@size YB', $args, $options);
+ }
}
/**
* @return
* A translated date string in the requested format.
*
- * @see \Drupal\Core\Datetime\DateFormatter::format()
- *
* @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0.
* Use \Drupal::service('date.formatter')->format().
+ *
+ * @see \Drupal\Core\Datetime\DateFormatter::format()
+ * @see https://www.drupal.org/node/1876852
*/
function format_date($timestamp, $type = 'medium', $format = '', $timezone = NULL, $langcode = NULL) {
return \Drupal::service('date.formatter')->format($timestamp, $type, $format, $timezone, $langcode);
/**
* Returns the base URL path (i.e., directory) of the Drupal installation.
*
- * base_path() adds a "/" to the beginning and end of the returned path if the
- * path is not empty. At the very least, this will return "/".
+ * Function base_path() adds a "/" to the beginning and end of the returned path
+ * if the path is not empty. At the very least, this will return "/".
*
* Examples:
* - http://example.com returns "/" because the path is empty.
*
* @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
* Use \Drupal\Core\Asset\AssetCollectionOptimizerInterface::deleteAll().
+ *
+ * @see https://www.drupal.org/node/2317841
*/
function drupal_clear_css_cache() {
\Drupal::service('asset.css.collection_optimizer')->deleteAll();
*
* Every condition is a key/value pair, whose key is a jQuery selector that
* denotes another element on the page, and whose value is an array of
- * conditions, which must bet met on that element:
+ * conditions, which must be met on that element:
* @code
* array(
* 'visible' => array(
* 'id' => 'my-module-table',
* ),
* );
- * return drupal_render($table);
+ * return \Drupal::service('renderer')->render($table);
* @endcode
*
* In the theme function for the form, a special class must be added to each
'subgroup' => NULL,
'source' => NULL,
'hidden' => TRUE,
- 'limit' => 0
+ 'limit' => 0,
];
$group = $options['group'];
*
* @deprecated in Drupal 8.x, will be removed before Drupal 9.0.
* Use \Drupal\Core\Asset\AssetCollectionOptimizerInterface::deleteAll().
+ *
+ * @see https://www.drupal.org/node/2317841
*/
function drupal_clear_js_cache() {
\Drupal::service('asset.js.collection_optimizer')->deleteAll();
* 'renderer' service instead.
*
* @see \Drupal\Core\Render\RendererInterface::renderRoot()
+ * @see https://www.drupal.org/node/2912696
*/
function drupal_render_root(&$elements) {
return \Drupal::service('renderer')->renderRoot($elements);
* 'renderer' service instead.
*
* @see \Drupal\Core\Render\RendererInterface::render()
+ * @see https://www.drupal.org/node/2912696
*/
function drupal_render(&$elements, $is_recursive_call = FALSE) {
return \Drupal::service('renderer')->render($elements, $is_recursive_call);
* rendering when possible or loop through the elements and render them as
* they are available.
*
- * @see drupal_render()
+ * @see \Drupal\Core\Render\RendererInterface::render()
+ * @see https://www.drupal.org/node/2912757
*/
function drupal_render_children(&$element, $children_keys = NULL) {
if ($children_keys === NULL) {
$output = '';
foreach ($children_keys as $key) {
if (!empty($element[$key])) {
- $output .= drupal_render($element[$key]);
+ $output .= \Drupal::service('renderer')->render($element[$key]);
}
}
return Markup::create($output);
*
* @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0.
* Use \Drupal::service('element_info')->getInfo() instead.
+ *
+ * @see https://www.drupal.org/node/2235461
*/
function element_info($type) {
return \Drupal::service('element_info')->getInfo($type);
*
* @deprecated in Drupal 8.0.0, will be removed before Drupal 9.0.0.
* Use \Drupal::service('element_info')->getInfoProperty() instead.
+ *
+ * @see https://www.drupal.org/node/2235461
*/
function element_info_property($type, $property_name, $default = NULL) {
return \Drupal::service('element_info')->getInfoProperty($type, $property_name, $default);
\Drupal::service('kernel')->invalidateContainer();
// Wipe the Twig PHP Storage cache.
- PhpStorageFactory::get('twig')->deleteAll();
+ \Drupal::service('twig')->invalidate();
// Rebuild module and theme data.
$module_data = system_rebuild_module_data();
// to reset the theme manager.
\Drupal::theme()->resetActiveTheme();
-
// Rebuild and reboot a new kernel. A simple DrupalKernel reboot is not
// sufficient, since the list of enabled modules might have been adjusted
// above due to changed code.
*/
function archiver_get_archiver($file) {
// Archivers can only work on local paths
- $filepath = drupal_realpath($file);
+ $filepath = \Drupal::service('file_system')->realpath($file);
if (!is_file($filepath)) {
throw new Exception(t('Archivers can only operate on local files: %file not supported', ['%file' => $file]));
}