SlideShare a Scribd company logo
1 of 80
Download to read offline
2014 DevOps Day – Philippines
February 22, 2014

Microsoft Philippines

8th Floor, 6750 Ayala Ave., Makati City
{ Drupal } : Being a Rockstar

Gerald Z. Villorente

DevOps Engineer | Drupal Developer | Open-Source Enthusiast
Agenda:
Agenda:
 Community
 Code
 Deployment
 Security
 Performance
 Flexibility
 Documentation
 Drush
 Content Management
Community

Drupal is one of the largest open-source community in the planet.
April 2013
April 2013
31,721
Developers
1,034,669
Active Users
Medium
IRC, Stackoverflow, D.O forum, ...
Code

Drupal is one of the largest open-source community in the planet.
PHP
Community
Contributions
25,585 Modules
1,941 Themes
765 Distributions
2,540
Code commits
Just this week.
5,420
Issue Comments
Just this week.
Coding Standard
The Drupal Coding Standards apply to code within Drupal and its
contributed modules.
Indenting and
Whitespace
Use an indent of 2 spaces, with no tabs.
Operators

All binary operators (operators that come between two values), such
as +, -, =, !=, ==, >, etc. should have a space before and after the
operator, for readability.
Casting

Put a space between the (type) and the $variable in a cast:
(int) $mynumber.
Control
Structures

Control structures include if, for, while, switch, etc.
Note: Don't use "else if" -- always use elseif.
Alternate control
statement
syntax for templates

In templates, the alternate control statement syntax using : instead
of brackets is allowed.
Line length
and wrapping

 In general, all lines of code should not be longer than 80 chars.
 Lines containing longer function names, function/class definitions,
variable declarations, etc are allowed to exceed 80 chars.
 Control structure conditions may exceed 80 chars, if they are
simple to read and understand.
 Conditions should not be wrapped into multiple lines.
Function Calls

Functions should be called with no spaces between the function
name, the opening parenthesis, and the first parameter; spaces
between commas and each parameter, and no space between the
last parameter, the closing parenthesis, and the semicolon.
Function
Declarations

Arguments with default values go at the end of the argument list.
Class
Constructor Calls
When calling class constructors with no arguments, always include
parentheses. This is to maintain consistency with constructors that
have arguments.
Arrays

Arrays should be formatted with a space separating each element
(after the comma), and spaces around the => key association
operator.
String
Concatenations

Always use a space between the dot and the concatenated parts to
improve readability.
PHP Code Tags

Always use <?php to delimit PHP code, not the shorthand, <? .
Semicolons

The PHP language requires semicolons at the end of most lines, but
allows them to be omitted at the end of code blocks. Drupal coding
standards require them, even at the end of code blocks.
Example URLs
Use "example.com" for all example URLs, per RFC 2606.
Naming
Conventions
Naming Conventions:
Naming Conventions:

Functions
and variables

Functions and variables should be named using lowercase, and words
should be separated with an underscore. Functions should in
addition have the grouping/module name as a prefix, to avoid name
collisions between modules.
Naming Conventions:
Naming Conventions:

Persistent
Variables

Persistent variables (variables/settings defined using Drupal's
variable_get()/variable_set() functions) should be named using all
lowercase letters, and words should be separated with an
underscore. They should use the grouping/module name as a prefix,
to avoid name collisions between modules.
Naming Conventions:
Naming Conventions:

Constants

 Constants should always be all-uppercase, with underscores to
separate words. (This includes pre-defined PHP constants like TRUE,
FALSE, and NULL.)
 Module-defined constant names should also be prefixed by an
uppercase spelling of the module that defines them.
 In Drupal 8 and later, constants should be defined using the const
PHP language keyword (instead of define()), because it is better for
performance. Ex: <?php const CACHE_TEMPORARY = -1; ?>
Naming Conventions:
Naming Conventions:

Global Variables

If you need to define global variables, their name should start with
a single underscore followed by the module/theme name and
another underscore.
Naming Conventions:
Naming Conventions:

Classes

