DotNetNuke Hosting with ASPHostPortal.com

BLOG about DotNetNuke CMS, latest technology and Special DotNetNuke Hosting Package with ASPHostPortal.com

DotNetNuke Tutorial - Quick Tips to Add Images to Your DotNetNuke Website

clock Oktober 17, 2018 06:20 by author Kenny

Most business owners would just do anything to boost their organic rankings, increase customer traffic and convert more leads.  While fresh content, meta tags and keywords work wonders to optimize your site for the major search engines, there are often few factors that are overlooked, but contributes to the site’s rankings. Including high quality images to your website is one effective means that can help you to improve the user experience and also enhance the SEO.

DotNetNuke is one of the best CMS that is used by organizations to develop their websites. It is extremely flexible and easy to use and also offers rich features that can be fully integrated into the website. The platform offers various modules and this allows business owners to easily customize their websites. Adding images are important for your website, but I have come across several DotNetNuke developers who do not understand how to prepare images before uploading them to the site. Here in this blog, I will give you a quick overview of the entire process.

The image formats: If you have selected a DNN development company to create your website then the designers can help you to add perfect images on your site. There are usually two main image files and they are the JPEGs and GIFs. These formats help to compress the file size of an image and this helps with smooth transitions. You can convert the images in any of the desired format and save them, which will ensure that the pages download in the quickest time. While adding images on a page, consider its dimension, file size, number of images and the total file size so that it can be kept to the minimum.

Dimensions of the images:  Many DotNetNuke developers have problems determining the size of the images. The image dimensions should always be determined according to their use, where they are going to be placed and how much screen space you want them to cover. A corporate logo should always be a small one and a location map should be legible where the small features can be identified.

Optimize the image: Your DNN website should be properly optimized so that it becomes more visible to the audience. Once the dimensions are decided for your image, you can compress it to a suitable size using an image editor. Now preview the image and adjust the settings and check how long it will take to download. Create the best optimized image and change the setting before using it.

Best DotNetNuke Hosting Recommendation

ASPHostPortal.com provides its customers with Plesk Panel, one of the most popular and stable control panels for Windows hosting, as free. You could also see the latest .NET framework, a crazy amount of functionality as well as Large disk space, bandwidth, MSSQL databases and more. All those give people the convenience to build up a powerful site in Windows server. ASPHostPortal.com offers DotNetNuke hosting starts from $5/month only. We also guarantees 30 days money back and guarantee 99.9% uptime. If you need a reliable affordable DotNetNuke Hosting, we should be your best choice.



DotNetNuke Tutorial - Top 10 Benefits of DotNetNuke

clock Oktober 11, 2018 09:41 by author Kenny

If you're considering DotNetNuke for your website, you're probably researching the platform to understand the advantages of DNN  over other products. We want to make this process easy for you, so we've listed what we believe are DotNetNuke's top 10 benefits. Of course, depending on who you ask these "top advantages" may be slightly different according to the goals of other websites. Our list is meant to provide general list of benefits for businesses of all sizes.

Simple content editing and creation

First thing's first. A great CMS needs to make content management easy, and DotNetNuke does just that. Whether your a team of one or a team of managers, editors, and writers, DNN gives its users a robust rich text editor and many options to create great content. For largers teams, content workflows can be put into place for permission setting and approval management.

Advanced features

The features of DotNetNuke, whether out of the box or with third party modules, can be extremely powerful for businesses of all sizes. User management, advertisement management, email marketing, document management, multilingual ability, blog management, and more are included to help marketing and IT teams manage their website.

Unmatched security

DotNetNuke provides extremely thorough security. Each user group is provided its own permissions, and all users can be sorted into these groups based upon what the operations require. As opposed to other CMSs that may require you to install a third party (and probably weak) application, DotNetNuke has a security model built into the CMS architecture. This makes DNN one of the most secure platforms for websites on the market.

Ultimate platform flexibility

DNN, because it is based on ASP.NET, is extremely extensible with pre-made or custom modules. It can be easily integrated with virtually any business application, especially those in the Microsoft stack of Dynamics (GP, CRM, etc.).

Website speed

DotNetNuke's efficient code base ensures that websites run quickly to provide a great user experience for all of your site visitors.

Based in portals

