Jump to content

[DEAD] Kerbal Modification Catalog


TheAlmightyOS

Recommended Posts

Kerbal Mod Catalog

[DEAD]

Due to other responsibilities and unreliable hardware I am abandoning this project. As it is licensed under WTFPL you are free to pick this up and do whatever the **** you want to it. I talked with a few people via PM about it a month or two ago. Sorry for leaving you hanging. My answers to you both is the database structure does not mater in the end. The primary concern that will make or break this project is reliably updating and displaying the information in that database. I never could do anything but update it manually.

Goal: A database that stores information pertaining to the currently maintained mods to be updated regularly. Database should be searchable and browsable. Authors should have to do no extra work to maintain their posting however manual updates are available to those that ask.

Core Founding Principles:

Primary Content in the forum with additional content, search and features on a external website

Database will not store any links that directly download a mod

The database web interface will not automatically install mods/software

The Kerbal Modification Catalog does not require Mod Authors to do anything differently then they do now. No special files, no pm's. The forum is searched and when we find a new mod we add it. You CAN let us know before that, but you don't have to.

Only info made readily available by Mod Authors will be cataloged.

Changelog:

Version 0.0.1.2 [11/14/2014]

Added a License to stay within forum rules: wtfpl-badge-4.png

Version 0.0.1.1 [11/13/2014]

Defined how forum members can make updates to the database

Added more scrubbing to search

Currently making the search results look like something other than paper. Not going well (I hate CSS)

Added background image. Not crazy about it. Think of it as a placeholder.

User input necessary for development to continue.

Version 0.0.1.0 [10/29/2014]

Moving to Alpha Status

Core functionality achieved. See -link- for alpha test site (Server dead, link removed)

Roadmap:

1. Add search for other columns

2. Bring database up to production standards

3. Maintainer/Author Submissions

4. Beta Testing / Server Load testing

5. Site graphics and layout.

Version 0.0.0.3 [10/23/2014]

Not possible to post dynamic content in forum. Restructuring plan to have primary output updated on OP when there is an update and links to additional features.

Created HTML Table to BBCode Table script. Added to "Forum View Query" script.

Posted pre-alpha proof-of-concept for forum table. Note, time stamps are Central Daylight Time.

Version 0.0.0.2 [10/20/2014]

Dropped the entire table. Starting over from scratch. Adding column for mod participation in KSP-AVC. Added an auto-generated number to identify mods and reduce duplicates BAD IDEA - Trying to find another way to uniquely identify a modification. Looking into author relations: Change/add requests, etc. Separated KSP version to Major, Minor, Revision and Build. To the user this will not be noticeable but will make searching for version numbers easier.

Version 0.0.0.1 [10/18/2014]

Created MySQL table on server. Populated table with information from Community Mods and Plugins Library (with permission)

  • Table Columns: TimeStamp, Latest_KSP_Version, Mod_Name, Mod_Author, Mod_Type, Mod_Comments, Mod_Category, License, Forum_Post, Curse_Site, KStuff_Site, Other_Location
  • Need a primary key for the table. Was going to use Mod Name but that would be too easy to create duplicates. Think I might use the thread number of the mod's forum post as the primary key. Need to think on this. Looking at CKAN repo for inspiration
  • Made simple proof of concept php file. As the file shows raw login data for the database it can not be shown here yet
  • Investigation "Dynamic Content" in vBulletin / BBcode
  • Investigation of possible collaboration with CKAN project.


Please put thoughts, comments, constructive-criticism, not so constructive criticism and outright personal attacks against my character below. I look forward to hearing your input :cool: Edited by TheAlmightyOS
Updated to reflect changes to database
Link to comment
Share on other sites

Hi there! I'm from the Comprehensive Kerbal Archive Network (CKAN)! We're still in development, but that's moving along quickly, and with our current roadmap we'll have KerbalStuff integration happening in the next couple of days, and be ready for user testing within the week. Our goal is to make KSP mods easy to install and manage, and are doing this through strong metadata, and a lot of learning from Debian and Perl who have systems which deal with tens of thousands of interrelated software packages.

If you can use the CKAN metadata index to help your project, then please do so. The spec is available in both human readable and machine readable forms, and all our code and contributions are MIT/CC-BY/LGPL, so you should be able to use them however you like.

