Exemplo n.º 1
0
        public string CreateAccountWithFacebookLogin(User fb_usr)
        {
            if (!repository.IsDomainAvailable(mastersubdomain.name))
            {
                return("The selected site name is not available. Please choose another name.");
            }

            // check affiliate ID
            if (!string.IsNullOrEmpty(affiliate))
            {
                var referrer = repository.GetSubDomains().SingleOrDefault(x => x.affiliateID == affiliate);
                if (referrer == null)
                {
                    Syslog.Write("Invalid Affiliate ID: " + affiliate);
                    return("Invalid Affiliate ID");
                }
                mastersubdomain.affiliateReferrer = referrer.id;

                // valid id so give  60 days
                mastersubdomain.trialExpiry = DateTime.UtcNow.AddDays(60);
            }

            usr = new user
            {
                role                 = (int)UserRole.ADMIN,
                viewid               = Utility.GetRandomString(),
                permissions          = (int)UserPermission.ADMIN,
                FBID                 = fb_usr.id,
                email                = email ?? "",
                externalProfileUrl   = fb_usr.link,
                firstName            = fb_usr.first_name,
                lastName             = fb_usr.last_name,
                gender               = fb_usr.gender,
                externalProfilePhoto = string.Format("{0}{1}/picture?type=large", GeneralConstants.FACEBOOK_GRAPH_HOST, fb_usr.id)
            };

            repository.AddMasterSubdomain(mastersubdomain);
            // hash is created later

            // create organisation first
            mastersubdomain.organisation = new organisation
            {
                subdomain = mastersubdomain.id,
                name      = fb_usr.name
            };

            var addressHandler = new AddressHandler(mastersubdomain.organisation, repository);

            addressHandler.CopyShippingAndBillingAddressFromOrgAddress("", "");

            CreateDataStructures();

            return("");
        }
Exemplo n.º 2
0
        public ActionResult SetAddressAndBillingForContactsWIthout()
        {
            var builder = new StringBuilder();

            foreach (var org in db.organisations)
            {
                var usr = org.users.FirstOrDefault();
                if (usr == null)
                {
                    builder.AppendFormat("{0}{1}", org.id, Environment.NewLine);
                    continue;
                }

                var addressHandler = new AddressHandler(org, repository);
                addressHandler.CopyShippingAndBillingAddressFromOrgAddress(usr.firstName ?? "", usr.lastName ?? "");
            }

            db.SubmitChanges();

            return(Content(builder.ToString()));
        }
Exemplo n.º 3
0
        public ActionResult Setup(string timezone, string currency, string organisation, string country,
                                  string address, string city, string citySelected, string postcode, string phone, string tos,
                                  string states_canadian, string states_other, string states_us)
        {
            if (sessionid == null)
            {
                return(RedirectToLogin());
            }

            try
            {
                if (!string.IsNullOrEmpty(timezone) &&
                    !string.IsNullOrEmpty(organisation) &&
                    !string.IsNullOrEmpty(country) &&
                    !string.IsNullOrEmpty(address) &&
                    (!string.IsNullOrEmpty(city) || !string.IsNullOrEmpty(citySelected)) &&
                    !string.IsNullOrEmpty(postcode) &&
                    !string.IsNullOrEmpty(tos))
                {
                    long?finalCity = null;
                    if (!string.IsNullOrEmpty(citySelected))
                    {
                        finalCity = long.Parse(citySelected);
                    }
                    else if (!string.IsNullOrEmpty(city))
                    {
                        finalCity = repository.AddCity(city).id;
                    }

                    var usr = repository.GetUserById(sessionid.Value);
                    if (usr == null)
                    {
                        throw new Exception("User not found");
                    }

                    // add organisation
                    var org = usr.organisation1;
                    org.name     = organisation;
                    org.address  = address;
                    org.city     = finalCity;
                    org.postcode = postcode;
                    org.phone    = phone;
                    org.country  = int.Parse(country);
                    if (string.IsNullOrEmpty(currency))
                    {
                        currency = "432";
                    }
                    org.MASTERsubdomain.currency = int.Parse(currency);

                    if (!string.IsNullOrEmpty(country) && country == "185" && !string.IsNullOrEmpty(states_us))
                    {
                        org.state = states_us;
                    }
                    else if (!string.IsNullOrEmpty(country) && country == "32" && !string.IsNullOrEmpty(states_canadian))
                    {
                        org.state = states_canadian;
                    }
                    else
                    {
                        org.state = states_other;
                    }

                    // update shop name
                    org.MASTERsubdomain.storeName = org.name;

                    // update user information
                    usr.timezone = timezone;

                    // update shipping and billing addresses
                    var addressHandler = new AddressHandler(org, repository);
                    addressHandler.CopyShippingAndBillingAddressFromOrgAddress("", "");   // first name and last name is null here

                    repository.Save();

                    var homeUrl = org.MASTERsubdomain.ToHostName().ToDomainUrl();
                    return(Json(homeUrl.ToJsonOKData()));
                }

                #region find out which field is 'missing'
                var missingfields = new List <string>();
                if (string.IsNullOrEmpty(timezone))
                {
                    missingfields.Add("timezone");
                }
                if (string.IsNullOrEmpty(currency))
                {
                    missingfields.Add("currency");
                }
                if (string.IsNullOrEmpty(organisation))
                {
                    missingfields.Add("organisation");
                }
                if (string.IsNullOrEmpty(country))
                {
                    missingfields.Add("country");
                }
                if (string.IsNullOrEmpty(address))
                {
                    missingfields.Add("address");
                }
                if (string.IsNullOrEmpty(city) && string.IsNullOrEmpty(citySelected))
                {
                    missingfields.Add("city");
                }
                if (string.IsNullOrEmpty(postcode))
                {
                    missingfields.Add("postcode");
                }
                if (string.IsNullOrEmpty(phone))
                {
                    missingfields.Add("phone");
                }
                if (string.IsNullOrEmpty(tos))
                {
                    missingfields.Add("tos");
                }
                #endregion
                return(SendJsonErrorResponse("Missing fields: " + string.Join(",", missingfields)));
            }
            catch (Exception ex)
            {
                return(SendJsonErrorResponse(ex));
            }
        }