The portal based architecture of DotNetNuke allows your business to run many sites on just one DNN installation. This can be beneficial if you need to run an intranet as well as your website, or multiple portals for individual departments.

Great for applications or intranets

Because of its flexible code base and architecture, DotNetNuke can be a great host for web apps or intranets. This is helpful for companies that want to manage many different IT assets on one easy platform.

Well supported

DotNetNuke Corporation offers central technical support. Also, because DNN is open source, there are many partners that support it all over the world. This makes your investment in DotNetNuke a safe one for many years to come.

Reduced cost

Based on your company needs, whatever version of DNN you choose, it will be a significant cost saving venture over other options (especially the custom ones that cost many tens of thousands of dollars to complete a project).

Proven and established

DotNetNuke has been used for 700,000 websites over many years, including for major companies and organizations such as NASA, Lockheed Martin, Verizon, USAA, WeightWatchers, Bose, NASCAR, Cornell University, Dannon, Kia, Hilton, Whirlpool, Chrysler, Motorola, and more.

Best DotNetNuke Hosting Recommendation

ASPHostPortal.com provides its customers with Plesk Panel, one of the most popular and stable control panels for Windows hosting, as free. You could also see the latest .NET framework, a crazy amount of functionality as well as Large disk space, bandwidth, MSSQL databases and more. All those give people the convenience to build up a powerful site in Windows server. ASPHostPortal.com offers DotNetNuke hosting starts from $5/month only. We also guarantees 30 days money back and guarantee 99.9% uptime. If you need a reliable affordable DotNetNuke Hosting, we should be your best choice.



DotNetNuke Tutorial - Organize Your DNN Blog Entries

clock September 6, 2018 12:03 by author Kenny

One of the things about the Blog Module that has had a love/hate relationship with the community, is the fact that the blogs are directly tied to user accounts - more so than most features typically are.  This would be okay though, if the admins and hosts had some control over this.  Anyhow, a benefit of this format is that it makes it easy for us to categorize our blogs using the Child Blog feature.  This feature is found at the bottom of your Blog Settings.

In my situation, I already had two categories of blogs in mind: Personal, and Professional.  The Professional ones would be about .Net and DotNetNuke, and Personal would be for everything else.  We will continue with this example.

When you click the "Add" child blog button, you are faced with pretty much the same interface you saw before when creating a new blog.  Only this one will have a direct relationship with the blog you originally created.  If the first blog you created is the Parent, then this would be it's Child.  You can also equate this to folders.  In the folder analogy though, the original blog would be the filing cabinet.

Fill out the child blog form just like you would for any other new blog.  Then, click the "Update" button at the bottom of the page.  Assuming there were no errors, you would be returned to the Blog Settings page.  In my case, I did this twice, once for each category.

Now that I created the two categories I needed, it was time to find out what the BlogID's were.  I would need this values in a moment in order to move blog entries from the original blog to the new ones.  I used the following query:

SELECT * 
FROM [dbo].[Blog_Entries]

(Your queries might vary, depending on how you have your database and tables set-up.)

Once the query executed, I was able to see 3 records in the table, one for each blog - the parent and the two children.  I noted the ID numbers for each.

Now, I needed to perform a quick T-SQL surgery to move the blog entries.  First, I moved the personal ones.  This step was the most important, as I needed to browse through the database table real quick to grab the ID's for each personal entry.  This would only need to be done this one time.  You'd want to choose whichever category has the least number of entries to save time.  I used the following query to look through the blog entries.

SELECT * 
FROM [dbo].[Blog_Entries]

The enabled me to come up with a list of blog entries to use in the first data transfer query.  In the example below, pretend that the numbers 1 though 6 is actually a meaningful list of numbers.

UPDATE [dbo].[Blog_Entries] 
SET [BlogID] = 2
WHERE [EntryID] IN (1,2,3,4,5,6)

Since we only needed 2 categories here, the entries that remain after running the previous T-SQL snippet are all part of the same category.  Now, we can run the following T-SQL to move the remaining entries reliably into the appropriate child blog.

UPDATE [dbo].[Blog_Entries] 
SET [BlogID] = 3
WHERE [BlogID] = 1

This leaves no entries in the original blog, but instead has all of the blog entries in their respective child blogs.  This facilitates you being able to separate the RSS feeds for each blog, as well as being able to link to specific blog types, and more.  You can already see this process in action on this very blog.