A lot of activity for the CKAN happens on github, but also #ckan on irc.esper.net. We'd be delighted to see you there!

Keep being awesome!

~ Paul

Link to comment
Share on other sites

On that note, if you end up listing the CKAN identifier in your directory, that would be amazing for us, and means folks who find a mod they like can just `ckan install ThisAwesomeMod` to get it along with its dependencies. ;)

Link to comment
Share on other sites

Well will you look at that. That is just awesome pjf. I will look around at what you got going over there. I may add a ckan link column later on. KMC has barely made it out the starting gate. I need to finalize how I want the database to look and how to display it's contents properly before I move forward and start adding stuff.

Thank you for the heads up and you guys keep being awesome.

Link to comment
Share on other sites

First test for the database is to make sure we can query all that information and display it on a page. I can write queries, pipe the output to a webpage and link to it but that isn't any fun! I want the users to be able to actively search it for, lets say, their favorite modder. For this example we are going to use Ippo because, well, they were the first one I tried and got a null result :huh:

So first I ran a query against the DB for all the mod authors:

MariaDB [KSP_Mods]> select distinct Mod_Author from CMPL    -> ;
+---------------------------------------------------------------------+
| Mod_Author |
+---------------------------------------------------------------------+
| Uzza |
| RoverDude |
| codepoet |
| Ippo |
| sarbian |
| swamp_ig |
| cybutek |
| Fractal_UK |
| Kragrathea |
| blizzy78 |
| BahamutoD |
| SpannerMonkey |
| PatPL |
| Ezriilc |
| L.J. Silver |
| Nereid |
| Nazari1382 |
| BGog42 |
| marce |
| regex |
| ClockPunkPanic |
| Sam Hall |
| Ninenium |
| TwistedMexi |
| Mihara |
| Kreuzung |
| Woopert |
| GunTuga Custom Flag Pack |
| UAL002 |
| xEvilReeperx |
| FlowerChild |
| DMagic |
| magico13 |
| peadar1987, Xacktar, DuoDex |
| Vendan |
| Arsonide |
| zyngawow |
| malkuth |
| rbray89 |
| NathanKell |
| HoneyFox |
| ferram4 |
| ferram4: Simpler FAR model |
| Gaius |
| allista |
| Snjo |
| many |
| IRnifty |
| Texel |
| taniwha |
| stupid_chris |
| |
| lttito |
| UbioZur |
| r4m0n |
| Youen |
| ttb |
| Greys |
| OrbitusII |
| Qberticus |
| TriggerAu |
| nuclearping |
| KevinLaity |
| Diazo |
| kujuman |
| agises |
| SirJodelstein |
| mrenigma03 |
| Biff Space |
| avivey |
| m4v |
| spudbean |
| TaranisElsu |
| Jarcikon |
| qfeys |
| Xaiier |
| toadicus |
| PeteTimesSix |
| Magion |
| InfiniteDice |
| JewelShisen, Hooligan Labs |
| DYJ |
| Shasol, Asmi |
| Stavell |
| yongedevil |
| Starwaster |
| tgruetzm |
| Albert VDS |
| PakledHostage |
| Innsewerants |
| Cilph, woogoose |
| damny, technogeeky, Dmagic |
| DasPenguin85 & Orcmaul |
| Absolution |
| alexustas |
| LostOblivion |
| Devo |
| MrTheBull |
| dtobi |
| Tiberion |
| kitoban |
| mic_e |
| NavyFish |
| nothke |
| carmics |
| DennyTX |
| Ledenko |
| Dragon01, BobCat, Asmi, Blista100, Nertea, Yogui87, WCOLE360, Devo |
| BananaDealer |
| Talisar |
| YANFRET |
| frizzank |
| Kommitz |
| Galacticruler, fangflight |
| Alskari |
| Kickasskyle, Winston |
| LazarusLuan |
| Nertea |
| e-dog |
| Kerb-fu |
| hoojiwana |
| raidernick |
| TurboNisu |
| sumghai |
| jnrobinson |
| Beale |
| nli2work |
| coolpantskyle |
| masTerTorch |
| ludsoe |
| N3h3mia |
| Sethnizzle |
| theSpeare |
| Kotysoft |
| CaptRobau |
| ethernet |
| rhoark |
| Bodrick |
| pizzaoverhead |
| Iannic-ann-od |
| kahlzun |
| bac9 |
| GilBr0ther |
| keptin |
| Octagon |
| Porkjet |
| Taverius |
| Normak |
| skykooler, taniwha |
| sumghai |
| Sippyfrog |
| Lack |
| helldiver, nazari1382 |
| Michaelhester07 |
| Tajampi |
| SpeedyB |
| noonespecial |
| NovaSilisko |
| jackkymoon |
| Cerrakk |
| Starstrider42 |
| Trueborn |
| Dooz |
| Deadpangod3 |
| neocromicon |
| AlphaAsh |
| Poryy |
| KCreator |
| medikohl |
| Gravitasi |
| Sido |
| Yaeah |
| SirJulio |
| hab136 |
| BigNose |
| Roboto |
| Rubber Ducky |
| MachXXV |
| okbillybunnyface |
| KospY, Majiir, zzz, Winn75 |
| PalverZ |
| Cyrik |
| Majiir |
| Romfarer |
| sirkut |
| B |
| Padishar |
| BlackNecro |
| Industries |
| Felbourn |
| Papa_Joe |
| Xytovl |
| Biotronic |
| Paul Kingtiger, Daishi |
| Ted |
| Proot |
| Thesonicgalaxy |
| Valerian |
| Razchek, Starwaster |
| Why485 |
| shaw |
| Tingle |
+---------------------------------------------------------------------+
202 rows in set (0.01 sec)


