/home/arranoyd/magicraft/wp-content/plugins/vcparticlesbackground/vcparticlesbackground.php
<?php  
/* 
Plugin Name: VC Particles Background
Version: 1.2
Author: Boom-Apps
Author URI: http://codecanyon.net/user/boom-apps
Description: particle.js backgrounds for Visual Composer
*/  

class VC_Particles_Background {
	function backendElement() {
		vc_map( array(
            "name" => __("VC Particles Background", 'vc_extend'),
            "description" => __("Creative backgrounds!", 'vc_extend'),
            "base" => "vc_particles_background",
            "class" => "",
            "controls" => "full",
            "params" => array(
              array("save_always" => true, "type" => "textarea", "holder" => "div", "class" => "", "heading" => "Id - unique per page", "param_name" => "theid", "value" => "vcparticlesbackground_".time()."_".rand(100000,999999999) ),
              array("save_always" => true, "type" => "textarea",  "class" => "", "heading" => "Particles number", "param_name" => "particles_number_value", "value" => "80", "description" => "Integer (0-1000)" ),
              array("save_always" => true, "type" => "dropdown",  "class" => "", "heading" => "Particle type", "param_name" => "particles_shape_type", "value" => array("Circle","Image","Polygon","Star"), "description" => "" ),
              array("save_always" => true, "dependency" => array("element" => "particles_shape_type", "value" => array("Image")), "type" => "attach_image",  "class" => "", "heading" => "Particle image", "param_name" => "particles_shape_image_src", "value" => "", "description" => "For image particle type only!" ),
              array("save_always" => true, "dependency" => array("element" => "particles_shape_type", "value" => array("Circle","Polygon","Star")), "type" => "colorpicker",  "class" => "", "heading" => "Particle color", "param_name" => "particles_color", "value" => "000000", "description" => "Not for image particle type!" ),
              array("save_always" => true, "dependency" => array("element" => "particles_shape_type", "value" => array("Circle","Polygon","Star")), "type" => "colorpicker",  "class" => "", "heading" => "Particle stroke color", "param_name" => "particles_shape_stroke_color", "value" => "000000", "description" => "Not for image particle type!" ),
              array("save_always" => true, "dependency" => array("element" => "particles_shape_type", "value" => array("Circle","Polygon","Star")), "type" => "textarea",  "class" => "", "heading" => "Particle stroke width", "param_name" => "particles_shape_stroke_width", "value" => "0", "description" => "Not for image particle type! Integer (0-20)" ),
              array("save_always" => true, "dependency" => array("element" => "particles_shape_type", "value" => array("Polygon")), "type" => "textarea",  "class" => "", "heading" => "Polygon particle sides", "param_name" => "particles_shape_polygon_nb_sides", "value" => "5", "description" => "For polygon particle type only! Integer (3-20)" )
            )
        ) );
		

		vc_add_param("vc_particles_background", array( "save_always" => true, "type" => "textarea",  "group" => "Sizing", "class" => "", "heading" => "Particle size", "param_name" => "particles_size_value", "value" => "5", "description" => "Integer (0-500)" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "type" => "dropdown",  "group" => "Sizing", "class" => "", "heading" => "Randomize particle size", "param_name" => "particles_size_random", "value" => array("Yes" => "true", "No" => "false")));
		vc_add_param("vc_particles_background", array( "save_always" => true, "type" => "dropdown",  "group" => "Sizing", "class" => "", "heading" => "Animate particle size", "param_name" => "particles_size_anim_enable", "value" =>  array("No" => "false", "Yes" => "true") ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_size_anim_enable", "value" => array("true")), "type" => "textarea",  "group" => "Sizing", "class" => "", "heading" => "Animation speed", "param_name" => "particles_size_anim_speed", "value" => "40", "description" => "Integer (0-300)" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_size_anim_enable", "value" => array("true")), "type" => "textarea",  "group" => "Sizing", "class" => "", "heading" => "Minimum particle size", "param_name" => "particles_size_anim_size_min", "value" => "0.1", "description" => "Float ( > 0.1)" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_size_anim_enable", "value" => array("true")), "type" => "dropdown",  "group" => "Sizing", "class" => "", "heading" => "Sync animation", "param_name" => "particles_size_anim_sync", "value" => array("No" => "false", "Yes" => "true") ));

		vc_add_param("vc_particles_background", array( "save_always" => true, "type" => "textarea",  "group" => "Opacity", "class" => "", "heading" => "Particle opacity", "param_name" => "particles_opacity_value", "value" => "0.5", "description" => "Float (0.00 - 1.00)" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "type" => "dropdown",  "group" => "Opacity", "class" => "", "heading" => "Randomize opacity", "param_name" => "particles_opacity_random", "value" => array("Yes" => "true", "No" => "false") ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "type" => "dropdown",  "group" => "Opacity", "class" => "", "heading" => "Animate particle opacity", "param_name" => "particles_opacity_anim_enable", "value" => array("No" => "false", "Yes" => "true") ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_opacity_anim_enable", "value" => array("true")), "type" => "textarea",  "group" => "Opacity", "class" => "", "heading" => "Animation speed", "param_name" => "particles_opacity_anim_speed", "value" => "1", "description" => "Integer (0-10)" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_opacity_anim_enable", "value" => array("true")), "type" => "textarea",  "group" => "Opacity", "class" => "", "heading" => "Minimum particle opacity", "param_name" => "particles_opacity_anim_opacity_min", "value" => "0.1", "description" => "Float (0.00 - 1.00)" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_opacity_anim_enable", "value" => array("true")), "type" => "dropdown",  "group" => "Opacity", "class" => "", "heading" => "Sync animation", "param_name" => "particles_opacity_anim_sync", "value" => array("No" => "false", "Yes" => "true") ));

		vc_add_param("vc_particles_background", array( "save_always" => true, "type" => "dropdown",  "group" => "Movement", "class" => "", "heading" => "Enable movement", "param_name" => "particles_move_enabled", "value" => array("Yes" => "true", "No" => "false"), "description" => "" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_move_enabled", "value" => array("true")), "type" => "dropdown",  "group" => "Movement", "class" => "", "heading" => "Direction", "param_name" => "particles_move_direction", "value" => array("none","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left"), "description" => "" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_move_enabled", "value" => array("true")), "type" => "dropdown",  "group" => "Movement", "class" => "", "heading" => "Enable random particles", "param_name" => "particles_move_random", "value" => array("No" => "false", "Yes" => "true"), "description" => "" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_move_enabled", "value" => array("true")), "type" => "dropdown",  "group" => "Movement", "class" => "", "heading" => "Enable straight particles", "param_name" => "particles_move_straight", "value" => array("No" => "false", "Yes" => "true"), "description" => "" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_move_enabled", "value" => array("true")), "type" => "textarea",  "group" => "Movement", "class" => "", "heading" => "Speed", "param_name" => "particles_move_speed", "value" => '6', "description" => "integer (0-200)" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_move_enabled", "value" => array("true")), "type" => "dropdown",  "group" => "Movement", "class" => "", "heading" => "Boundary mode", "param_name" => "particles_move_out_mode", "value" => array("bounce","out"), "description" => "" ));
		
		vc_add_param("vc_particles_background", array( "save_always" => true, "type" => "dropdown",  "group" => "Line linking", "class" => "", "heading" => "Enable line linking", "param_name" => "particles_line_linked_enable_auto", "value" => array("Yes" => "true", "No" => "false"), "description" => "" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_line_linked_enable_auto", "value" => array("true")), "type" => "textarea",  "group" => "Line linking", "class" => "", "heading" => "Maximum distance", "param_name" => "particles_line_linked_distance", "value" => "150", "description" => "Integer (0-500)" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_line_linked_enable_auto", "value" => array("true")), "type" => "colorpicker",  "group" => "Line linking", "class" => "", "heading" => "Line color", "param_name" => "particles_line_linked_color", "value" => "000000", "description" => "" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_line_linked_enable_auto", "value" => array("true")), "type" => "textarea",  "group" => "Line linking", "class" => "", "heading" => "Line opacity", "param_name" => "particles_line_linked_opacity", "value" => "0.40", "description" => "Float (0.00 - 1.00)" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_line_linked_enable_auto", "value" => array("true")), "type" => "textarea",  "group" => "Line linking", "class" => "", "heading" => "Line width", "param_name" => "particles_line_linked_width", "value" => "1", "description" => "Integer (0-20)" ));
		
		
		vc_add_param("vc_particles_background", array( "save_always" => true, "type" => "dropdown",  "group" => "Interactivity", "class" => "", "heading" => "Enable?", "param_name" => "particles_interactivity_onhover_enable", "value" => array("No" => "false", "Yes" => "true"), "description" => "This will not work in IE/EDGE and will make rows content unclickable"));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_interactivity_onhover_enable", "value" => array("true")), "type" => "dropdown",  "group" => "Interactivity", "class" => "", "heading" => "Mode", "param_name" => "particles_interactivity_onhover_mode", "value" => array("grab","repulse"), "description" => "" ));
		
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_interactivity_onhover_mode", "value" => array("grab")), "type" => "textarea",  "group" => "Interactivity", "class" => "", "heading" => "Grab distance", "param_name" => "particles_interactivity_modes_grab_distance", "value" => "312", "description" => "Integer (0-1500)" ));
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_interactivity_onhover_mode", "value" => array("grab")), "type" => "textarea",  "group" => "Interactivity", "class" => "", "heading" => "Grab opacity", "param_name" => "particles_interactivity_modes_grab_line_linked_opacity", "value" => "0.7", "description" => "Float (0.00 - 1.00)" ));
		
		vc_add_param("vc_particles_background", array( "save_always" => true, "dependency" => array("element" => "particles_interactivity_onhover_mode", "value" => array("repulse")), "type" => "textarea",  "group" => "Interactivity", "class" => "", "heading" => "Repulse distance", "param_name" => "particles_interactivity_modes_repulse_distance", "value" => "312", "description" => "Integer (0-1500)" ));

	}
	function theShortcode($Atts, $Content = null) {
		wp_enqueue_script(  array( 'jquery','vc-particles-background','particles-js' ) );
		wp_enqueue_style(  array( 'vc-particles-background' ) );
		
		if (isset($Atts['particles_shape_image_src'])) {
			$image = wp_get_attachment_image_src($Atts['particles_shape_image_src'], 'full');
		
			$Atts['particles_shape_image_src'] = $image[0];
			$Atts['particles_shape_image_width'] = $image[1];
			$Atts['particles_shape_image_height'] = $image[2];

		}
		
		$Return = '<div id="'.$Atts['theid'].'" ';
		foreach ($Atts as $AttN => $AttV) {
			$Return .= 'data-'.str_replace("_","-",$AttN).'="'.$AttV.'" ';
		}
		$Return .= 'class="vc-particles-background" style="display:none;"></div>';
		
		return $Return;
	}
	
	
	function custom_css_classes_for_vc_row_and_vc_column( $class_string, $tag ) {
	  if ( $tag == 'vc_row' || $tag == 'vc_row_inner' ) {
		if (strpos($class_string,'boomapps_vcrow') == false) { $class_string = $class_string . " boomapps_vcrow"; } 
	  }
	  if ( $tag == 'vc_column' || $tag == 'vc_column_inner' ) {
		if (strpos($class_string,'boomapps_vccolumn') == false) { $class_string = $class_string . " boomapps_vccolumn"; }
	  }
	  return $class_string; 
	}
	
	function registerStuff() {
		add_shortcode( 'vc_particles_background', array($this,'theShortcode') );	
		$this->backendElement();		
	}
	function registerScripts() {
		 wp_register_script( 'vc-particles-background', plugins_url('vcparticlesbackground.js',__FILE__ ) );
		 wp_register_style( 'vc-particles-background', plugins_url('vcparticlesbackground.css',__FILE__ ) );
		 wp_register_script( 'particles-js', plugins_url('_3rdparty/particles.js/particles.min.js',__FILE__ ) );
		
	}
	function __construct() {
		add_action( 'wp_enqueue_scripts', array( $this, 'registerScripts') );
		add_action( 'init', array( $this, 'registerStuff') );	
		add_filter( 'vc_shortcodes_css_class', array($this,'custom_css_classes_for_vc_row_and_vc_column'), 10, 2 );
	}
}


/* Let's go! */
if (function_exists('vc_map')) {
	new VC_Particles_Background;
}