Best DotNetNuke Hosting Recommendation

ASPHostPortal.com provides its customers with Plesk Panel, one of the most popular and stable control panels for Windows hosting, as free. You could also see the latest .NET framework, a crazy amount of functionality as well as Large disk space, bandwidth, MSSQL databases and more. All those give people the convenience to build up a powerful site in Windows server. ASPHostPortal.com offers DotNetNuke hosting starts from $5/month only. We also guarantees 30 days money back and guarantee 99.9% uptime. If you need a reliable affordable DotNetNuke Hosting, we should be your best choice.



DotNetNuke Tutorial - Easy to Use Bootstrap 3 in A DNN Skin

clock Augustus 23, 2018 12:25 by author Kenny

I decided to use the popular Bootstrap framework to handle all the messy layout and mobile aspects of the site.  This post doesn’t teach you Bootstrap or DNN Skinning. It just covers a few of the steps I needed to get everything to work.

1. Including the Bootstrap goods

The easiest way to include Bootstrap in your template is to include that from the Bootstrap CDN.  You will want to use DNN’s Client Resource Management controls to include your CSS and JS.  To include those controls, you will want to include the following at the top of your skin .ascx file:

<%@ Register TagPrefix="dnn" TagName="STYLES" Src="~/Admin/Skins/Styles.ascx" %>
<%@ Register TagPrefix="dnn" Namespace="DotNetNuke.Web.Client.ClientResourceManagement" Assembly="DotNetNuke.Web.Client" %>

Next you will include the .css and .js into your skin.  To include the CSS you will use the following at the top of your skin ascx file:

http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" UseSkinPath="false" />

To include the .js, you will use the following at the bottom of your file:

http://netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js" />

2. Skin.css – don’t use it

Typically for a DNN skin you will use the skin.css file to define the css elements for your skin.  Since you are using the Bootstrap grid system, chances are a lot of the CSS in your skin.css will be deleted.  So carefully clean it up.

Also in your skin.css you will define styles for the Bootstrap nav bar.  This is one of the area’s of bootstrap that you will override the css in the default bootstrap CSS file.  So to do this, your skin.css file needs to appear AFTER the bootstrap css file on your webpage so it will override.

The problem here is that skin.css which is automatically included by DNN will always be included before the Bootstrap css file.

An easy solution is to rename your skin.css to style.css.  Since there is no skin.css, DNN will not try to include it.  Then just add another control to include your style.css file:

3. Navigation Menus – Mobile friendly

The other change I made was a difficult decision.  Bootstrap navigation does not support hovering.  In DNN when you hover over a navigation menu item, the child items appear for selection.  That’s hard to do on a mobile device.  The Bootstrap framework has opted for a click being required to drop down the child items in a navigation menu.  This means that any top level menus with content had to be moved to a child page and the parent needed disabled.  For example I used to have:

  • About Us
    • Partners

I had to change it to the following:

  • Company – This is a DNN disabled page
    • About Us
    • Partners

At first I did modify Bootstrap to drop down the child menus on hover.  To do this, you simply need to use the Bootstrap Hover Plugin.  However I decided to keep things less complicated and use the Bootstrap standard for the navigation menu. 

Best DotNetNuke Hosting Recommendation

ASPHostPortal.com provides its customers with Plesk Panel, one of the most popular and stable control panels for Windows hosting, as free. You could also see the latest .NET framework, a crazy amount of functionality as well as Large disk space, bandwidth, MSSQL databases and more. All those give people the convenience to build up a powerful site in Windows server. ASPHostPortal.com offers DotNetNuke hosting starts from $5/month only. We also guarantees 30 days money back and guarantee 99.9% uptime. If you need a reliable affordable DotNetNuke Hosting, we should be your best choice.



DotNetNuke Tutorial - How to Enable and Disable Popup in Dotnetnuke

clock Augustus 16, 2018 09:26 by author Kenny

Some users like the functionality in DotNetNuke that allows the login module and editing of modules to occur in a modal popup, some websites and modules don't function well with this feature, in this tutorial I show you how to disable popups within the UI for DotNetNuke.

1. Login as Administrator Account

2. On the menu bar go to Admin -> Site settings

3. Go to Advanced Settings tab -> Expand Usability Setting -> Uncheck Enable Pop-ups