See - https://drupal.org/node/608152
Naming Conventions:
Naming Conventions:

File names

All documentation files should have the file name extension ".txt"
to make viewing them on Windows systems easier. Also, the file
names for such files should be all-caps (e.g. README.txt instead of
readme.txt) while the extension itself is all-lowercase (i.e. txt
instead of TXT).
Helper Modules
Helper Modules:
Helper Modules:

Coder

Using PHP_Codesniffer, Coder includes “Coder Review” module that
can be use to check the Drupal coding standard of your custom
modules, themes, css, and javascript.
Helper Modules:
Helper Modules:

Dreditor

A browser plug-in for reviewing patches and more.
Helper Modules:
Helper Modules:

PAReview

A set of scripts for reviewing project applications, which runs some
coding tests.
Helper Modules:
Helper Modules:

PAReview

A set of scripts for reviewing project applications, which runs some
coding tests.
Helper Modules:
Helper Modules:

Grammar Parser
Provides an automated way of rewriting code files in compliance
with code standards.
I hate doing
manual code
review!
Can I automate it? DLA!
DevOps
Loves
Automation

If you're using version control, you can take advantage the “ hook”
feature in automating all reviews. You can combine
Bash/PHP/Perl/Python script, Drush, and Coder to do the job.
Deployment
Deployment:
Deployment:

Features

Enables the capture and management of features in Drupal. A feature
is a collection of Drupal entities which taken together satisfy a
certain use-case.
Deployment:
Deployment:

Configuration
Management

Enables the ability to keep track of specific configurations on a
Drupal site, provides the ability to move these configurations
between different environments (local, dev, qa, prod), and also
move configurations between completely different sites (migrate
configurations) without the use of modules with all configuration
being owned by the site.
Deployment:
Deployment:

hook_update_N()
Perform a single update. Called by update.php or drush updb.
Security

Drupal is one of the most secure open-source CMS/CMF project on
the planet. Don't argue with me!
Security:
Security:

Roles
and Permissions
Security:
Security:

Security Team

 Perform analysis of core or contributed project code.
 Resolve reported security issues in a Security Advisory.
 Provide assistance for contributed module maintainers in resolving
security issues.
 Provide documentation on how to write secure code.
 Provide documentation on securing your site.
Performance

Good integration with Varnish, NginX, Memcache, etc
Caching
Caching:
Caching:

Memcache

Git /ɡɪt/ is a distributed revision control and source code
management (SCM) system with an emphasis on speed. - Wikipedia
Caching:
Caching:

Varnish

Varnish is an HTTP accelerator designed for content-heavy dynamic
web sites.
Caching:
Caching:

Boost

Boost provides static page caching for Drupal enabling a very
significant performance and scalability boost for sites that receive
mostly anonymous traffic. For shared hosting this is your best option
in terms of improving performance.
Caching:
Caching:

APC

Opcode cache for PHP.
Flexibility
Flexibility:
Flexibility:

Hooks

Internal Drupal callbacks.
Flexibility:
Flexibility:

API

Application Programming Interface, a particular set of code and
specs that software programs can follow to communicate with each
other.
Flexibility:
Flexibility:

Plethora of
Contributed Modules
and Themes
Documentation
Drush

The coolest CLI tool to manage your Drupal site.
Drush:
Drush:

Use in
Deployment
Drush:
Drush:

Remote
Management
Site alias.
Ex: drush @[SITE].[ENV] vset maintenance_mode 0 -y
Drush:
Drush:

Module
Management
Drush:
Drush:

User
Management
Drush:
Drush:

Role
Management
Drush:
Drush:

DB Management
Drush:
Drush:

Backup
Drush:
Drush:

Clearing of Cache
Drush:
Drush:

Site
Maintenance
Content
Management
Content Management:
Content Management:

Taxonomy

A powerful category system (taxonomy) that allows you to organize
and tag content.
Content Management:
Content Management:

