if (!defined('ABSPATH')) die('No direct access.'); /** * Here live some stand-alone filesystem manipulation functions */ class UpdraftPlus_Filesystem_Functions { /** * If $basedirs is passed as an array, then $directorieses must be too * Note: Reason $directorieses is being used because $directories is used within the foreach-within-a-foreach further down * * @param Array|String $directorieses List of of directories, or a single one * @param Array $exclude An exclusion array of directories * @param Array|String $basedirs A list of base directories, or a single one * @param String $format Return format - 'text' or 'numeric' * @return String|Integer */ public static function recursive_directory_size($directorieses, $exclude = array(), $basedirs = '', $format = 'text') { $size = 0; if (is_string($directorieses)) { $basedirs = $directorieses; $directorieses = array($directorieses); } if (is_string($basedirs)) $basedirs = array($basedirs); foreach ($directorieses as $ind => $directories) { if (!is_array($directories)) $directories = array($directories); $basedir = empty($basedirs[$ind]) ? $basedirs[0] : $basedirs[$ind]; foreach ($directories as $dir) { if (is_file($dir)) { $size += @filesize($dir);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function. } else { $suffix = ('' != $basedir) ? ((0 === strpos($dir, $basedir.'/')) ? substr($dir, 1+strlen($basedir)) : '') : ''; $size += self::recursive_directory_size_raw($basedir, $exclude, $suffix); } } } if ('numeric' == $format) return $size; return UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($size); } /** * Ensure that WP_Filesystem is instantiated and functional. Otherwise, outputs necessary HTML and dies. * * @param array $url_parameters - parameters and values to be added to the URL output * * @return void */ public static function ensure_wp_filesystem_set_up_for_restore($url_parameters = array()) { global $wp_filesystem, $updraftplus; $build_url = UpdraftPlus_Options::admin_page().'?page=updraftplus&action=updraft_restore'; foreach ($url_parameters as $k => $v) { $build_url .= '&'.$k.'='.$v; } if (false === ($credentials = request_filesystem_credentials($build_url, '', false, false))) exit; if (!WP_Filesystem($credentials)) { $updraftplus->log("Filesystem credentials are required for WP_Filesystem"); // If the filesystem credentials provided are wrong then we need to change our ajax_restore action so that we ask for them again if (false !== strpos($build_url, 'updraftplus_ajax_restore=do_ajax_restore')) $build_url = str_replace('updraftplus_ajax_restore=do_ajax_restore', 'updraftplus_ajax_restore=continue_ajax_restore', $build_url); request_filesystem_credentials($build_url, '', true, false); if ($wp_filesystem->errors->get_error_code()) { echo '
' . esc_html__('Why am I seeing this?', 'updraftplus') . '
'; echo '%s. Without it, new thumbnail images can't be generated.", 'regenerate-thumbnails' ),
_wp_relative_upload_path( $this->fullsizepath )
),
array(
'status' => 404,
'fullsizepath' => _wp_relative_upload_path( $this->fullsizepath ),
'attachment' => $this->attachment,
)
);
$this->fullsizepath = $error;
}
return $this->fullsizepath;
}
/**
* Regenerate the thumbnails for this instance's attachment.
*
* @since 3.0.0
*
* @param array|string $args {
* Optional. Array or string of arguments for thumbnail regeneration.
*
* @type bool $only_regenerate_missing_thumbnails Skip regenerating existing thumbnail files. Default true.
* @type bool $delete_unregistered_thumbnail_files Delete any thumbnail sizes that are no longer registered. Default false.
* }
*
* @return mixed|WP_Error Metadata for attachment (see wp_generate_attachment_metadata()), or WP_Error on error.
*/
public function regenerate( $args = array() ) {
global $wpdb;
$args = wp_parse_args( $args, array(
'only_regenerate_missing_thumbnails' => true,
'delete_unregistered_thumbnail_files' => false,
) );
$fullsizepath = $this->get_fullsizepath();
if ( is_wp_error( $fullsizepath ) ) {
$fullsizepath->add_data( array( 'attachment' => $this->attachment ) );
return $fullsizepath;
}
$this->old_metadata = wp_get_attachment_metadata( $this->attachment->ID );
if ( $args['only_regenerate_missing_thumbnails'] ) {
add_filter( 'intermediate_image_sizes_advanced', array( $this, 'filter_image_sizes_to_only_missing_thumbnails' ), 10, 2 );
}
require_once( ABSPATH . 'wp-admin/includes/admin.php' );
$new_metadata = wp_generate_attachment_metadata( $this->attachment->ID, $fullsizepath );
if ( $args['only_regenerate_missing_thumbnails'] ) {
// Thumbnail sizes that existed were removed and need to be added back to the metadata.
foreach ( $this->skipped_thumbnails as $skipped_thumbnail ) {
if ( ! empty( $this->old_metadata['sizes'][ $skipped_thumbnail ] ) ) {
$new_metadata['sizes'][ $skipped_thumbnail ] = $this->old_metadata['sizes'][ $skipped_thumbnail ];
}
}
$this->skipped_thumbnails = array();
remove_filter( 'intermediate_image_sizes_advanced', array( $this, 'filter_image_sizes_to_only_missing_thumbnails' ), 10 );
}
$wp_upload_dir = dirname( $fullsizepath ) . DIRECTORY_SEPARATOR;
if ( $args['delete_unregistered_thumbnail_files'] ) {
// Delete old sizes that are still in the metadata.
$intermediate_image_sizes = get_intermediate_image_sizes();
foreach ( $this->old_metadata['sizes'] as $old_size => $old_size_data ) {
if ( in_array( $old_size, $intermediate_image_sizes ) ) {
continue;
}
wp_delete_file( $wp_upload_dir . $old_size_data['file'] );
unset( $new_metadata['sizes'][ $old_size ] );
}
$relative_path = dirname( $new_metadata['file'] ) . DIRECTORY_SEPARATOR;
// It's possible to upload an image with a filename like image-123x456.jpg and it shouldn't be deleted.
$whitelist = $wpdb->get_col( $wpdb->prepare( "
SELECT
meta_value
FROM
{$wpdb->postmeta}
WHERE
meta_key = '_wp_attached_file'
AND meta_value REGEXP %s
/* Regenerate Thumbnails */
",
'^' . preg_quote( $relative_path ) . '[^' . preg_quote( DIRECTORY_SEPARATOR ) . ']+-[0-9]+x[0-9]+\.'
) );
$whitelist = array_map( 'basename', $whitelist );
$filelist = array();
foreach ( scandir( $wp_upload_dir ) as $file ) {
if ( '.' == $file || '..' == $file || ! is_file( $wp_upload_dir . $file ) ) {
continue;
}
$filelist[] = $file;
}
$registered_thumbnails = array();
foreach ( $new_metadata['sizes'] as $size ) {
$registered_thumbnails[] = $size['file'];
}
$fullsize_parts = pathinfo( $fullsizepath );
foreach ( $filelist as $file ) {
if ( in_array( $file, $whitelist ) || in_array( $file, $registered_thumbnails ) ) {
continue;
}
if ( ! preg_match( '#^' . preg_quote( $fullsize_parts['filename'], '#' ) . '-[0-9]+x[0-9]+\.' . preg_quote( $fullsize_parts['extension'], '#' ) . '$#', $file ) ) {
continue;
}
wp_delete_file( $wp_upload_dir . $file );
}
} elseif ( ! empty( $this->old_metadata ) && ! empty( $this->old_metadata['sizes'] ) && is_array( $this->old_metadata['sizes'] ) ) {
// If not deleting, rename any size conflicts to avoid them being lost if the file still exists.
foreach ( $this->old_metadata['sizes'] as $old_size => $old_size_data ) {
if ( empty( $new_metadata['sizes'][ $old_size ] ) ) {
$new_metadata['sizes'][ $old_size ] = $this->old_metadata['sizes'][ $old_size ];
continue;
}
$new_size_data = $new_metadata['sizes'][ $old_size ];
if (
$new_size_data['width'] !== $old_size_data['width']
&& $new_size_data['height'] !== $old_size_data['height']
&& file_exists( $wp_upload_dir . $old_size_data['file'] )
) {
$new_metadata['sizes'][ $old_size . '_old_' . $old_size_data['width'] . 'x' . $old_size_data['height'] ] = $old_size_data;
}
}
}
wp_update_attachment_metadata( $this->attachment->ID, $new_metadata );
return $new_metadata;
}
/**
* Filters the list of thumbnail sizes to only include those which have missing files.
*
* @since 3.0.0
*
* @param array $sizes An associative array of registered thumbnail image sizes.
* @param array $fullsize_metadata An associative array of fullsize image metadata: width, height, file.
*
* @return array An associative array of image sizes.
*/
public function filter_image_sizes_to_only_missing_thumbnails( $sizes, $fullsize_metadata ) {
if ( ! $sizes ) {
return $sizes;
}
$fullsizepath = $this->get_fullsizepath();
if ( is_wp_error( $fullsizepath ) ) {
return $sizes;
}
$editor = wp_get_image_editor( $fullsizepath );
if ( is_wp_error( $editor ) ) {
return $sizes;
}
$metadata = $this->old_metadata;
// This is based on WP_Image_Editor_GD::multi_resize() and others.
foreach ( $sizes as $size => $size_data ) {
if ( empty( $metadata['sizes'][ $size ] ) ) {
continue;
}
if ( ! isset( $size_data['width'] ) && ! isset( $size_data['height'] ) ) {
continue;
}
if ( ! isset( $size_data['width'] ) ) {
$size_data['width'] = null;
}
if ( ! isset( $size_data['height'] ) ) {
$size_data['height'] = null;
}
if ( ! isset( $size_data['crop'] ) ) {
$size_data['crop'] = false;
}
$thumbnail = $this->get_thumbnail(
$editor,
$fullsize_metadata['width'],
$fullsize_metadata['height'],
$size_data['width'],
$size_data['height'],
$size_data['crop']
);
// The false check filters out thumbnails that would be larger than the fullsize image.
// The size comparison makes sure that the size is also correct.
if (
false === $thumbnail
|| (
$thumbnail['width'] === $metadata['sizes'][ $size ]['width']
&& $thumbnail['height'] === $metadata['sizes'][ $size ]['height']
&& file_exists( $thumbnail['filename'] )
)
) {
$this->skipped_thumbnails[] = $size;
unset( $sizes[ $size ] );
}
}
/**
* Filters the list of missing thumbnail sizes if you want to add/remove any.
*
* @since 3.1.0
*
* @param array $sizes An associative array of image sizes that are missing.
* @param array $fullsize_metadata An associative array of fullsize image metadata: width, height, file.
* @param object $this The current instance of this class.
*
* @return array An associative array of image sizes.
*/
return apply_filters( 'regenerate_thumbnails_missing_thumbnails', $sizes, $fullsize_metadata, $this );
}
/**
* Generate the thumbnail filename and dimensions for a given set of constraint dimensions.
*
* @since 3.0.0
*
* @param WP_Image_Editor|WP_Error $editor An instance of WP_Image_Editor, as returned by wp_get_image_editor().
* @param int $fullsize_width The width of the fullsize image.
* @param int $fullsize_height The height of the fullsize image.
* @param int $thumbnail_width The width of the thumbnail.
* @param int $thumbnail_height The height of the thumbnail.
* @param bool $crop Whether to crop or not.
*
* @return array|false An array of the filename, thumbnail width, and thumbnail height,
* or false on failure to resize such as the thumbnail being larger than the fullsize image.
*/
public function get_thumbnail( $editor, $fullsize_width, $fullsize_height, $thumbnail_width, $thumbnail_height, $crop ) {
$dims = image_resize_dimensions( $fullsize_width, $fullsize_height, $thumbnail_width, $thumbnail_height, $crop );
if ( ! $dims ) {
return false;
}
list( , , , , $dst_w, $dst_h ) = $dims;
$suffix = "{$dst_w}x{$dst_h}";
$file_ext = strtolower( pathinfo( $this->get_fullsizepath(), PATHINFO_EXTENSION ) );
return array(
'filename' => $editor->generate_filename( $suffix, null, $file_ext ),
'width' => $dst_w,
'height' => $dst_h,
);
}
/**
* Update the post content of any public post types (posts and pages by default)
* that make use of this attachment.
*
* @since 3.0.0
*
* @param array|string $args {
* Optional. Array or string of arguments for controlling the updating.
*
* @type array $post_type The post types to update. Defaults to public post types (posts and pages by default).
* @type array $post_ids Specific post IDs to update as opposed to any that uses the attachment.
* @type int $posts_per_loop How many posts to query at a time to keep memory usage down. You shouldn't need to modify this.
* }
*
* @return array|WP_Error List of post IDs that were modified. The key is the post ID and the value is either the post ID again or a WP_Error object if wp_update_post() failed.
*/
public function update_usages_in_posts( $args = array() ) {
// Temporarily disabled until it can be even better tested for edge cases
return array();
$args = wp_parse_args( $args, array(
'post_type' => array(),
'post_ids' => array(),
'posts_per_loop' => 10,
) );
if ( empty( $args['post_type'] ) ) {
$args['post_type'] = array_values( get_post_types( array( 'public' => true ) ) );
unset( $args['post_type']['attachment'] );
}
$offset = 0;
$posts_updated = array();
while ( true ) {
$posts = get_posts( array(
'numberposts' => $args['posts_per_loop'],
'offset' => $offset,
'orderby' => 'ID',
'order' => 'ASC',
'include' => $args['post_ids'],
'post_type' => $args['post_type'],
's' => 'wp-image-' . $this->attachment->ID,
// For faster queries.
'update_post_meta_cache' => false,
'update_post_term_cache' => false,
) );
if ( ! $posts ) {
break;
}
$offset += $args['posts_per_loop'];
foreach ( $posts as $post ) {
$content = $post->post_content;
$search = array();
$replace = array();
// Find all L'articolo La città bianca proviene da Trullo Messapia.
]]>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ex quo intellegitur idem illud, solum bonum esse, quod honestum sit, idque esse beate vivere: honeste, id est cum virtute, vivere. Stoici restant, ei quidem non unam aliquam aut alteram rem a nobis, sed totam ad se nostram philosophiam transtulerunt.
Qui mos cum a posterioribus non esset retentus, Arcesilas eum revocavit instituitque ut ii, qui se audire vellent, non de se quaererent, sed ipsi dicerent, quid sentirent; Praeclare hoc quidem. Duo Reges: constructio interrete. Haec mirabilia videri intellego, sed cum certe superiora firma ac vera sint, his autem ea consentanea et consequentia, ne de horum quidem est veritate dubitandum. Aut etiam, ut vestitum, sic sententiam habeas aliam domesticam, aliam forensem, ut in fronte ostentatio sit, intus veritas occultetur? Quoniamque in iis rebus, quae neque in virtutibus sunt neque in vitiis, est tamen quiddam, quod usui possit esse, tollendum id non est. Ut aliquid scire se gaudeant? Nam voluptatis causa facere omnia, cum, etiamsi nihil consequamur, tamen ipsum illud consilium ita faciendi per se expetendum et honestum et solum bonum sit, nemo dixit. Esto, fecerit, si ita vis, Torquatus propter suas utilitatesmalo enim dicere quam voluptates, in tanto praesertim viro-, num etiam eius collega P. Quae contraria sunt his, malane? An quae de prudentia, de cognitione rerum, de coniunctione generis humani, quaeque ab eisdem de temperantia, de modestia, de magnitudine animi, de omni honestate dicuntur?
Epicurei num desistunt de isdem, de quibus et ab Epicuro scriptum est et ab antiquis, ad arbitrium suum scribere? Qui autem esse poteris, nisi te amor ipse ceperit?
Ad eos igitur converte te, quaeso. Quae tamen a te agetur non melior, quam illae sunt, quas interdum optines. An obliviscimur, quantopere in audiendo in legendoque moveamur, cum pie, cum amice, cum magno animo aliquid factum cognoscimus? Tubulo putas dicere? Sed et illum, quem nominavi, et ceteros sophistas, ut e Platone intellegi potest, lusos videmus a Socrate. Quos ille, di inmortales, cum omnes artus ardere viderentur, cruciatus perferebat! nec tamen miser esse, quia summum id malum non erat, tantum modo laboriosus videbatur; Dolere malum est: in crucem qui agitur, beatus esse non potest. Quae in controversiam veniunt, de iis, si placet, disseramus. Et homini, qui ceteris animantibus plurimum praestat, praecipue a natura nihil datum esse dicemus? Non dolere, inquam, istud quam vim habeat postea videro; Possumusne hic scire qualis sit, nisi contulerimus inter nos, cum finem bonorum dixerimus, quid finis, quid etiam sit ipsum bonum? Ut enim, inquit, gubernator aeque peccat, si palearum navem evertit et si auri, item aeque peccat, qui parentem et qui servum iniuria verberat.
Me quidem ad altiorem memoriam Oedipodis huc venientis et illo mollissimo carmine quaenam essent ipsa haec loca requirentis species quaedam commovit, inaniter scilicet, sed commovit tamen. Illa tamen simplicia, vestra versuta. Immo alio genere; Itaque non discedit ab eorum curatione, quibus praeposita vitam omnem debet gubernare, ut mirari satis istorum inconstantiam non possim. Perfecto enim et concluso neque virtutibus neque amicitiis usquam locum esse, si ad voluptatem omnia referantur, nihil praeterea est magnopere dicendum. Huc et illuc, Torquate, vos versetis licet, nihil in hac praeclara epistula scriptum ab Epicuro congruens et conveniens decretis eius reperietis. Quoniam enim natura suis omnibus expleri partibus vult, hunc statum corporis per se ipsum expetit, qui est maxime e natura, quae tota perturbatur, si aut aegrum corpus est aut dolet aut, caret viribus. Aut, si nihil malum, nisi quod turpe, inhonestum, indecorum, pravum, flagitiosum, foedum-ut hoc quoque pluribus nominibus insigne faciamus-, quid praeterea dices esse fugiendum?
Nam si quae sunt aliae, falsum est omnis animi voluptates esse e corporis societate. Est enim natura sic generata vis hominis, ut ad omnem virtutem percipiendam facta videatur, ob eamque causam parvi virtutum simulacris, quarum in se habent semina, sine doctrina moventur; In quibus hoc primum est in quo admirer, cur in gravissimis rebus non delectet eos sermo patrius, cum idem fabellas Latinas ad verbum e Graecis expressas non inviti legant. Et si turpitudinem fugimus in statu et motu corporis, quid est cur pulchritudinem non sequamur? Id enim natura desiderat. Poterat autem inpune; Cumque eorum utrumque per se expetendum esse dixissent, virtutes quoque utriusque eorum per se expetendas esse dicebant, et cum animum infinita quadam laude anteponerent corpori, virtutes quoque animi bonis corporis anteponebant.
Nam interdum nimis etiam novit, quippe qui testificetur ne intellegere quidem se posse ubi sit aut quod sit ullum bonum praeter illud, quod cibo et potione et aurium delectatione et obscena voluptate capiatur.
Easdemne res? Si in ipso corpore multa voluptati praeponenda sunt, ut vires, valitudo, velocitas, pulchritudo, quid tandem in animis censes? In motu et in statu corporis nihil inest, quod animadvertendum esse ipsa natura iudicet? Nos beatam vitam non depulsione mali, sed adeptione boni iudicemus, nec eam cessando, sive gaudentem, ut Aristippus, sive non dolentem, ut hic, sed agendo aliquid considerandove quaeramus. In schola desinis. Iure igitur gravissimi philosophi initium summi boni a natura petiverunt et illum appetitum rerum ad naturam accommodatarum ingeneratum putaverunt omnibus, quia continentur ea commendatione naturae, qua se ipsi diligunt. Effluit igitur voluptas corporis et prima quaeque avolat saepiusque relinquit causam paenitendi quam recordandi. Reperiam multos, vel innumerabilis potius, non tam curiosos nec tam molestos, quam vos estis, quibus, quid velim, facile persuadeam. Aut etiam, ut vestitum, sic sententiam habeas aliam domesticam, aliam forensem, ut in fronte ostentatio sit, intus veritas occultetur? Hoc loco tenere se Triarius non potuit. Quem quidem locum comit multa venustate et omni sale idem Lucilius, apud quem praeclare Scaevola: Graecum te, Albuci, quam Romanum atque Sabinum, municipem Ponti, Tritani, centurionum, praeclarorum hominum ac primorum signiferumque, maluisti dici. Tum ille: Finem, inquit, interrogandi, si videtur, quod quidem ego a principio ita me malle dixeram hoc ipsum providens, dialecticas captiones. Equidem, sed audistine modo de Carneade? Esse tantam vim virtutis tantamque, ut ita dicam, auctoritatem honestatis, ut reliqua non illa quidem nulla, sed ita parva sint, ut nulla esse videantur. Sed ad bona praeterita redeamus.
L'articolo La città bianca proviene da Trullo Messapia.
]]>L'articolo Riserve naturali proviene da Trullo Messapia.
]]>
Cur igitur easdem res, inquam, Peripateticis dicentibus verbum nullum est, quod non intellegatur? Etenim nec iustitia nec amicitia esse omnino poterunt, nisi ipsae per se expetuntur. Explanetur igitur. Inde igitur, inquit, ordiendum est. Adsint etiam formosi pueri, qui ministrent, respondeat his vestis, argentum, Corinthium, locus ipse, aedificium-hos ergo asotos bene quidem vivere aut beate numquam dixerim. Satis est tibi in te, satis in legibus, satis in mediocribus amicitiis praesidii. Itaque, ne si iucundissimis quidem nos somniis usuros putemus, Endymionis somnum nobis velimus dari, idque si accidat, mortis instar putemus. Sed finge non solum callidum eum, qui aliquid improbe faciat, verum etiam praepotentem, ut M. Respondent extrema primis, media utrisque, omnia omnibus. Hac videlicet ratione, quod ea, quae externa sunt, iis tuemur officiis, quae oriuntur a suo cuiusque genere virtutis. Quo minus animus a se ipse dissidens secumque discordans gustare partem ullam liquidae voluptatis et liberae potest. Tu autem, si tibi illa probabantur, cur non propriis verbis ea tenebas? Nullis enim partitionibus, nullis definitionibus utuntur ipsique dicunt ea se modo probare, quibus natura tacita adsentiatur.
Quippe, inquieta cum tam docuerim gradus istam rem non habere quam virtutem, in qua sit ipsum etíam beatum. Laboro autem non sine causa; Sed ad haec, nisi molestum est, habeo quae velim. Quam vellem, inquit, te ad Stoicos inclinavisses! erat enim, si cuiusquam, certe tuum nihil praeter virtutem in bonis ducere. Quare conare, quaeso. Quare attendo te studiose et, quaecumque rebus iis, de quibus hic sermo est, nomina inponis, memoriae mando;
Cumque duae sint artes, quibus perfecte ratio et oratio compleatur, una inveniendi, altera disserendi, hanc posteriorem et Stoici et Peripatetici, priorem autem illi egregie tradiderunt, hi omnino ne attigerunt quidem.
Hic quoque suus est de summoque bono dissentiens dici vere Peripateticus non potest. In eo enim positum est id, quod dicimus esse expetendum. Sed quid sentiat, non videtis. Habent enim et bene longam et satis litigiosam disputationem. Atque haec contra Aristippum, qui eam voluptatem non modo summam, sed solam etiam ducit, quam omnes unam appellamus voluptatem. Nisi autem rerum natura perspecta erit, nullo modo poterimus sensuum iudicia defendere. Quis istud possit, inquit, negare? Qua ex cognitione facilior facta est investigatio rerum occultissimarum. Possumusne ergo in vita summum bonum dicere, cum id ne in cena quidem posse videamur? Nam nisi hoc optineatur, id solum bonum esse, quod honestum sit, nullo modo probari possit beatam vitam virtute effici.
Quae enim adhuc protulisti, popularia sunt, ego autem a te elegantiora desidero. Quorum altera prosunt, nocent altera. Efficiens dici potest. Quare attende, quaeso. Non quaeritur autem quid naturae tuae consentaneum sit, sed quid disciplinae. Ut alios omittam, hunc appello, quem ille unum secutus est. Sed residamus, inquit, si placet. Tria genera bonorum; Sed residamus, inquit, si placet. Theophrasti igitur, inquit, tibi liber ille placet de beata vita? Ita multo sanguine profuso in laetitia et in victoria est mortuus. At vero illa, quae Peripatetici, quae Stoici dicunt, semper tibi in ore sunt in iudiciis, in senatu.
Quae cum magnifice primo dici viderentur, considerata minus probabantur. Qui autem de summo bono dissentit de tota philosophiae ratione dissentit.
L'articolo Riserve naturali proviene da Trullo Messapia.
]]>