4. Click Update

To test Pop-ups effect. You Logout and click Login

Best DotNetNuke Hosting Recommendation

ASPHostPortal.com provides its customers with Plesk Panel, one of the most popular and stable control panels for Windows hosting, as free. You could also see the latest .NET framework, a crazy amount of functionality as well as Large disk space, bandwidth, MSSQL databases and more. All those give people the convenience to build up a powerful site in Windows server. ASPHostPortal.com offers DotNetNuke hosting starts from $5/month only. We also guarantees 30 days money back and guarantee 99.9% uptime. If you need a reliable affordable DotNetNuke Hosting, we should be your best choice.



DotNetNuke Tutorial - How and Why to Implement IPortable in a Module?

clock Augustus 15, 2018 09:41 by author Kenny

The DotNetNuke framework provides many different interfaces that module developers can implement to allow modules to provide common functionality. IActionable is used for adding items to the action menu; ISearchable is used to provide content to the search indexer system. These two interfaces are pretty well known by developers as they are much needed items to create functional modules. IPortable is one additional interface that many developers overlook, however, from an end users perspective it is a very needed piece of functionality allowing them to manage their content.

Why Implement IPortable?

Implementing IPortable is a simple process and involves adding two simple methods to your Business Controller class, so it is not something that will cost you a large amount of time to implement. However, the user benefits in most cases are great. If a module implements IPortable uses with edit permissions will see the following two actions in the action menu for your module.

 

These options give your users the ability to import/export content using a familiar interface. This might help someone that tests your module on a different environment than their production environment and wants to move the content from one server to the other. It also helps when users create Site Templates, if a module supports IPortable they can include the content as well as the actual module instance.

How Does it Work (User Experience)?

The user experience when working with modules that implement IPortable is very easy. To export content the user simply selects “Export Content” from the action menu, they are presented with the following page.

The user simply specifies the file name they wish to create, without an extension and they click “Export”. After clicking export they are redirected to the module page. If we look at the File Manager for the site you will see the newly created file, circled in red below.

This is important to note as DotNetNuke adds the content.. To the beginning of the users desired file name. This portion must NOT be removed as if it is, the user will NOT be able to import the content into the module.
Importing works in a very similar fashion the user is presented with a control allowing them to select the input file, once selected they can click “Import” and the records will be applied to the module.
Now that you know how it works from a user perspective, lets dig into the code.

How to Implement in Code?

You implement IPortable inside your modules BusinessControllerClass after modifying your controller class to implement the IPortable interface which is part of the DotNetNuke.Entities.Modules namespace you will need to implement the following two methods.

Export Module

We will start looking at the export module function first. DotNetNuke provides you on piece of information, the moduleId, and expects you to return a string value. The string value that you return must be a valid piece of XML as it is injected into the final XML document created by DotNetNuke that includes additional information. Typically a very simple process can be used to get all data elements from your module and loop through them formatting them in XML.

This is very simple code, obtaining a listing of all info objects for the current module, and a simple for each loop to write it in XML format using a string builder. Other methods could be used to create the XML structure, however, since a string is the desired end result, the use of a string builder is the most common practice.

After providing this information back to DotNetNuke when it creates the actual content file it will add information regarding the current version of the module which can be used later to ensure that your import process matches to the correct XML structure.

Import Module

The import module method is provided four pieces of input data; moduleid, content, version, and userid. You will use these methods to successfully import the content. The passed module id is the id of the module to which content should be inserted. Below is the ImportModule method from the Expandable Text/HTML module.

This code is another fairly simple piece, at the base of it you use .NET XML methods to work with the XML content to build your own information objects and insert the records using your standard controller class methods. The important item to note here is actually the first few lines of code. A version check is done to determine if the export is supposed to have a specific field. Using a technique similar to this you can handle imports from different versions of the module without incident if you add/remove items from the import process.

Best DotNetNuke Hosting Recommendation

ASPHostPortal.com provides its customers with Plesk Panel, one of the most popular and stable control panels for Windows hosting, as free. You could also see the latest .NET framework, a crazy amount of functionality as well as Large disk space, bandwidth, MSSQL databases and more. All those give people the convenience to build up a powerful site in Windows server. ASPHostPortal.com offers DotNetNuke hosting starts from $5/month only. We also guarantees 30 days money back and guarantee 99.9% uptime. If you need a reliable affordable DotNetNuke Hosting, we should be your best choice.