This shows me two things. First, the data needs to be cleaned up quite a bit. And secondly, Ippo most definitely is listed in the DB.

So now I try to search for Ippo:

MariaDB [KSP_Mods]> select Mod_Name, Mod_Author from CMPL where Mod_Author like ' ippo ';Empty set (0.00 sec)

Huh, maybe I just wrote the script wrong. let's try with another...

MariaDB [KSP_Mods]> select Mod_Name, Mod_Author from CMPL where Mod_Author like ' roverdude ';
+-----------------------------------+-------------+
| Mod_Name | Mod_Author |
+-----------------------------------+-------------+
| USI Exploration Pack | RoverDude |
| Asteroid Recycling Technologies | RoverDude |
| Asteroidal Resources | RoverDude |
+-----------------------------------+-------------+
3 rows in set (0.00 sec)

:huh: dafaq?

The only explanation I have is that the table columns were not properly formatted during creation. I am going to have to go back and recreate the table.

Link to comment
Share on other sites

The database is cleaned up. Searches from command line are working which means I can make my HTML/PHP search dialogs with little effort. The what little I have in the database can be viewed here for anyone that is interested. It is unformatted and dynamic; as I make changes to the database you will see the changes in real time on that site.

I have been spending most of my time today trying to tackle the dynamic posting issue. The administrators of this forum (wisely) disabled html content. That means I can not just post some code in a post linking to the DB. In a way I am thankful for that cause this forum would be a mess if anyone could do that.

However, it presents with an interesting problem. At first I came up with a rube goldberg solution of automating the running of a query to be outputted to an HTML file, then converted to a PDF and finally converted to a jpeg and linked to the forum post. It almost worked, however the end result was about the same quality as a 1980's fax machine. That, and you can not click on a picture of a link. So that idea has been scraped

I can easily run a html output query whenever I make a change, convert it to bbscript and post it here, but that is not any different then the Community Mods and Plugins Library. In fact, it might just be more work!

In closing, the search function and automation are on schedule. Adding more mod data to the DB every day. However, posting dynamic database results to the forum may take an act of Mod. I may have to settle for a manually updated table on the forum that links to the main interface.

Edited by TheAlmightyOS
Link to comment
Share on other sites