Exemplo n.º 4
0
        public ActionResult Create(long?profilePhotoID, string password, string organisationPhotoID, string address, string city,
                                   long?citySelected, string coPhone, int permissions,
                                   string companyName, string contactList, int?country, string email, string fax, string firstName,
                                   string gender, string lastName, string notes, string phone, string postcode, string title, long?existingOrg,
                                   string states_canadian, string states_other, string states_us, bool sendemail)
        {
            // add organisation even if fields are empty
            if (!string.IsNullOrEmpty(email))
            {
                // check if email already added
                var emailExist = repository.IsEmailInUse(email, subdomainid.Value);
                if (emailExist)
                {
                    return(Json("Email has already been added".ToJsonFail()));
                }
            }

            organisation o;
            long         addedOrgID;

            if (!existingOrg.HasValue)
            {
                o = new organisation
                {
                    subdomain = subdomainid.Value,
                    address   = address.Trim(),
                    phone     = coPhone,
                    name      = companyName,
                    fax       = fax,
                    postcode  = postcode
                };
                if (!string.IsNullOrEmpty(organisationPhotoID))
                {
                    o.logo = long.Parse(organisationPhotoID);
                }

                if (citySelected.HasValue)
                {
                    o.city = citySelected.Value;
                }
                else if (!string.IsNullOrEmpty(city))
                {
                    o.city = repository.AddCity(city).id;
                }

                if (country != null)
                {
                    o.country = country;
                    o.state   = AddressHandler.GetState(country, states_us,
                                                        states_canadian, states_other);
                }

                addedOrgID = repository.AddOrganisation(o);

                // update shipping and billing addresses
                var addressHandler = new AddressHandler(o, repository);
                addressHandler.CopyShippingAndBillingAddressFromOrgAddress("", "");
            }
            else
            {
                o = repository.GetOrganisation(existingOrg.Value, subdomainid.Value);
                if (o == null)
                {
                    return(SendJsonErrorResponse("Company is invalid"));
                }
                addedOrgID = o.id;
            }

            // add user
            var u = new user
            {
                created      = DateTime.UtcNow,
                role         = (int)UserRole.USER,
                email        = email,
                passwordHash = Crypto.Utility.ComputePasswordHash(email + password),
                firstName    = firstName,
                gender       = gender,
                lastName     = lastName,
                notes        = notes,
                phoneNumber  = phone,
                title        = title,
                organisation = addedOrgID,
                viewid       = Crypto.Utility.GetRandomString()
            };

            // only allow user to create user with permissions equal to or less than themselves
            var currentuser       = repository.GetUserById(sessionid.Value, subdomainid.Value);
            var allowedPermission = currentuser.permissions & permissions;

            u.permissions = allowedPermission;

            try
            {
                if (profilePhotoID.HasValue)
                {
                    u.profilePhoto = profilePhotoID.Value;
                }

                repository.AddUser(u);


                // need to update entry in images table too since contextid will be the site creator's
                if (profilePhotoID.HasValue)
                {
                    var dbImage = repository.GetImage(profilePhotoID.Value);
                    if (dbImage != null)
                    {
                        dbImage.contextID = u.id;
                    }
                }

                // log activity
                repository.AddActivity(sessionid.Value,
                                       new ActivityMessage(u.id, sessionid,
                                                           ActivityMessageType.CONTACT_NEW,
                                                           new HtmlLink(u.ToEmailName(true), u.id).ToContactString()), subdomainid.Value);

                // update total contacts count
                repository.UpdateCounters(subdomainid.Value, 1, CounterType.CONTACTS_PRIVATE);

                // add contact list filter
                if (!string.IsNullOrEmpty(contactList))
                {
                    var cf = new contactGroupMember()
                    {
                        groupid = long.Parse(contactList),
                        userid  = u.id
                    };
                    repository.AddContactGroupMember(cf);
                }

                // email contact that was just added
                if (!string.IsNullOrEmpty(email) && sendemail)
                {
                    var me        = repository.GetUserById(sessionid.Value, subdomainid.Value);
                    var viewmodel = new ContactNewViewModel
                    {
                        creatorEmail = me.email,
                        creatorName  = me.ToEmailName(true),
                        hostName     = accountHostname,
                        email        = email,
                        password     = password,
                        note         = notes,
                        profile      = u.ToProfileUrl()
                    };

                    // link to view profile
                    this.SendEmail(EmailViewType.CONTACT_NEWENTRY, viewmodel, "New Profile created", u.GetEmailAddress(), u.ToFullName(), u);
                }
            }
            catch (Exception ex)
            {
                return(SendJsonErrorResponse(ex));
            }
            // return contact ID & org ID
            return(Json(new { uid = u.id, oid = addedOrgID }.ToJsonOKData()));
        }