Content Types
Article, News, Events, Listings, etc ...
Questions?
Thank You!
References:
References:
1. http://drupal.org
2. http://drupal.stackexchange.com
3. https://drupal.org/community
4. https://drupal.org/coding-standards
5. https://drupal.org/developing/best-practices
6. http://stauffer.com/blog/2013/03/22/why-drupal-greatest-cms-earth
7. http://drush.ws
8. https://github.com/drush-ops/drush

More Related Content

What's hot

Gnu study guide linux admin 1 (lab work lpi 101) v 0.2
 Gnu study guide linux admin 1 (lab work lpi 101) v 0.2 Gnu study guide linux admin 1 (lab work lpi 101) v 0.2
Gnu study guide linux admin 1 (lab work lpi 101) v 0.2
Acácio Oliveira
 
Understanding Debian Packages (2014)
Understanding Debian Packages (2014)Understanding Debian Packages (2014)
Understanding Debian Packages (2014)
Miriam Ruiz
 
Objective-c for Java Developers
Objective-c for Java DevelopersObjective-c for Java Developers
Objective-c for Java Developers
Muhammad Abdullah
 

What's hot (15)

Savitch ch 12
Savitch ch 12Savitch ch 12
Savitch ch 12
 
Savitch Ch 12
Savitch Ch 12Savitch Ch 12
Savitch Ch 12
 
IPSEC
IPSECIPSEC
IPSEC
 
Dotnet basics
Dotnet basicsDotnet basics
Dotnet basics
 
Gnu study guide linux admin 1 (lab work lpi 101) v 0.2
 Gnu study guide linux admin 1 (lab work lpi 101) v 0.2 Gnu study guide linux admin 1 (lab work lpi 101) v 0.2
Gnu study guide linux admin 1 (lab work lpi 101) v 0.2
 
Red Hat Certified engineer course
  Red Hat Certified engineer course   Red Hat Certified engineer course
Red Hat Certified engineer course
 
$ make install
$ make install$ make install
$ make install
 
Understanding Debian Packages (2014)
Understanding Debian Packages (2014)Understanding Debian Packages (2014)
Understanding Debian Packages (2014)
 
Ldap configuration documentation
Ldap configuration documentationLdap configuration documentation
Ldap configuration documentation
 
Linux Tutorial For Beginners | Linux Administration Tutorial | Linux Commands...
Linux Tutorial For Beginners | Linux Administration Tutorial | Linux Commands...Linux Tutorial For Beginners | Linux Administration Tutorial | Linux Commands...
Linux Tutorial For Beginners | Linux Administration Tutorial | Linux Commands...
 
PHP Development Tools 2.0 - Success Story
PHP Development Tools 2.0 - Success StoryPHP Development Tools 2.0 - Success Story
PHP Development Tools 2.0 - Success Story
 
Red Hat Enterprise Linux 7
Red Hat Enterprise Linux 7Red Hat Enterprise Linux 7
Red Hat Enterprise Linux 7
 
Objective-c for Java Developers
Objective-c for Java DevelopersObjective-c for Java Developers
Objective-c for Java Developers
 
Devtools cheatsheet
Devtools cheatsheetDevtools cheatsheet
Devtools cheatsheet
 
Understanding the Dalvik bytecode with the Dedexer tool
Understanding the Dalvik bytecode with the Dedexer toolUnderstanding the Dalvik bytecode with the Dedexer tool
Understanding the Dalvik bytecode with the Dedexer tool
 

Similar to Why Drupal is Rockstar?

quickguide-einnovator-5-springxd
quickguide-einnovator-5-springxdquickguide-einnovator-5-springxd
quickguide-einnovator-5-springxd
jorgesimao71
 
dylibencapsulation
dylibencapsulationdylibencapsulation
dylibencapsulation
Cole Herzog
 
Building Server Applications Using ObjectiveC And GNUstep
Building Server Applications Using ObjectiveC And GNUstepBuilding Server Applications Using ObjectiveC And GNUstep
Building Server Applications Using ObjectiveC And GNUstep
guest9efd1a1
 
