/** * Copyright (C) 2014-2025 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Attribution: This code is part of the All-in-One WP Migration plugin, developed by * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔════╝██╔════╝██╔══██╗██║ ██║████╗ ████║██╔══██╗██╔════╝██║ ██╔╝ * ███████╗█████╗ ██████╔╝██║ ██║██╔████╔██║███████║███████╗█████╔╝ * ╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██║╚██╔╝██║██╔══██║╚════██║██╔═██╗ * ███████║███████╗██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║██║ ██║███████║██║ ██╗ * ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Content { public static function execute( $params ) { // Set archive bytes offset if ( isset( $params['archive_bytes_offset'] ) ) { $archive_bytes_offset = (int) $params['archive_bytes_offset']; } else { $archive_bytes_offset = ai1wm_archive_bytes( $params ); } // Set file bytes offset if ( isset( $params['file_bytes_offset'] ) ) { $file_bytes_offset = (int) $params['file_bytes_offset']; } else { $file_bytes_offset = 0; } // Set content bytes offset if ( isset( $params['content_bytes_offset'] ) ) { $content_bytes_offset = (int) $params['content_bytes_offset']; } else { $content_bytes_offset = 0; } // Get processed files size if ( isset( $params['processed_files_size'] ) ) { $processed_files_size = (int) $params['processed_files_size']; } else { $processed_files_size = 0; } // Get total content files size if ( isset( $params['total_content_files_size'] ) ) { $total_content_files_size = (int) $params['total_content_files_size']; } else { $total_content_files_size = 1; } // Get total content files count if ( isset( $params['total_content_files_count'] ) ) { $total_content_files_count = (int) $params['total_content_files_count']; } else { $total_content_files_count = 1; } // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_content_files_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving %d content files...
%d%% complete', AI1WM_PLUGIN_NAME ), $total_content_files_count, $progress ) ); // Flag to hold if file data has been processed $completed = true; // Start time $start = microtime( true ); // Get content list file $content_list = ai1wm_open( ai1wm_content_list_path( $params ), 'r' ); // Set the file pointer at the current index if ( fseek( $content_list, $content_bytes_offset ) !== -1 ) { // Open the archive file for writing $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); // Set the file pointer to the one that we have saved $archive->set_file_pointer( $archive_bytes_offset ); // Loop over files while ( list( $file_abspath, $file_relpath, $file_size, $file_mtime ) = ai1wm_getcsv( $content_list ) ) { $file_bytes_written = 0; // Add file to archive if ( ( $completed = $archive->add_file( $file_abspath, $file_relpath, $file_bytes_written, $file_bytes_offset ) ) ) { $file_bytes_offset = 0; // Get content bytes offset $content_bytes_offset = ftell( $content_list ); } // Increment processed files size $processed_files_size += $file_bytes_written; // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_content_files_size ) * 100, 100 ); // Set progress Ai1wm_Status::info( sprintf( __( 'Archiving %d content files...
%d%% complete', AI1WM_PLUGIN_NAME ), $total_content_files_count, $progress ) ); // More than 10 seconds have passed, break and do another request if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) { if ( ( microtime( true ) - $start ) > $timeout ) { $completed = false; break; } } } // Get archive bytes offset $archive_bytes_offset = $archive->get_file_pointer(); // Truncate the archive file $archive->truncate(); // Close the archive file $archive->close(); } // End of the content list? if ( feof( $content_list ) ) { // Unset archive bytes offset unset( $params['archive_bytes_offset'] ); // Unset file bytes offset unset( $params['file_bytes_offset'] ); // Unset content bytes offset unset( $params['content_bytes_offset'] ); // Unset processed files size unset( $params['processed_files_size'] ); // Unset total content files size unset( $params['total_content_files_size'] ); // Unset total content files count unset( $params['total_content_files_count'] ); // Unset completed flag unset( $params['completed'] ); } else { // Set archive bytes offset $params['archive_bytes_offset'] = $archive_bytes_offset; // Set file bytes offset $params['file_bytes_offset'] = $file_bytes_offset; // Set content bytes offset $params['content_bytes_offset'] = $content_bytes_offset; // Set processed files size $params['processed_files_size'] = $processed_files_size; // Set total content files size $params['total_content_files_size'] = $total_content_files_size; // Set total content files count $params['total_content_files_count'] = $total_content_files_count; // Set completed flag $params['completed'] = $completed; } // Close the content list file ai1wm_close( $content_list ); return $params; } } Aveda Blonde Revival Purple Toning Shampoo 200ml – Tgtraders
WELCOME TO TGTRADERS SHOP!

Aveda Blonde Revival Purple Toning Shampoo 200ml

£13.15

  • Blonde Revival Purple Toning Shampoo 200ml
Brand Aveda
Item Form Liquid
Hair Type All
Scent Revival
Age Range (Description) Adult

The Blonde Revival Purple Toning Shampoo has been infused with purple tones that help to accent blonde hair. It counteracts brassy and yellow tones in the hair, enabling cooler and more beautiful tones. It also provides gentle cleansing that lifts and removes impurities from the hair without stripping it. It also helps to improve hair softness and smoothness, providing lightweight oils that support the hair’s fibre. Free from sulphate cleansers, silicone, parabens, mineral oil, petrolatum, and synthetic fragrance. To use: Apply to damp hair and massage. Rinse thoroughly. Ingredients: WaterAquaEau, Sodium Cocoyl Isethionate, Propanediol, Glyceryl Oleate, Coco-Glucoside, Sodium Methyl Cocoyl Taurate, Babassuamidopropyl Betaine, Hydroxypropyl Starch Phosphate, Glycol Stearate, Guar Hydroxypropyltrimonium Chloride, Glycerin, Passiflora Edulis Seed Oil, Euterpe Oleracea Fruit Oil, Oryza Sativa (Rice) Bran Oil, Tocopherol, Sodium Chloride, Citric Acid, Fragrance (Parfum), Limonene, Citronellol, Amyl Cinnamal, Geraniol, Hydroxycitronellal, Sodium Phytate, Potassium Sorbate, Sodium Benzoate, Phenoxyethanol, Ext. Violet 2 (Ci 60730) Aveda is a cruelty-free brand. They do not test their products on animals or ask others to do so for them. Aveda is proud to be the first beauty company to manufacture products with 100% wind power.

  • Product Dimensions ‏ : ‎ 9 x 6 x 3 inches; 5.29 Ounces
  • Item model number ‏ : ‎ AYCK01
  • Department ‏ : ‎ Unisex
  • UPC ‏ : ‎ 018084030387 018084037706
  • Manufacturer ‏ : ‎ Aveda
  • ASIN ‏ : ‎ B093HJQFZC

Important information

Ingredients

WaterAquaEau, Sodium Cocoyl Isethionate, Propanediol, Glyceryl Oleate, Coco-Glucoside, Sodium Methyl Cocoyl Taurate, Babassuamidopropyl Betaine, Hydroxypropyl Starch Phosphate, Glycol Stearate, Guar Hydroxypropyltrimonium Chloride, Glycerin, Passiflora Edulis Seed Oil, Euterpe Oleracea Fruit Oil, Oryza Sativa (Rice) Bran Oil, Tocopherol, Sodium Chloride, Citric Acid, Fragrance (Parfum), Limonene, Citronellol, Amyl Cinnamal, Geraniol, Hydroxycitronellal, Sodium Phytate, Potassium Sorbate, Sodium Benzoate, Phenoxyethanol, Ext. Violet 2 (Ci 60730)

SKU: B093HJQFZC Category:

Cart

Your Cart is Empty

Back To Shop