PHP and MySQL is very easy to throw together. I already have a few test pages. However, putting the data in the forum is a NO GO. There is no way around it without compromising the security of this forum (which would get me banned) or impersonating an admin (which would get me banned) or sending an email to Squad asking for a change in policy for the forum (which...actually I wouldn't get banned for that, but just to stay safe...). So for now I am going to remove the requirement that the core features be on the forum.

The new plan is to post an updated query output to the first post whenever there is a change (much like the CMPL), however, there will be more information and links to sites where you can perform searches and get customized information.

Link to comment
Share on other sites

Over the past few days I have been attempting to make batch updates to existing records in the database with limited success. There are always a few errors and I end up restoring from backup. I have concluded from this testing that mod records should be updated individually and, if possible, though a GUI. Candidates for this GUI include the Adminer editor and phpMyAdmin. Both of these, IMHO are bad choices for giving to maintainers as tools. I think I will have to write something up simple or keep looking for a GUI MySQL editor.

I also came a few questions today as I entered the data: should I post a mod's github page even if the mod can not be downloaded from there? If the mod direct-links to a download, should I store that link in "other" or let the user go though the forum link to find the download. Thinking the later but still. Also, Multiple authors... the table does not handle them well in the current state. I need to think on how to handle those types of situations, though they are few. I don't want to chop it off at the first author and leave everyone else off. Maybe a Current_Maintainer and a Collaborators fields?

I know I am basically talking to myself right now but at least this keeps a record of what I have been thinking as it all comes together. The meds are really giving my memory a beating and this thread helps keep me on track

Link to comment
Share on other sites

Thank's Ippo. Nice to know one has an audience :)

I am holding off on building a whole interface from scratch till I can test out xataface. Supposedly an all-in-one build your own site around a database. Right now it isn't even installing right which is not a good sign.

Made some choices. Going to make it so only a single author is listed int the mod_author field of this table. If this takes off and I want to get fancy down the line I can always add a table with additional information like collaborators, images, videos, documentation, etc I will do so. For now the basics need to be meet.

Secondly, all information provided by the author will be put into the database. If the author lists a github site on their post but the github does not have a download of the mod, I will still include the github site. It will be made clear to the end user that the links are not necessarily to locations where the mod itself can be downloaded.

On the flipside, if an author has a direct download to the mod on their forum post (mysite.fake/mymod.zip) it will NOT be included in the database. That would be in violation of one of the rules I don't ever want to break: no downloads. The catalog is only supposed to help users find mods, not download or install them. And on top of that: if the mod was updated, is the link still valid or does it go to the old download? Too much to keep track of

Link to comment
Share on other sites

Slow going. Think I am trying to impliment too much at once. However, if I do not release an apha that can at LEAST outperform the old Community Mod Library then I won't be able to drum up enough Author and user support to move to phase two. Very close to full search functionality.

Link to comment
Share on other sites

eureka! I finaly figured out the HTML/PHP/SQL communication that is needed for the core functionality. I thought I was not being literal enough in my code when in fact the reverse was true. The more options and modules I stripped out the better it worked which is reverse of what the sites I had been reading on the subject had been suggesting. A working example is at the following link.http://cyberhub.ftp.sh/KSP_DB/dbalpha2.php . The search is restricted to usernames only in a small test db. Look to the first post of this thread for some good test cases.

When I get a chance I will update OP with a dev roadmap, enable search for all columns and get the DB to at least mirror the current CMPL

Edited by TheAlmightyOS
Link to comment
Share on other sites

MySQL [brain]> SELECT expletives FROM vocabulary WHERE NSFW = "Yes";

Added one extra variable and the whole thing tumbled down like a house of cards.

PHP and MySQL.... there is like 4 different ways of making it work and all those are depreciated now for a system that is barely documented. Fear not, I have not given up. I have just traded in Notepad++ and nano for a IDE. This thing is getting built!

Link to comment
Share on other sites

It took me the better part of five hours for just this one bit of functionality, but after working with BlueFish and getting some aid from a family member that went to MIT for this sort of thing, I have it operational. I present to you, the working model of the Kerbal Modification Catalog: http://cyberhub.ftp.sh/KSP_DB/dbalpha3.php

The database IS NOT complete. I will work on that tommorow.

I am very happy with how this is turning out and quickly. Only a few more bridges to cross.

Link to comment
Share on other sites

First off, sorry to some of the authors. You may notice the comma's in your comments have been changed to periods. In the conversion from nismobg's Community Mods and Plugins Library was a rough one. Converting his post from text to csv forced me to make some hard choices. However, now that the bulk of the data has been transferred, we can focus on cleaning up the small errors

Ok, hard decision time.

We got searches, we got pages to display the data... most of the data....

This is where I need users and mod authors to give me some input. Something that I always knew was going to be an issue was how to identify a mod within the DB. Up to this point I have used the mod name. However, that does not work when attempting to update a mod who's name is a sentence complete with punctuation. Also, the mod name / thread title might change. This will cause major issues later on and needs to be changed now before the database is finalized.

Now, I don't wan't the authors to do anything different. I just need a different interface with, something more...static. An alpha-numaric that is unique to that mod?

One option is combination of the userid and the threadid of a mod.

Picking on RoverDude a tad, his useris is 108138. One of RoverDude's mods that I love using is FTT. The threadid for that thread is 91706. So the unique id for RoverDude's FTT Mod would be 108138-91706

However, this would NOT work for Hooligan labs. Hooligan Labs, like quite a few threads I sampled, have many mods in a single thread. So the above would only create a unique id for their posting, not for their individual mods.

Mod Authors: Suggestions on what I should use for a unique identifier for your mod?


Users, I need your input as well. I need to know what is important to you to see on that first post. There is an upper limit to how many characters you can put in a single post. I do not know the exact number, however I do know that the current database displayed in bbcode is roughly exactly 305998 characters and too large to fit. So to post it we need to chose what columns are important and which ones will only be available on the database site.

Thank you everyone who participates

The current database can be viewed HERE

The current database Search can be viewed HERE

Edited by TheAlmightyOS
Link to comment
Share on other sites

While I am waiting for those opinions, development continues.

Noticed a huge issue as I was testing out update scripts.... No links :huh: The HTML location is displayed but you can't click on it. This is a major issue. It may be the way I am displaying the data. Looking into it Fixed it. I don't necessarily LIKE the fix, but it works.

I have created an update script for the database. It is just a SQL script laid out with the different columns on each line. With the right documentation a mod author could submit changes to their mod's database entry. However, this is being designed so the authors could be hands off unless they decide to be active with the project.

So I got the scripting, hyperlinks, added search for other columns.....

I guess it is just data entry for me at this point so you won't see many more posts from me except to update the table on the OP. Until I get some more input I am about finished with the initial development.

Edited by TheAlmightyOS
Link to comment
Share on other sites

Just looked at your progress and it's looking functional. Although your search isn't very searchy. I've not looked at your code, but I would assume that you've not put in any wildcards in the SQL statement.

SELECT * FROM table WHERE name LIKE '%search_term%'

The % signs are wildcards to be used within the match.

Link to comment
Share on other sites

Crap. Fixed the column dropdown variable and killed the wildcard search. Looking into it.

The search has been the hardest part of this whole business and given me many issues. PHP and MySQL don't go together. Except when they do. But not like that. Sometimes :confused: Reading the PHP manual site was like reading a hackers manual.

Just looked at your progress and it's looking functional. Although your search isn't very searchy. I've not looked at your code, but I would assume that you've not put in any wildcards in the SQL statement.

SELECT * FROM table WHERE name LIKE '%search_term%'

The % signs are wildcards to be used within the match.

Link to comment
Share on other sites

Fixed now. When I added search by column I had to change the PHP code I used to indicate the query and I did not add the wildcards back into the statement. But it is there now. Thank you for the catch!

Just looked at your progress and it's looking functional. Although your search isn't very searchy. I've not looked at your code, but I would assume that you've not put in any wildcards in the SQL statement.

SELECT * FROM table WHERE name LIKE '%search_term%'

The % signs are wildcards to be used within the match.

Link to comment
Share on other sites

Interesting. The HTML>BBCode conversion mangles the links for the forum. That is understandable. Also, the "NULL" values are from me cleaning the database up. Will need to tweak the scripts a bit to fix both when I get home.

EDIT:

Ok, I was working for hours, got roughly 15 mods updated. That was vastly under my expectations. I thought I was making some headway :(.

If anyone would like to help, follow these steps:

1. Post here and let me know your helping so we can co-ordinate

2. Choose a section of the Community Mods and Plugins Library to work on.

3. Open up notepad++ or your preferred text editor. Please do not use Word.

4. For each mod, use this template:


UPDATE CMPL
SET
License='',
Forum_Thread='<a href></a>',
Curse_Site='<a href></a>',
KStuff_Site='<a href></a>',
GitHub_Site='<a href></a>',
Other_Site='<a href></a>',
Other_Name=''
WHERE Mod_Name='';

NOTE: I removed KSP status because I have a different way to set that now

5. Go to the mod's forum page and collect information. DO NOT collect direct links to downloads

6. Copy a new template below the first and continue with the next mod

7. Continue until done or bored.

8. Save the file as yourname.sql and send me a pm. Will send you my gdrive info.

Important: The Mod_Name must match the Mod name from the database or Community Library exactly.

Here is an example I did earlier:


UPDATE CMPL
SET
License='CC BY-NC-SA 4.0',
Forum_Thread='<a href>http://forum.kerbalspaceprogram.com/threads/61040</a>',
Curse_Site='<a href>http://kerbal.curseforge.com/parts/220359-s-service-compartment-tubes</a>',
KStuff_Site='<a href></a>',
GitHub_Site='<a href></a>',
Other_Site='<a href></a>',
Other_Name='',
KSP_AVC=''
WHERE Mod_Name='6S Service';




UPDATE CMPL
SET
License='GPLv3',
Forum_Thread='<a href>http://forum.kerbalspaceprogram.com/threads/94426</a>',
Curse_Site='<a href></a>',
KStuff_Site='<a href></a>',
GitHub_Site='<a href></a>',
Other_Site='<a href>http://forum.kerbalspaceprogram.com/threads/94811-Addon-Controller-Toggle-addons-and-parts-on-off-for-individual-saves</a>',
Other_Name='Development Thread',
KSP_AVC=''
WHERE Mod_Name='Addon Controller';




UPDATE CMPL
SET
License='',
Forum_Thread='<a href>http://forum.kerbalspaceprogram.com/threads/91998</a>',
Curse_Site='<a href></a>',
KStuff_Site='<a href></a>',
GitHub_Site='<a href>https://github.com/BobPalmer/CommunityResourcePack/releases</a>',
Other_Site='<a href>https://docs.google.com/spreadsheets/d/1F2NYLj47O6VdThCXqBcI_hB-bDIMh4ZWB2FFyrjMLkg/edit#gid=650840806</a>',
Other_Name='The CRP working document',
KSP_AVC=''
WHERE Mod_Name='Community Resource Pack';




UPDATE CMPL
SET
License='CC BY-NC-SA 4',
Forum_Thread='<a href>Connected Living Space</a>',
Curse_Site='<a href></a>',
KStuff_Site='<a href>http://beta.kerbalstuff.com/mod/11/Connected_Living_Space</a>',
GitHub_Site='<a href>https://github.com/codepoetpbowden/ConnectedLivingSpace/releases/</a>',
Other_Site='<a href>http://forum.kerbalspaceprogram.com/threads/68617</a>',
Other_Name='Development Thread',
KSP_AVC=''
WHERE Mod_Name='Connected Living Space';




UPDATE CMPL
SET
License='LGPLv3',
Forum_Thread='<a href>http://forum.kerbalspaceprogram.com/threads/83755</a>',
Curse_Site='<a href></a>',
KStuff_Site='<a href>http://beta.kerbalstuff.com/mod/39/CrewFiles</a>',
GitHub_Site='<a href>https://github.com/Ippo343/CrewFiles/releases/</a>',
Other_Site='<a href></a>',
Other_Name='',
KSP_AVC=''
WHERE Mod_Name='CrewFiles';




UPDATE CMPL
SET
License='MIT',
Forum_Thread='<a href>http://forum.kerbalspaceprogram.com/threads/96729</a>',
Curse_Site='<a href></a>',
KStuff_Site='<a href></a>',
GitHub_Site='<a href>https://github.com/sarbian/DDSLoader/</a>',
Other_Site='<a href></a>',
Other_Name='',
KSP_AVC=''
WHERE Mod_Name='DDSLoader';

For those that take professional pride in such things, I could add a "db_update_by" field so everyone knows you are the one who updated that entry last. Or not. Depends on what people want to see and not see and I have not heard much in that department.

Edited by TheAlmightyOS
fixed comma placement in SQL
Link to comment
Share on other sites

This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...