/**
  * Call variation creation function with a list of defined variation
  *
  * @param array $possible_variations A list of variation to create for the current element
  * @param integer $element_id The product we want to create variation for
  *
  * @return mixed The last created variation identifier
  */
 public static function creation_variation_callback($possible_variations, $element_id)
 {
     /** Get existing variation	*/
     $existing_variations_in_db = wpshop_products::get_variation($element_id);
     $existing_variations = array();
     if (!empty($existing_variations_in_db)) {
         foreach ($existing_variations_in_db as $variations_def) {
             $existing_variations[] = $variations_def['variation_def'];
         }
     }
     /** New variation definition	*/
     $attribute_defining_variation = get_post_meta($element_id, '_wpshop_variation_defining', true);
     /**	Read possible values	*/
     foreach ($possible_variations as $variation_definition) {
         if (in_array($variation_definition, $existing_variations)) {
             continue;
         }
         $attribute_to_set = array();
         foreach ($variation_definition as $attribute_code => $attribute_selected_value) {
             $attribute = wpshop_attributes::getElement($attribute_code, "'valid'", 'code');
             $attribute_to_set[$attribute->data_type][$attribute_code] = $attribute_selected_value;
             if (empty($attribute_defining_variation['attributes']) || !in_array($attribute_code, $attribute_defining_variation['attributes'])) {
                 $attribute_defining_variation['attributes'][] = $attribute_code;
             }
         }
         $variation_id = wpshop_products::create_variation($element_id, $attribute_to_set);
     }
     update_post_meta($element_id, '_wpshop_variation_defining', $attribute_defining_variation);
     return !empty($variation_id) ? $variation_id : 0;
 }