class UsersController < ApplicationController
  require 'digest/md5'
  require 'securerandom'
  require 'pixways'

  include Pixways

  def new
    @partial = Server.itself?(PTREF_SERVER_NAME) ?  "new_pt" : "new_pixtech"
    @pixtech_stocks = Provider.joins(:pixtech).where(pixteches: {name: session[:pixtech]}, providers: {provider_type_id: 1}).pluck('providers.name,providers.string_key')
    @use_numadh = Pixways.get_pixtech_param_value(session[:pixtech],'use_numadh')
    render layout: 'simple'
  end

  def show
    @user = User.find(params[:id])

    respond_to do |format|
      format.xml { render xml: @user }
    end
  end

  def mdp_upload
    AdminMailer.send_msg("Alerte : mot de passe demandé : #{current_user.email}").deliver
  end

  # création user PixTech / PixTrakk (ptref1, ptref2, pixtrakk) depuis l'interface
  def create
    @use_numadh = Pixways.get_pixtech_param_value(session[:pixtech],'use_numadh')
    pixtech = params[:pixtech] ? true : false
    photog = params[:photog] ? true : false
    agence = params[:agence] ? true : false
    collectif = params[:collectif] ? true : false
    prospect = params[:prospect] ? true : false
    avocat = params[:avocat] ? true : false
    papier = params[:papier] ? true : false
    pmail = params[:pmail] ? true : false
    web = params[:web] ? true : false
    wmail = params[:wmail] ? true : false
    wdata = params[:wdata] ? true : false
    brand = params[:brand] ? true : false
    bmail = params[:bmail] ? true : false
    bdata = params[:bdata] ? true : false
    pdata = params[:pdata] ? true : false
    gesphot = params[:gesphot] ? true : false
    stock = params[:stocks]
    first_name = params[:prenom].strip
    last_name = params[:nom].strip
    societe = params[:societe]
    email = params[:email]
    phone = params[:phone]
    aemail = params[:aemail]
    adr = params[:adr]
    pays = params[:pays]
    login = params[:login]
    mdp = params[:mdp]
    sites = params[:sites]
    maxi = params[:maxi]
    num_adh = @use_numadh=='true'? params[:num_adh] : ''
    if avocat
      dpara = params[:dpara] ? true : false
      vars = {}
      vars["societe"] = societe
      vars["adr"] = adr
      vars["pays"] = pays
      vars["fn"] = first_name
      vars["ln"] = last_name
      vars["email"] = email
      vars["phone"] = phone
      vars["login"] = login
      vars["token"] = User.get_token
      vars["mdp"] = mdp
      vars["avocat"] = avocat
      vars["dpara"] = dpara
    else
      sk = photog ? params[:sk] : params[:s_k]
      if sk.blank?
        if pixtech
          if session[:pixtech] == 'saif'
            prefix_pixtech = 'Saifimages'
          else
            prefix_pixtech = session[:pixtech]
          end
          num_adh = (Provider.maximum(:id)+1).to_s if num_adh.blank?
          sk = [prefix_pixtech,stock,simplifize(last_name.parameterize.capitalize),simplifize(num_adh.parameterize)].compact.uniq(&:downcase).join('_').capitalize
          login = "#{simplifize(last_name.parameterize)}_#{simplifize(num_adh.parameterize)}"
        else
          id = File.readlines(Rails.root+"public/dev/ind_sk.txt").first.chomp
          sk = "#{last_name.parameterize.upcase}_#{id}"
          idr = id.to_i + 1
          open(Rails.root+"public/dev/ind_sk.txt", 'w') do |f|
            f.puts "#{idr.to_s}"
          end
        end
      end
      login = login.blank? ? (agence ? "#{sk}_#{last_name}" : sk) : login
      login = login.downcase
      prov = Provider.find_by_string_key(sk)
      full_name = pixtech ? "#{last_name.mb_chars.upcase.to_s} #{first_name}" : "#{first_name} #{last_name}"
      pp_name = pixtech ? "#{session[:pixtech].capitalize} #{full_name}" : "#{full_name}"
      societe = full_name if societe.blank?
      pixtech_copyright_rule = Provider.find_by(string_key: stock).copyright_rule rescue nil
      cop_rule = photog ? full_name : (pixtech ? (pixtech_copyright_rule.nil? ? "\#{:rights}" : pixtech_copyright_rule) : "\#{:creator}")
      prov_name = photog ? full_name : societe
      if prov.nil?
        if web
          pk = 1
          nb_pk = 40
          ir_web = 1
        else
          pk = 0
          nb_pk = 0
          ir_web = 0
        end
        ir_print = papier ? 1 : 0
        if prospect
          pk = 1
          nb_pk = 200
          ir_web = 0
          ir_print = 0
        end
        begin
          if pixtech
            pixtechid = Pixtech.find_by(name: session[:pixtech]).id rescue nil
            prov = Provider.create_provider(prov_name, pp_name, sk, cop_rule, stock, Pixways.get_pixtech_param_value(session[:pixtech],'use_numadh')=='true'?num_adh:'', pixtechid, 2, 1, pk, nb_pk, ir_web, ir_print)
          else
            prov = Provider.create_provider(prov_name, pp_name, sk, cop_rule, '','', nil, 1, 0,pk, nb_pk, ir_web, ir_print)
          end
        rescue => e
          logger.error"Erreur lors de la création du provider : #{e.inspect} – string_key #{sk}"
          AdminMailer.send_msg(I18n.t('new_creator_account', creator_word: session[:creator_word]),"Erreur lors de la création du provider : #{e.inspect} – string_key #{sk}").deliver_now
          flash[:error] = "Erreur lors de la création"
          redirect_to action: 'new'
          return
        end
        ftp_pwd = ""
        if photog
          prov_type = "photographer"
          ftp_pwd = SecureRandom.random_number(36**8).to_s(36).rjust(8, "0")
          prov.update_attributes(provider_type: prov_type, sites_photographer: sites, sites_photographers_max_images: maxi)
          ftp_username = sk
        elsif agence
          ftp_pwd = SecureRandom.random_number(36**8).to_s(36).rjust(8, "0")
          prov_type = "agency"
          prov.update_attributes(provider_type: prov_type, sites_photographer: sites, sites_photographers_max_images: maxi)
          ftp_username = sk
        elsif pixtech
          ftp_pwd = SecureRandom.random_number(36**8).to_s(36).rjust(8, "0")
          ftp_username = ([session[:pixtech],stock,login].uniq(&:downcase).join('_')).downcase
        else
          photog = true
          prov_type = "photographer_prospect"
          prov.update_attributes(provider_type: prov_type, sites_photographer: sites, sites_photographers_max_images: maxi)
          ftp_username = sk
        end
        begin
          ms_init(sk, ftp_username, ftp_pwd, stock, pixtech)
        rescue => e
          prov.destroy
          logger.error"Erreur lors de la création du compte FTP : #{e.inspect} – ftp_username '#{ftp_username}'"
          AdminMailer.send_msg(I18n.t('new_creator_account', creator_word: session[:creator_word]),"Erreur lors de la création du compte FTP : #{e.inspect} – ftp_username '#{ftp_username}'").deliver_now
          flash[:error] = "Erreur lors de la création"
          redirect_to action: 'new'
          return
        end
      else
        logger.error"Erreur lors de la création du provider : #{e.inspect} – string_key #{sk}"
        AdminMailer.send_msg(I18n.t('new_creator_account', creator_word: session[:creator_word]),"Erreur lors de la création du provider : #{e.inspect} – string_key #{sk}").deliver_now
        flash[:error] = "Erreur lors de la création : l'auteur existe déjà"
        redirect_to action: 'new'
        return
      end

      # création provider contact
      begin
        if pixtech
          ProviderContact.create(first_name: first_name, last_name: last_name.mb_chars.upcase.to_s, email: email, phone: phone, provider_id: prov.id, main: 1, receive_errors: 1)
          ProviderContact.create(email: Pixways.get_pixtech_param_value(session[:pixtech],'email_contact_receive_controls'), provider_id: prov.id, receive_errors: 1) unless Pixways.get_pixtech_param_value(session[:pixtech],'email_contact_receive_controls').blank?
        else
          ProviderContact.create(first_name: first_name, last_name: last_name, email: email, phone: phone, provider_id: prov.id)
        end
      rescue => e
        AdminMailer.send_msg(I18n.t('new_creator_account', creator_word: session[:creator_word]),"Erreur lors de la création du provider contact : #{e.inspect} – provider #{sk}}").deliver_now
        prov.destroy
        flash[:error] = "Erreur lors de la création"
        redirect_to action: 'new'
        return
      end

      # Restriction group
      tpgname = photog ? "ph_#{sk}" : pixtech ? "0_#{prov.pixtech.name.capitalize}_#{login}" : sk
      tpgn = TitleProviderGroupName.find_by(name: tpgname)
      if tpgn.nil?
        begin
          tpgn = TitleProviderGroupName.create_tpgn(tpgname)
        rescue => e
          AdminMailer.send_msg(I18n.t('new_creator_account', creator_word: session[:creator_word]),"Erreur lors de la création du title_provider_group_name : #{e.inspect} – provider #{sk}}").deliver_now
          prov.destroy
          flash[:error] = "Erreur lors de la création"
          redirect_to action: 'new'
          return
        end
        bd_id = PermissionLabel.find_by_label('BD').id
        hd_id = PermissionLabel.find_by_label('HD').id
        pe_id = PermissionLabel.find_by_label('PE').id
        tpg = TitleProviderGroup.create(title_provider_group_name_id: tpgn.id, provider_id: prov.id)
        Authorization.create(permission_label_id: bd_id, title_provider_group_id: tpg.id)
        Authorization.create(permission_label_id: hd_id, title_provider_group_id: tpg.id)
        Authorization.create(permission_label_id: pe_id, title_provider_group_id: tpg.id)
        if pixtech
          pixtech_stocks_id = Provider.where(provider_type_id: 1, pixtech_id: pixtechid).pluck(:id)
          pixtech_stocks_id.each do |stock_id|
            tpg = TitleProviderGroup.create(title_provider_group_name_id: tpgn.id, provider_id: stock_id)
            Authorization.create(permission_label_id: pe_id, title_provider_group_id: tpg.id)
          end
        end
        idsg = TitleProviderGroupName.find_by_name('toutes').id
        tpg = TitleProviderGroup.create(title_provider_group_name_id: idsg, provider_id: prov.id)
        Authorization.create(permission_label_id: bd_id, title_provider_group_id: tpg.id)
        Authorization.create(permission_label_id: hd_id, title_provider_group_id: tpg.id)
        Authorization.create(permission_label_id: pe_id, title_provider_group_id: tpg.id)
        if agence
          idsg = TitleProviderGroupName.find_by_name('agences').id
        elsif pixtech
          idsg = TitleProviderGroupName.find_by_name(Pixways.get_pixtech_param_value(session[:pixtech],'admin_group_name')).id
        else
          idsg = TitleProviderGroupName.find_by_name('photographes').id
        end
        tpg = TitleProviderGroup.create(title_provider_group_name_id: idsg, provider_id: prov.id)
        Authorization.create(permission_label_id: bd_id, title_provider_group_id: tpg.id)
        Authorization.create(permission_label_id: hd_id, title_provider_group_id: tpg.id)
        Authorization.create(permission_label_id: pe_id, title_provider_group_id: tpg.id)
      else
        # Pixtech author group already exists so it means author already belongs to another stock, so new stock will be added to already existing restriction group
        bd_id = PermissionLabel.find_by_label('BD').id
        hd_id = PermissionLabel.find_by_label('HD').id
        pe_id = PermissionLabel.find_by_label('PE').id
        tpg = TitleProviderGroup.create(title_provider_group_name_id: tpgn.id, provider_id: prov.id)
        Authorization.create(permission_label_id: bd_id, title_provider_group_id: tpg.id)
        Authorization.create(permission_label_id: hd_id, title_provider_group_id: tpg.id)
        Authorization.create(permission_label_id: pe_id, title_provider_group_id: tpg.id)
        pixtech_stocks_id = Provider.where(provider_type_id: 1, pixtech_id: pixtechid).pluck(:id)
        pixtech_stocks_id.each do |stock_id|
          tpg = TitleProviderGroup.create(title_provider_group_name_id: tpgn.id, provider_id: stock_id)
          Authorization.create(permission_label_id: pe_id, title_provider_group_id: tpg.id)
        end
        idsg = TitleProviderGroupName.find_by_name('toutes').id
        tpg = TitleProviderGroup.create(title_provider_group_name_id: idsg, provider_id: prov.id)
        Authorization.create(permission_label_id: bd_id, title_provider_group_id: tpg.id)
        Authorization.create(permission_label_id: hd_id, title_provider_group_id: tpg.id)
        Authorization.create(permission_label_id: pe_id, title_provider_group_id: tpg.id)
        idsg = TitleProviderGroupName.find_by_name(Pixways.get_pixtech_param_value(session[:pixtech],'admin_group_name')).id
        tpg = TitleProviderGroup.create(title_provider_group_name_id: idsg, provider_id: prov.id)
        Authorization.create(permission_label_id: bd_id, title_provider_group_id: tpg.id)
        Authorization.create(permission_label_id: hd_id, title_provider_group_id: tpg.id)
        Authorization.create(permission_label_id: pe_id, title_provider_group_id: tpg.id)
      end

      # Title
      title_name = pixtech ? "#{prov.pixtech.name.capitalize} #{last_name.mb_chars.upcase.to_s} #{first_name}" : tpgname
      t = Title.find_by(name: title_name)
      if t.nil?
        begin
          t = Title.create_title(title_name, tpgn.id)
        rescue => e
          AdminMailer.send_msg(I18n.t('new_creator_account', creator_word: session[:creator_word]),"Erreur lors de la création du titre : #{e.inspect} – title #{title_name}}").deliver_now
          prov.destroy
          tpgn.destroy
          flash[:error] = "Erreur création Title"
          redirect_to action: 'new'
          return
        end
      end

      # crawler_init(full_name)

      # User
      u = User.find_by(login: login)
      if u.nil?
        begin
          if pixtech
            role_mask = roles_mask_value(params[:user_role])
            # si champ non ajouté au formulaire - récupration dans la table pixtech_params
            #role_mask = Pixways.get_pixtech_param_value(session[:pixtech],'default_user_role').blank? ? roles_mask_value('photographer') : roles_mask_value(Pixways.get_pixtech_param_value(session[:pixtech],'default_user_role'))
          else
            role_mask = roles_mask_value('provider_admin')
          end
          u = User.create_user(login, first_name, last_name.mb_chars.upcase.to_s, email, mdp, t.id, role_mask)
          if pixtech
            #set pagination to true and add orange border color for author button
            bcp = {}
            border_color_prov = u.setting.border_color_provider
            bcp[prov.id.to_s] = '#ff8b00'
            border_color_prov.merge!(bcp)
            u.setting.update(pagination: true, border_color_provider: border_color_prov)
          end
        rescue => e
          AdminMailer.send_msg(I18n.t('new_creator_account', creator_word: session[:creator_word]),"Erreur lors de la création de l'utilisateur '#{login}' : #{e.message}\n#{e.backtrace.join("\n")}").deliver_now
          prov.destroy
          tpgn.destroy
          t.destroy
          u.destroy
          flash[:error] = "Erreur création User"
          redirect_to action: 'new'
          return
        end
      end

      # Replication
      unless pixtech
        ptref_json_user(u, sk, mdp, photog, prospect, agence, sites, maxi) if Server.itself_production?
      end
      vars = {}
      vars["societe"] = societe
      vars["adr"] = adr
      vars["pays"] = pays
      vars["fn"] = first_name
      vars["ln"] = last_name
      vars["email"] = email
      vars["phone"] = phone
      vars["aemail"] = aemail
      vars["login"] = login
      vars["sk"] = sk
      vars["mdp"] = mdp
      vars["agence"] = agence
      vars["photog"] = photog
      vars["prospect"] = prospect
      vars["pixtech"] = pixtech
      vars["collectif"] = collectif
      vars["papier"] = papier
      vars["pmail"] = pmail
      vars["pdata"] = pdata
      vars["gesphot"] = gesphot
      vars["web"] = web
      vars["wmail"] = wmail
      vars["wdata"] = wdata
      vars["brand"] = brand
      vars["bmail"] = bmail
      vars["bdata"] = bdata
      vars["sites"] = sites
      vars["maxi"] = maxi
      vars["ftp_pwd"] = ftp_pwd
      vars["ftp_username"] = ftp_username
      vars['stock'] = prov.get_stock_name
      vars['num_adh'] = num_adh
      vars['multistock'] = params[:multistock]
    end

    if pixtech
      #PP2 user replication
      begin
        pp2_replication('pixpalace2',u, mdp,"#{session[:pixtech].capitalize}Auteurs")
      rescue => e
        email_err("#{e.message}\n#{e.backtrace.join('\n')}", "Erreur lors de la replication PP2 du user #{u.login}")
      end
    end

    # provider replication on tests and backup servers
    unless Server.itself?(TEST_SERVER_NAME)
      res_replic = provider_replication_json('create', sk, prov_name, pp_name, cop_rule, stock, num_adh, session[:pixtech], 2, 1)
      unless res_replic == true
        email_err("Erreur lors de la replication du provider sur les serveurs tests : string_key '#{sk}'", "")
      end
    end

    UserMailer.new_author(vars,session[:pixtech]).deliver_now
    flash[:notice] = "#{I18n.t(session[:creator_word])} #{last_name.mb_chars.upcase.to_s} #{first_name} créé"
    redirect_to action: 'new'
    # else Server.itself_production?
    #   json_vars = vars.to_json
    #   json_filename = "pt_create_user_"+Time.now.strftime("%Y%m%d-%H%M%S")+".json"
    #   File.open("public/tmp/"+json_filename,'wb') do |f|
    #     f.write(json_vars)
    #   end
    #   send_scp_file("/tmp/#{json_filename}", "photographes.pixtrakk.com", "pixtrakk", "iesh7ahr","photographes.pixtrakk.com/public/ptref/#{json_filename}")
    #   AdminMailer.pt_user(vars).deliver_now
    #   flash.now[:notice] = "User #{login} créé"
    # end
  end

  def pre_check
    use_numadh = Pixways.get_pixtech_param_value(session[:pixtech],'use_numadh')
    name = "#{params[:last_name].mb_chars.upcase.strip} #{params[:first_name].strip}"
    pixtech_id = Pixtech.find_by(name: session[:pixtech]).id
    prov_with_name = Provider.find_by(name: name, provider_type_id: 2, pixtech_id: pixtech_id)
    prov_with_numadh = Provider.find_by(description: params[:num_adh], provider_type_id: 2, pixtech_id: pixtech_id) if use_numadh && !params[:num_adh].blank?
    check = 0
    message = ''

    # Check if a provider with the same name, PixTech and stock already exists
    if !prov_with_name.nil? && prov_with_name.pixtech.name == session[:pixtech] && prov_with_name.pp_string_key == params[:stock]
      if use_numadh && !params[:num_adh].blank?
        if prov_with_name.description == params[:num_adh]
          check = 1
          message = "Ce compte #{I18n.t(session[:creator_word]).downcase} existe déjà."
        else
          check = 1
          message = "Ce compte #{I18n.t(session[:creator_word]).downcase} existe déjà avec un numéro d'adhérent différent : #{prov_with_name.description}."
        end
      else
        check = 1
        message = "Ce compte #{I18n.t(session[:creator_word]).downcase} existe déjà."
      end
      # Check if a provider with the same name, PixTech but different stock exists
    elsif !prov_with_name.nil? && prov_with_name.pixtech.name == session[:pixtech] && prov_with_name.pp_string_key != params[:stock]
      unless params[:multistock] == 'true'
        check = 2
        message = "Un compte #{I18n.t(session[:creator_word]).downcase} existe déjà pour le fonds #{prov_with_name.get_stock_name}.\nCochez la case dédiée si vous voulez l'ajouter à un autre fonds."
      end
      # Check if a provider with the same number of adhesion exists
    elsif prov_with_name.nil? && !prov_with_numadh.nil?
      check = 3
      message = "Un compte #{I18n.t(session[:creator_word]).downcase} différent existe déjà avec ce numéro d'adhérent : #{prov_with_numadh.name}."
    end

    verif_result = {check: check, message: message}.to_json
    respond_to do |format|
      format.json { render json: verif_result }
    end
  end

  def ptref_json_user(u, sk, mdp, photog, prospect, agence, sites, maxi)
    vars = {}
    vars["photog"] = photog ? 1 : 0
    vars["prospect"] = prospect ? 1 : 0
    vars["agence"] = agence ? 1 : 0
    vars["fn"] = u.first_name
    vars["ln"] = u.last_name
    vars["email"] = u.email
    vars["login"] = u.login
    vars["token"] = u.authentication_token
    vars["sk"] = sk
    vars["mdp"] = mdp
    vars["sites"] = sites
    vars["max_images"] = maxi
    json_vars = vars.to_json
    json_filename = "ptref_create_user_"+Time.now.strftime("%Y%m%d-%H%M%S")+".json"
    File.open("/tmp/"+json_filename,'wb') do |f|
      f.write(json_vars)
    end
    send_scp_file("/tmp/#{json_filename}", "94.23.203.215", "pix", "pa05la03","/var/www/pix/current/public/dev/#{json_filename}")
  end

  def pp2_replication(database_config_name,cur_user,pwd,title)
    cur_title= Title.find_by(name: title)
    begin
      config_db_pp2 = Rails.configuration.database_configuration[database_config_name]
      pp2_client = Mysql2::Client.new(:host => config_db_pp2["host"],:database => config_db_pp2["database"],:username => config_db_pp2["username"], :password => config_db_pp2["password"])
    rescue Mysql2::Error => e
      logger.error Time.now().strftime("%Y-%m-%d %H:%M:%S ")+"[ERROR] #{e.message} on "+config_db_pp2["host"]
      flash[:notice] =  'Echec de la replication sur PixPalace2'
      return
    end
    #Get id of country "France"
    begin
      pp2_country_id=pp2_client.query("select id from countries where name='France'").first['id']
    rescue Mysql2::Error => e
      logger.error Time.now().strftime("%Y-%m-%d %H:%M:%S ")+"[ERROR] #{e.message} on "+config_db_pp2["host"]
    rescue
      pp2_country_id=1
      logger.warn 'Warning : "France" country does not exist, title country will be 1'
    end
    #id of group "tout_titre"
    begin
      pp2_group_id=pp2_client.query("select id from title_provider_group_names where name='tout_titre'").first['id']
    rescue Mysql2::Error => e
      logger.error Time.now().strftime("%Y-%m-%d %H:%M:%S ")+"[ERROR] #{e.message} on "+config_db_pp2["host"]
    rescue
      pp2_group_id=1
      logger.warn 'Warning : "tout_titre" group does not exist, title group id will be 1'
    end
    #id of current server
    begin
      pp2_server_id=pp2_client.query("select id from servers where is_self").first['id']
    rescue Mysql2::Error => e
      logger.error Time.now().strftime("%Y-%m-%d %H:%M:%S ")+"[ERROR] #{e.message} on "+config_db_pp2["host"]
    rescue
      pp2_server_id=1
      logger.warn 'Warning : there is no current server, server id will be 1'
    end
    #Create title if it doesn't exist, otherwise update it
    begin
      pp2_title_id=pp2_client.query("select id from titles where name='#{cur_title.name.gsub(/'/,"\\\\'")}'").first['id']
      escaped_query="update titles set name=\"#{cur_title.name}\",hide_unauthorized_providers=#{cur_title.hide_unauthorized_providers},dpi=#{cur_title.dpi},flow_path=\"#{cur_title.flow_path}\",server_id=#{pp2_server_id},country_id=#{pp2_country_id},updated_at=\"#{cur_title.updated_at.strftime("%Y-%m-%d %H:%M:%S")}\",first_name=\"#{cur_title.first_name}\",last_name=\"#{cur_title.last_name}\",address=\"#{cur_title.address}\",zip_code=\"#{cur_title.zip_code}\",city=\"#{cur_title.city}\",phone=\"#{cur_title.phone}\",email=\"#{cur_title.email}\",comment=\"#{cur_title.comment}\",visible=#{cur_title.visible},titles.group=\"#{cur_title.group}\",title_type=\"#{cur_title.title_type}\",visible_name=\"#{cur_title.visible_name}\" where id =#{pp2_title_id};".gsub(/'/,"\\\\'")
      pp2_client.query(escaped_query)
    rescue Mysql2::Error => e
      logger.error Time.now().strftime("%Y-%m-%d %H:%M:%S ")+"[ERROR] #{e.message} on "+config_db_pp2["host"]
    rescue
      escaped_query="insert into titles (name,hide_unauthorized_providers,dpi,flow_path,title_provider_group_name_id,server_id,country_id,created_at,updated_at,first_name,last_name,address,zip_code,city,phone,email,comment,visible,titles.group,title_type,visible_name) values (\"#{cur_title.name}\",#{cur_title.hide_unauthorized_providers},#{cur_title.dpi},\"#{cur_title.flow_path}\",#{pp2_group_id},#{pp2_server_id},#{pp2_country_id},\"#{cur_title.created_at.strftime("%Y-%m-%d %H:%M:%S")}\",\"#{cur_title.updated_at.strftime("%Y-%m-%d %H:%M:%S")}\",\"#{cur_title.first_name}\",\"#{cur_title.last_name}\",\"#{cur_title.address}\",\"#{cur_title.zip_code}\",\"#{cur_title.city}\",\"#{cur_title.phone}\",\"#{cur_title.email}\",\"#{cur_title.comment}\",#{cur_title.visible},\"#{cur_title.group}\",\"#{cur_title.title_type}\",\"#{cur_title.visible_name}\");".gsub(/'/,"\\\\'")
      pp2_client.query(escaped_query)
      pp2_title_id = pp2_client.query("select id from titles where name='#{cur_title.name.gsub(/'/,"\\\\'")}'").first['id']
    end
    #Create user if it doesn't exist, otherwise update it
    begin
      pp2_user_id=pp2_client.query("select id from users where login='#{cur_user.login}'").first['id']
      escaped_query="update users set first_name=\"#{cur_user.first_name}\",last_name=\"#{cur_user.last_name}\",email=\"#{cur_user.email}\",phone=\"#{cur_user.phone}\",login=\"#{cur_user.login}\",crypted_password=\"#{cur_user.crypted_password}\",salt=\"#{cur_user.salt}\",persistence_token=\"#{cur_user.persistence_token}\",perishable_token=\"#{cur_user.perishable_token}\",updated_at=\"#{cur_user.updated_at.strftime("%Y-%m-%d %H:%M:%S")}\",password_updated_at=\"#{cur_user.password_updated_at.strftime("%Y-%m-%d %H:%M:%S")}\",roles_mask=\"#{cur_user.roles_mask}\",status=\"#{cur_user.status}\",title_id=#{pp2_title_id} where id=#{pp2_user_id};".gsub(/'/,"\\\\'")
      pp2_client.query(escaped_query)
    rescue Mysql2::Error => e
      logger.error Time.now().strftime("%Y-%m-%d %H:%M:%S ")+"[ERROR] #{e.message} on "+config_db_pp2["host"]
    rescue
      escaped_query="insert into users (first_name,last_name,email,phone,login,crypted_password,salt,persistence_token,perishable_token,created_at,updated_at,password_updated_at,roles_mask,status,title_id) values (\"#{cur_user.first_name}\",\"#{cur_user.last_name}\",\"#{cur_user.email}\",\"#{cur_user.phone}\",\"#{cur_user.login}\",\"#{cur_user.crypted_password}\",\"#{cur_user.salt}\",\"#{cur_user.persistence_token}\",\"#{cur_user.perishable_token}\",\"#{cur_user.created_at.strftime("%Y-%m-%d %H:%M:%S")}\",\"#{cur_user.updated_at.strftime("%Y-%m-%d %H:%M:%S")}\",\"#{cur_user.password_updated_at.strftime("%Y-%m-%d %H:%M:%S")}\",\"#{cur_user.roles_mask}\",\"#{cur_user.status}\",#{pp2_title_id});".gsub(/'/,"\\\\'")
      pp2_client.query(escaped_query)
      pp2_user_id=pp2_client.query("select id from users where login='#{cur_user.login}'").first['id']
    end
    user_pwd=pwd
    unless user_pwd.blank?
      #Update pixlogs table (for automatic login from PP to PP+)
      begin
        pp2_client.query("select company from pixlogs where username='#{cur_user.login}'").first['company']
        pp2_client.query("update pixlogs set company='#{user_pwd}' where username='#{cur_user.login}'")
      rescue Mysql2::Error => e
        logger.error Time.now().strftime("%Y-%m-%d %H:%M:%S ")+"[ERROR] #{e.message} on "+config_db_pp2["host"]
      rescue
        pp2_client.query("insert into pixlogs (username,company) values ('#{cur_user.login}','#{user_pwd}')")
      end
    end
    #Create settings if they doesn't exist
    begin
      pp2_client.query("select id from settings where user_id=#{pp2_user_id}").first['id']
    rescue Mysql2::Error => e
      logger.error Time.now().strftime("%Y-%m-%d %H:%M:%S ")+"[ERROR] #{e.message} on "+config_db_pp2["host"]
    rescue
      cur_user.setting = Setting.create(current_user.passed_settings) if cur_user.setting.blank?
      pp2_user_display_params="---\nbackground_color: ! '#{cur_user.setting.display_params['background_color']}'\nfont_color: ! '#{cur_user.setting.display_params['font_color']}'\nprevisualisation: '#{cur_user.setting.display_params['previsualisation']}'\ndisplay_text: '#{cur_user.setting.display_params['display_text']}'\n"
      pp2_user_border_color_provider="--- {}\n"
      escaped_query="insert into settings (language,preferential_corpus,display_params,border_color_provider,user_id,created_at,updated_at,time_zone,default_per_page,default_since,default_sort) values (\"#{cur_user.setting.language}\",\"#{cur_user.setting.preferential_corpus}\",\"#{pp2_user_display_params}\",\"#{pp2_user_border_color_provider}\",#{pp2_user_id},\"#{cur_user.setting.created_at.strftime("%Y-%m-%d %H:%M:%S")}\",\"#{cur_user.setting.updated_at.strftime("%Y-%m-%d %H:%M:%S")}\",\"#{cur_user.setting.time_zone}\",#{cur_user.setting.default_per_page},\"#{cur_user.setting.default_since}\",\"#{cur_user.setting.default_sort}\");".gsub(/'/,"\\\\'")
      pp2_client.query(escaped_query)
    end
    pp2_client.close
  end

end