Building Server Applications Using Objective C And Gn Ustep
Building Server Applications Using Objective C And Gn UstepBuilding Server Applications Using Objective C And Gn Ustep
Building Server Applications Using Objective C And Gn Ustep
wangii
 
Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02
Wei Sun
 
Best practices in enterprise applications
Best practices in enterprise applicationsBest practices in enterprise applications
Best practices in enterprise applications
Chandra Sekhar Saripaka
 

Similar to Why Drupal is Rockstar? (20)

quickguide-einnovator-5-springxd
quickguide-einnovator-5-springxdquickguide-einnovator-5-springxd
quickguide-einnovator-5-springxd
 
Holy PowerShell, BATman! - dogfood edition
Holy PowerShell, BATman! - dogfood editionHoly PowerShell, BATman! - dogfood edition
Holy PowerShell, BATman! - dogfood edition
 
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)Workshop: Symfony2 Intruduction: (Controller, Routing, Model)
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)
 
NamingConvention
NamingConventionNamingConvention
NamingConvention
 
05 Lecture - PARALLEL Programming in C ++.pdf
05 Lecture - PARALLEL Programming in C ++.pdf05 Lecture - PARALLEL Programming in C ++.pdf
05 Lecture - PARALLEL Programming in C ++.pdf
 
Software Development with PHP & Laravel
Software Development  with PHP & LaravelSoftware Development  with PHP & Laravel
Software Development with PHP & Laravel
 
Coding conventions
Coding conventionsCoding conventions
Coding conventions
 
Copmuter Languages
Copmuter LanguagesCopmuter Languages
Copmuter Languages
 
P-Threads
P-ThreadsP-Threads
P-Threads
 
dylibencapsulation
dylibencapsulationdylibencapsulation
dylibencapsulation
 
Building Killer RESTful APIs with NodeJs
Building Killer RESTful APIs with NodeJsBuilding Killer RESTful APIs with NodeJs
Building Killer RESTful APIs with NodeJs
 
Best practices for DuraMat software dissemination
Best practices for DuraMat software disseminationBest practices for DuraMat software dissemination
Best practices for DuraMat software dissemination
 
Building Server Applications Using ObjectiveC And GNUstep
Building Server Applications Using ObjectiveC And GNUstepBuilding Server Applications Using ObjectiveC And GNUstep
Building Server Applications Using ObjectiveC And GNUstep
 
Building Server Applications Using Objective C And Gn Ustep
Building Server Applications Using Objective C And Gn UstepBuilding Server Applications Using Objective C And Gn Ustep
Building Server Applications Using Objective C And Gn Ustep
 
Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02Dotnetintroduce 100324201546-phpapp02
Dotnetintroduce 100324201546-phpapp02
 
Best practices in enterprise applications
Best practices in enterprise applicationsBest practices in enterprise applications
Best practices in enterprise applications
 
Introduction to r
Introduction to rIntroduction to r
Introduction to r
 
Petapath HP Cast 12 - Programming for High Performance Accelerated Systems
Petapath HP Cast 12 - Programming for High Performance Accelerated SystemsPetapath HP Cast 12 - Programming for High Performance Accelerated Systems
Petapath HP Cast 12 - Programming for High Performance Accelerated Systems
 
Weave User Group Talk - DockerCon 2017 Recap
Weave User Group Talk - DockerCon 2017 RecapWeave User Group Talk - DockerCon 2017 Recap
Weave User Group Talk - DockerCon 2017 Recap
 
Building and deploying LLM applications with Apache Airflow
Building and deploying LLM applications with Apache AirflowBuilding and deploying LLM applications with Apache Airflow
Building and deploying LLM applications with Apache Airflow
 

More from Gerald Villorente

BITS 2015: The Beauty of Drupal
BITS 2015: The Beauty of DrupalBITS 2015: The Beauty of Drupal
BITS 2015: The Beauty of Drupal
Gerald Villorente
 
Consistent Development Environment with Vagrant and Chef
Consistent Development Environment with Vagrant and ChefConsistent Development Environment with Vagrant and Chef
Consistent Development Environment with Vagrant and Chef
Gerald Villorente
 
