SlideShare une entreprise Scribd logo
1  sur  62
Télécharger pour lire hors ligne
Fork CMS
  Developers!
hashtag: #forkmeetup
wifi: VergaderNet, wachtwoord:
           ventilatie
I’m Dieter @dieterve
This is Davy
@bauffman
In depth
Content
‣   Applications
‣   Backend
‣   Frontend
‣   API
‣   Modules
Content
‣   Applications
‣   Backend
‣   Frontend
‣   API
‣   Modules
Content
‣   Applications
‣   Backend
‣   Frontend
‣   API
‣   Modules
Content
‣   Applications
‣   Backend
‣   Frontend
‣   API
‣   Modules
Content
‣   Applications
‣   Backend
‣   Frontend
‣   API
‣   Modules
applications - backend - frontend - api - modules




Frontend   Backend                      API


            Library
applications - backend - frontend - api - modules




Applications
‣   1 for each purpose
‣   Clean separation between apps
‣   Possible overlap (causing overhead)
applications - backend - frontend - api - modules




Structure
‣   Core
‣   Modules (some required)
‣   Based on MVC
‣   Limited template logic
applications - backend - frontend - api - modules




Core
‣   Routing
‣   Templates
‣   Authentication
‣   Forms
‣   ...
applications - backend - frontend - api - modules




Modules
 actions
 ajax
 cronjobs (backend only)
 engine
 installer (backend only)
 js
 layout
    templates
    widgets
 widgets
applications - backend - frontend - api - modules




Library
‣    Global configuration
‣    External classes
    ‣ Google analytics

    ‣ Facebook

    ‣ Akismet

‣   Spoon Library
applications - backend - frontend - api - modules




Spoon Library
‣   PHP5 library
‣   Basic components
‣   UTF-8 support
‣   Unit tested
‣   Open source (github)
applications - backend - frontend - api - modules




Error handling
‣   SPOON_DEBUG true / false
‣   Exceptions
‣   PHP errors / warnings / ...
applications - backend - frontend - api - modules
applications - backend - frontend - api - modules




Backend
‣    Content management
‣    Authentication
    ‣ Only logged in users

‣    Module driven
    ‣ Semi clean url’s (GET)
applications - backend - frontend - api - modules




Core
‣   Router
    ‣ Loads module based on URL

    ‣ http://<site>/private/en/module/

      controller?param=value
‣   Authentication
    ‣ Action level
applications - backend - frontend - api - modules




Core
‣    Basic layout
    ‣ Datagrids

    ‣ Forms

    ‣ Tabs

    ‣ Filters
applications - backend - frontend - api - modules
applications - backend - frontend - api - modules
applications - backend - frontend - api - modules




Base classes
‣    Base for actions
‣    Less monkey jobs
    ‣ Success/error reporting

    ‣ Autoloading js/css

    ‣ Choosing template

    ‣ ...
applications - backend - frontend - api - modules




Reporting
applications - backend - frontend - api - modules




Autoloading JS / CSS
‣   <module>.js
‣   <action>.js
‣   <action>.css
applications - backend - frontend - api - modules




Specific base classes
‣    index / add / edit
‣    BackendBaseActionAdd
    ‣ create and display form

‣   BackendBaseActionIndex
    ‣ create and display datagrid

‣   All you have to do is add data
applications - backend - frontend - api - modules




Backend navigation
‣    Per module (by installer)
‣    Flexible
‣    Not limited to module context
    ‣ settings
applications - backend - frontend - api - modules




Autoloader
‣   BackendAnalyticsContent
‣   BackendAnalyticsModel
‣   BackendAnalyticsHelper
applications - backend - frontend - api - modules




Directory structure
 actions
 ajax
 cronjobs
 engine
 installer
 js
 layout
    templates
    widgets
 widgets
applications - backend - frontend - api - modules




Action
‣   Controller
‣   Interface for the user
‣   Index / add / edit / delete / ...
‣   Extends from base class(es)
‣   Navigation links to action
applications - backend - frontend - api - modules




Layout / template
‣   View
‣   Action template
‣   <action>.tpl
‣   SpoonTemplate syntax
applications - backend - frontend - api - modules




Engine
‣    Model
    ‣ Class with static methods

    ‣ Handles database interaction

‣   Helper
    ‣ Can be anything
applications - backend - frontend - api - modules




Ajax
‣   Controller
‣   Own base class
‣   Authentication
‣   Json output
applications - backend - frontend - api - modules




Cronjob
‣   Controller
‣   Own base class
‣   No authentication
‣   Collisions
‣   Command line or HTTP
applications - backend - frontend - api - modules