DotNetNuke Tutorial - How to Use Gmail SMTP in DotNetNuke?

clock Augustus 9, 2018 12:03 by author Kenny

How to Use Gmail SMTP in DotNetNuke?

The server settings for sending mail over Gmail are required only when using Gmail through an email client program. You shouldn't ever need to manually enter them anywhere if you're using Gmail online through a browser, like through Gmail.com.

For example, if you need to use Gmail in Mozilla Thunderbird, you can manually enter the SMTP settings within Thunderbird's program options.

Since Gmail is so popular, some email programs might even provide these SMTP server details automatically while you're setting up your account.

If you want to use Gmail SMTP in your DNN website, this can be easily done by specifying the correct port 587 in the SMTP settings. Unfortunately, there is no port number field supplied in the SMTP settings form. So in order to include the port number, you just need to add the smtp.gmail.com:587 in the SMTP settings.

In order to set the SMTP settings, you will need to login as super host account. Note this is a super administrator account so the basic administrator account will not get the access to the host menu. Under the host settings in the advanced settings tab, you will see a section for SMTP settings. You just simply need to use the following settings. Just replace the email and password of your own.

 

Still Can't Send Mail Through Gmail?

Some email applications use older, less secure technologies to log you into your email account, and Google will block these requests by default.

If you can't send mail with your Gmail account for that reason, it's unlikely that you're entering the wrong SMTP settings. Instead, you'll get a message related to the security of the email client.

Best DotNetNuke Hosting Recommendation

ASPHostPortal.com provides its customers with Plesk Panel, one of the most popular and stable control panels for Windows hosting, as free. You could also see the latest .NET framework, a crazy amount of functionality as well as Large disk space, bandwidth, MSSQL databases and more. All those give people the convenience to build up a powerful site in Windows server. ASPHostPortal.com offers DotNetNuke hosting starts from $5/month only. We also guarantees 30 days money back and guarantee 99.9% uptime. If you need a reliable affordable DotNetNuke Hosting, we should be your best choice.



DotNetNuke Hosting Tutorial - How to Install Multiple DotNetNuke Modules Quickly

clock Augustus 2, 2018 12:16 by author Kenny

Once installed into DNN modules can easily be dragged and dropped to a page. You can also have multiple instances of the same module on one page. Modules can be shared across pages and, in the paid versions of DNN, even shared across multiple sites (via the Site Groups feature).

Imagine having a DNN site, but then having a need that is custom or specific to you or needing functionality that does not come with DNN out of the box. Let’s say for example you want to have a photo gallery on your site. A photo gallery module does not ship with DNN out of the box. These scenarios where you have a need for functionality that does not ship with DNN are prime scenarios for a custom module or 3rd party module.

A module’s settings also allows the site admins to easily control things like the module title, the start and end date and time (in case the site admin wants to schedule and expire content), the module’s container, and whether or not the module is indexed by search engines. 

Installing multiple modules through the DNN user interface is very time-consuming, but luckily there’s an easier and faster way of installing modules in DNN. So in order to do a batch installation of multiple modules just follow the steps outlined below.

1. Add your zipped modules to the “/Install/Module/” folder

Build your modules in release mode and drop the zipped modules into:

YourDnnFolder/Install/Module/

2. Navigate to “/install/install.aspx?mode=installresources”

Open up a browser window and navigate to the URL:

http://YourDnnSite.url/install/install.aspx?mode=installresources

… and all of the modules that you dropped into the module folder earlier will now be installed for you.

 

Best DotNetNuke Hosting Recommendation

ASPHostPortal.com provides its customers with Plesk Panel, one of the most popular and stable control panels for Windows hosting, as free. You could also see the latest .NET framework, a crazy amount of functionality as well as Large disk space, bandwidth, MSSQL databases and more. All those give people the convenience to build up a powerful site in Windows server. ASPHostPortal.com offers DotNetNuke hosting starts from $5/month only. We also guarantees 30 days money back and guarantee 99.9% uptime. If you need a reliable affordable DotNetNuke Hosting, we should be your best choice.



DotNetNuke Hosting Tutorial - How to Add A Paypal Form to DNN?