Drush Deployment Manager: Deployment Made Easy
Drush Deployment Manager: Deployment Made EasyDrush Deployment Manager: Deployment Made Easy
Drush Deployment Manager: Deployment Made Easy
Gerald Villorente
 

More from Gerald Villorente (20)

Of Docker and Drupal
Of Docker and DrupalOf Docker and Drupal
Of Docker and Drupal
 
Introduction to Kalabox
Introduction to KalaboxIntroduction to Kalabox
Introduction to Kalabox
 
Drupal Development : Tools, Tips, and Tricks
Drupal Development : Tools, Tips, and TricksDrupal Development : Tools, Tips, and Tricks
Drupal Development : Tools, Tips, and Tricks
 
Drupal 101 V-0.1
Drupal 101 V-0.1Drupal 101 V-0.1
Drupal 101 V-0.1
 
BITS 2015: The Beauty of Drupal
BITS 2015: The Beauty of DrupalBITS 2015: The Beauty of Drupal
BITS 2015: The Beauty of Drupal
 
Introduction to Drupal 7
Introduction to Drupal 7Introduction to Drupal 7
Introduction to Drupal 7
 
Introduction to Drupal - Installation, Anatomy, Terminologies
Introduction to Drupal - Installation, Anatomy, TerminologiesIntroduction to Drupal - Installation, Anatomy, Terminologies
Introduction to Drupal - Installation, Anatomy, Terminologies
 
Consistent Development Environment with Vagrant and Chef
Consistent Development Environment with Vagrant and ChefConsistent Development Environment with Vagrant and Chef
Consistent Development Environment with Vagrant and Chef
 
Drush Deployment Manager: Deployment Made Easy
Drush Deployment Manager: Deployment Made EasyDrush Deployment Manager: Deployment Made Easy
Drush Deployment Manager: Deployment Made Easy
 
Consistent Development Environment using Vagrant and Chef
Consistent Development Environment using Vagrant and ChefConsistent Development Environment using Vagrant and Chef
Consistent Development Environment using Vagrant and Chef
 
DevOps: Cooking Drupal Deployment
DevOps: Cooking Drupal DeploymentDevOps: Cooking Drupal Deployment
DevOps: Cooking Drupal Deployment
 
Drupal Pilipinas Apprentice: LAMP Administration, CSS, and Vagrant
Drupal Pilipinas Apprentice: LAMP Administration, CSS, and VagrantDrupal Pilipinas Apprentice: LAMP Administration, CSS, and Vagrant
Drupal Pilipinas Apprentice: LAMP Administration, CSS, and Vagrant
 
Drupal
DrupalDrupal
Drupal
 
Best Practices: Drupal Development
Best Practices: Drupal DevelopmentBest Practices: Drupal Development
Best Practices: Drupal Development
 
Drupal Deployment and Essential Development Tools - 2nd Edition
Drupal Deployment and Essential Development Tools - 2nd EditionDrupal Deployment and Essential Development Tools - 2nd Edition
Drupal Deployment and Essential Development Tools - 2nd Edition
 
Drupal Deployment and Essential Development Tools
Drupal Deployment and Essential Development ToolsDrupal Deployment and Essential Development Tools
Drupal Deployment and Essential Development Tools
 
Setting Up Cross-Browser Testing Environment (Debian-based System)
Setting Up Cross-Browser Testing Environment  (Debian-based System)Setting Up Cross-Browser Testing Environment  (Debian-based System)
Setting Up Cross-Browser Testing Environment (Debian-based System)
 
Git: Git'ing the Basic
Git: Git'ing the BasicGit: Git'ing the Basic
Git: Git'ing the Basic
 
Anatomy of Drupal
Anatomy of DrupalAnatomy of Drupal
Anatomy of Drupal
 
Drupal Security Hardening
Drupal Security HardeningDrupal Security Hardening
Drupal Security Hardening
 

Recently uploaded

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 

Why Drupal is Rockstar?