Installer
‣   Set rights
‣   Set navigation structure
‣   Set extra’s (create pages, ...)
‣   install.sql
‣   locale.xml
applications - backend - frontend - api - modules




Frontend
‣    The website
‣    Visitors
    ‣ Guests

    ‣ Registered visitors

‣   Page driven (http://<site>/page)
applications - backend - frontend - api - modules




Frontend
‣    2 types of controllers
    ‣ Action: 1 per page (route dependant)

    ‣ Widget: * per page

‣   Defined in pages module
‣   All about pages
applications - backend - frontend - api - modules




Pages
‣    1 page = 1 template
‣    1 template = * blocks
‣    Block
    ‣ Action

    ‣ Widget
1
Blocks in
de
template...   2



              3


              4       5

                      6
                  7
applications - backend - frontend - api - modules




Pages
applications - backend - frontend - api - modules




Core
‣    Routing
    ‣ action to execute

    ‣ widget(s) to execute

    ‣ based on the current page
applications - backend - frontend - api - modules




Minify
‣   SPOON_DEBUG = false
‣   minified.css
‣   Custom js / css = auto
applications - backend - frontend - api - modules




API
‣   XML
‣   JSON
‣   Authentication possible
‣
    /api/1.0/?
    method=<module>.<function>&param=value..
applications - backend - frontend - api - modules




API
‣   BackendBlogAPI
‣   Public functions
‣   Parameter validation
applications - backend - frontend - api - modules




Search
‣   Index pool
‣   Fields defined per module
‣   Callback per module
applications - backend - frontend - api - modules




Add to index
applications - backend - frontend - api - modules




Callback
applications - backend - frontend - api - modules




Tags
‣   Create textbox



‣   Save after validation
applications - backend - frontend - api - modules




Tags
applications - backend - frontend - api - modules




Tags
applications - backend - frontend - api - modules




Meta
‣   Again 1 pool
‣   SEO
‣   Almost every module needs it
applications - backend - frontend - api - modules
applications - backend - frontend - api - modules
applications - backend - frontend - api - modules




Meta
‣   Create form


‣   Validate


‣   Save
applications - backend - frontend - api - modules




Locale
‣   Multi language
‣   Maintainable by backend user
‣   Split between applications
applications - backend - frontend - api - modules




Locale - backend
‣   Split between modules
‣   Fallback to core
applications - backend - frontend - api - modules




Locale - frontend
‣   1 pool
Questions?
www.fork-cms.com

 info@fork-cms.com
twitter.com/fork_cms

Contenu connexe

En vedette (8)

Fork CMS Iphone app
Fork CMS Iphone appFork CMS Iphone app
Fork CMS Iphone app
 
กุญแจประจาหลัก (Clef)
กุญแจประจาหลัก (Clef)กุญแจประจาหลัก (Clef)
กุญแจประจาหลัก (Clef)
 
Fork Overview
Fork OverviewFork Overview
Fork Overview
 
Trends voor lokale websites
Trends voor lokale websitesTrends voor lokale websites
Trends voor lokale websites
 
Fork 4 Frontenders
Fork 4 FrontendersFork 4 Frontenders
Fork 4 Frontenders
 
Fork Meetup - introduction
Fork Meetup - introductionFork Meetup - introduction
Fork Meetup - introduction
 
The middle ages
The middle agesThe middle ages
The middle ages
 
ใบความรู้ร้องเพลง
ใบความรู้ร้องเพลงใบความรู้ร้องเพลง
ใบความรู้ร้องเพลง
 

Similaire à Fork 4 Developers

Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: Native and Reactive Mobile AppsGet your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: Native and Reactive Mobile AppsAckee
 
UI5con 2017 - UI5 Components - More Performance...
UI5con 2017 - UI5 Components - More Performance...UI5con 2017 - UI5 Components - More Performance...
UI5con 2017 - UI5 Components - More Performance...Peter Muessig
 
Frontend Monoliths: Run if you can!
Frontend Monoliths: Run if you can!Frontend Monoliths: Run if you can!
Frontend Monoliths: Run if you can!Jonas Bandi
 
Vue micro frontend implementation patterns
Vue micro frontend implementation patternsVue micro frontend implementation patterns
Vue micro frontend implementation patternsAlbert Brand
 
Testing with Codeception
Testing with CodeceptionTesting with Codeception
Testing with CodeceptionJeremy Coates
 
Introduction to Palm's Mojo SDK
Introduction to Palm's Mojo SDKIntroduction to Palm's Mojo SDK
Introduction to Palm's Mojo SDKBrendan Lim
 
using Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API'susing Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API'sAntônio Roberto Silva
 
Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012Yuji Takayama
 
Building Web Applications with Zend Framework
Building Web Applications with Zend FrameworkBuilding Web Applications with Zend Framework
Building Web Applications with Zend FrameworkPhil Brown
 
Introduction to YII framework
Introduction to YII frameworkIntroduction to YII framework
Introduction to YII frameworkNaincy Gupta
 
Alfresco Development Framework Basic
Alfresco Development Framework BasicAlfresco Development Framework Basic
Alfresco Development Framework BasicMario Romano
 
Build Database Applications for SharePoint!
Build Database Applications for SharePoint!Build Database Applications for SharePoint!
Build Database Applications for SharePoint!Iron Speed
 
Build Database Applications for SharePoint
Build Database Applications for SharePointBuild Database Applications for SharePoint
Build Database Applications for SharePointIron Speed
 
High quality ap is with api platform
High quality ap is with api platformHigh quality ap is with api platform
High quality ap is with api platformNelson Kopliku
 
企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践Jacky Chi
 
Plack basics for Perl websites - YAPC::EU 2011
Plack basics for Perl websites - YAPC::EU 2011Plack basics for Perl websites - YAPC::EU 2011
Plack basics for Perl websites - YAPC::EU 2011leo lapworth
 
Continuous integration / continuous delivery
Continuous integration / continuous deliveryContinuous integration / continuous delivery
Continuous integration / continuous deliveryEatDog
 
Google app-engine-with-python
Google app-engine-with-pythonGoogle app-engine-with-python
Google app-engine-with-pythonDeepak Garg
 

Similaire à Fork 4 Developers (20)

Fork CMS
Fork CMSFork CMS
Fork CMS
 
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: Native and Reactive Mobile AppsGet your mobile app in production in 3 months: Native and Reactive Mobile Apps
Get your mobile app in production in 3 months: Native and Reactive Mobile Apps
 
UI5con 2017 - UI5 Components - More Performance...
UI5con 2017 - UI5 Components - More Performance...UI5con 2017 - UI5 Components - More Performance...
UI5con 2017 - UI5 Components - More Performance...
 
Frontend Monoliths: Run if you can!
Frontend Monoliths: Run if you can!Frontend Monoliths: Run if you can!
Frontend Monoliths: Run if you can!
 
Vue micro frontend implementation patterns
Vue micro frontend implementation patternsVue micro frontend implementation patterns
Vue micro frontend implementation patterns
 
Testing with Codeception
Testing with CodeceptionTesting with Codeception
Testing with Codeception
 
Introduction to Palm's Mojo SDK
Introduction to Palm's Mojo SDKIntroduction to Palm's Mojo SDK
Introduction to Palm's Mojo SDK
 
using Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API'susing Mithril.js + postgREST to build and consume API's
using Mithril.js + postgREST to build and consume API's
 
Micro frontend
Micro frontendMicro frontend
Micro frontend
 
Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012
 
Building Web Applications with Zend Framework
Building Web Applications with Zend FrameworkBuilding Web Applications with Zend Framework
Building Web Applications with Zend Framework
 
Introduction to YII framework
Introduction to YII frameworkIntroduction to YII framework
Introduction to YII framework
 
Alfresco Development Framework Basic
Alfresco Development Framework BasicAlfresco Development Framework Basic
Alfresco Development Framework Basic
 
Build Database Applications for SharePoint!
Build Database Applications for SharePoint!Build Database Applications for SharePoint!
Build Database Applications for SharePoint!
 
Build Database Applications for SharePoint
Build Database Applications for SharePointBuild Database Applications for SharePoint
Build Database Applications for SharePoint
 
High quality ap is with api platform
High quality ap is with api platformHigh quality ap is with api platform
High quality ap is with api platform
 
企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践
 
Plack basics for Perl websites - YAPC::EU 2011
Plack basics for Perl websites - YAPC::EU 2011Plack basics for Perl websites - YAPC::EU 2011
Plack basics for Perl websites - YAPC::EU 2011
 
Continuous integration / continuous delivery
Continuous integration / continuous deliveryContinuous integration / continuous delivery
Continuous integration / continuous delivery
 
Google app-engine-with-python
Google app-engine-with-pythonGoogle app-engine-with-python
Google app-engine-with-python
 

Dernier

"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbuapidays
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
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 TerraformAndrey Devyatkin
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 

Dernier (20)

"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
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
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 

Fork 4 Developers