clock Julie 26, 2018 09:11 by author Kenny

You can create a payment button for a straightforward, single-item purchase or for a full shopping cart. You can also create payment buttons to accept a donation, set up a subscription, automate billing, or create an installment plan.

Using a few basic options, your payment button can include shipping fees and taxes, track inventory, and get profit and loss information by product or service. Advanced options enable you to completely customize the checkout page and checkout experience.

Beyond a simple payment solution, PayPal Payments Standard provides invoicing, transaction management, shipment tracking, and data integration with tools like Excel, Quickbooks, and Quicken.

How to Add A Paypal Form to DNN?

The problem is that DotNetNuke already uses a 'form' which is a way for the current page to post back information to the server. All DotNetNuke pages are forms-based, so that all the links like login, search, etc can work by sending the response back to the DotNetNuke website.

The PayPal buttons need to be on a form as well - if you look at the sample html you'll see the form tags. This is because the PayPal buttons post the information back to the PayPal server, and, as DNN already is setup to post back to your own server, it doesn't work.

Step 1. Remove the tags from your PayPal code.

Step 2. Add the following bit of code to the input button on your form:

onClick="this.form.action='https://www.paypal.com/cgi-bin/webscr';this.form.submit();"

Step 3. Add your newly edited form to an HTML module in your DNN site.

Basically you are using javascript to submit the form onclick rather than using the HTML action functionality. A generic ASP.Net page already contains a form so-to-speak and so this is just a means of using another method so you don't have to deal with changing the action field of the existing form.

Best DotNetNuke Hosting Recommendation

ASPHostPortal.com provides its customers with Plesk Panel, one of the most popular and stable control panels for Windows hosting, as free. You could also see the latest .NET framework, a crazy amount of functionality as well as Large disk space, bandwidth, MSSQL databases and more. All those give people the convenience to build up a powerful site in Windows server. ASPHostPortal.com offers DotNetNuke hosting starts from $5/month only. We also guarantees 30 days money back and guarantee 99.9% uptime. If you need a reliable affordable DotNetNuke Hosting, we should be your best choice.



DotNetNuke Hosting Tutorial - View Event Viewers in DotNetNuke

clock Julie 11, 2018 12:35 by author Kenny

In this tutorial, you will learn how to view error log exceptions in DNN. You will also able to specify which log exceptions you want to record or ignore.
To view the error logs, you will need to have administrator portal access. Once you have login on the website, please go to the admin menu and you will see there is a menu called Event Viewer.

By default, all the error or event logs will be displayed on the site, you have an option to narrow the result list by specifying the log type by selecting one of the option in the dropdown list.

How to turn off the event logs in DNN?

To turn off specific event logs in DNN is pretty simple, if you scroll further down, you will be able to see there is a button called Edit Log Settings.

To enable or disable the event log, click the pencil edit icon. This will load another window popup and there is a tick box for you to untick it if you want to disable the event log.

Best DotNetNuke Hosting Recommendation

ASPHostPortal.com
ASPHostPortal.com provides its customers with Plesk Panel, one of the most popular and stable control panels for Windows hosting, as free. You could also see the latest .NET framework, a crazy amount of functionality as well as Large disk space, bandwidth, MSSQL databases and more. All those give people the convenience to build up a powerful site in Windows server. ASPHostPortal.com offers DotNetNuke hosting starts from $5/month only. We also guarantees 30 days money back and guarantee 99.9% uptime. If you need a reliable affordable DotNetNuke Hosting, we should be your best choice.



About ASPHostPortal.com

We’re a company that works differently to most. Value is what we output and help our customers achieve, not how much money we put in the bank. It’s not because we are altruistic. It’s based on an even simpler principle. "Do good things, and good things will come to you".

Success for us is something that is continually experienced, not something that is reached. For us it is all about the experience – more than the journey. Life is a continual experience. We see the Internet as being an incredible amplifier to the experience of life for all of us. It can help humanity come together to explode in knowledge exploration and discussion. It is continual enlightenment of new ideas, experiences, and passions

Author Link


 photo ahp banner aspnet-01_zps87l92lcl.png

Corporate Address (Location)

ASPHostPortal
170 W 56th Street, Suite 121
New York, NY 10019
United States

Tag cloud

Sign in