<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.civetsolutions.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aloha</id>
	<title>Convention Master Documentation - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.civetsolutions.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aloha"/>
	<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php/Special:Contributions/Aloha"/>
	<updated>2026-05-06T15:47:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=824</id>
		<title>Badge Display Code Documentation</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=824"/>
		<updated>2025-03-25T01:12:41Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In order to generate badges the system uses a series of commands known as ''badgecode''. This ''badgecode'', badge drawing code is documented here.&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Basics ===&lt;br /&gt;
&lt;br /&gt;
Badgecode is highly order of operations based, it renders from top to bottom in order.&lt;br /&gt;
&lt;br /&gt;
Generally, when constructing a badge, place your images near the top, then start to render your text, otherwise your images may render on top of your text. However, this can be used to your advantage, you can use PNG's with partial transparency, to overlay color, images, or other features on top of system rendered objects - including other images. Badges can be built up of multiply layers of objects which can be programmatically switched in or out based on the attendees specific system held data.&lt;br /&gt;
&lt;br /&gt;
For example where you place invert_image(); will effect the way it works, you can make it only effect part of the badge, you can even use multiple invert_image();'s in series to invert part of the badge conditionally based on state (underage, UDF, product purchased, membership, what have you).&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Coordinate system. ===&lt;br /&gt;
&lt;br /&gt;
The system requires coordinates, and these co-ordinates can be passed in many ways, the most common way will be to pass the just numbers, and numbers will represent pixels in the image your attempting to draw. However, several other methods are possible, including percentages, inches, cm, mm, points, and pixels. In addition the numbers used can be negative which will make them count from the opposite direction.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
The system has many variables that you can pull from in order to put information on-to the badge. Nearly every variable for a person from the database is available in the draw code. The variables are named as &amp;lt;nowiki&amp;gt;&amp;lt;table name&amp;gt;_&amp;lt;field name&amp;gt;&amp;lt;/nowiki&amp;gt; so the fan_name field from the registrant table would be $registrant_fan_name, the current_membership_type from the events_attended table would be $events_attended_current_membership_type. Variables will sometimes need to be followed by a space. This is definatly true in all strings. To get something to read &amp;lt;nowiki&amp;gt;&amp;lt;reg_num&amp;gt;-&amp;lt;uid&amp;gt;&amp;lt;/nowiki&amp;gt; you will need to write your string as &amp;quot;$events_attended_reg_num -$uid&amp;quot; or &amp;quot;$events_attended_reg_num\-$uid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There are some special variables which are populated, here is a list of some of the unique variable names.&lt;br /&gt;
&lt;br /&gt;
==== Event Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Event Variables&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $event_id || Event Short Name E.G. RF0&lt;br /&gt;
|-&lt;br /&gt;
| $events_event_title || Event Title defined on the Edit Event screen.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_name || The membership group.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_long_name || The membership name as is intended to be printed on the badge.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Registrant Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Registrant Variables&lt;br /&gt;
|-&lt;br /&gt;
| $uid || Registrant UID&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_first_created || Creation date of the person.&lt;br /&gt;
|-&lt;br /&gt;
| $events_attended_reg_num || Registration Sequence Number&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_common_name || Uses the $registrant_fan_name value if the value is not empty, and uses the $registrant_rl_first and $registrant_rl_last otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_fan_name || Registrant Fan/Badge Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_rl_first || Registrant First Name&lt;br /&gt;
|- &lt;br /&gt;
| $registrant_rl_last || Registrant Last Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_birthday || The person's birthday.&lt;br /&gt;
|-&lt;br /&gt;
| $underage || true if the person is under the specified of_age. A good example of the use of this could be &amp;lt;nowiki&amp;gt;if($underage|invert_image()|do_nothing());&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Special Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Special Variables&lt;br /&gt;
|-&lt;br /&gt;
! Special Variable !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $staff || if $event_membership_types_name contains the word 'staff' this will equal true, this is not case sensitive. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== UDF Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ User Defined Fields - User defined fields can be applied on the badges. Use the following variables.&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_title || Will display the title of the user defined field. (If the customer has it applied to them)  Ex: $UDF_12_title.&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_value || Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
==== Drawing Functions ====&lt;br /&gt;
All draw functions end in a ;&lt;br /&gt;
===== Geometry Functions =====&lt;br /&gt;
* '''draw_line([ulx,uly],[llx,lly])''' - Draws a line from [x.y] to [x,y]&lt;br /&gt;
* '''draw_box([ulx,uly],[llx,lly],Optional Arguments here)''' - Will draw a box with the top corner being at the first pair, and the lower right being at the second pair. This function always starts drawing from the top or the left.&lt;br /&gt;
** filled=yes - Will Fill the box with black (or the color specified in color)&lt;br /&gt;
** color=r:g:b - Will set the draw color for this function to the specified rgb value.&lt;br /&gt;
&lt;br /&gt;
===== Image Functions =====&lt;br /&gt;
* '''draw_image(&amp;quot;filename&amp;quot;,[p1x,p1y],[p2x,p2y])''' - Draw the specified image with the top left of the image at point 1, and the lower right of the image at point 2. If IMAGE_UID### is specified instead of a filename the image will be pulled from the badge_images table and used instead.  There is no space between IMAGE_UID and the Number of the badge_image.&lt;br /&gt;
* '''flood_fill(r,g,b)''' - will perform a flood fill on the image at 2,2&lt;br /&gt;
*'''invert_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
*'''grayscale_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
* '''image_brightness(n);''' -  Adjust image brightness - Valid range is -255 to 255, 255 is most brightness, -255 is least.&lt;br /&gt;
* '''image_contrast(n);''' - Adjust image contrast - Valid range is -100 to 100, note, negative numbers are more contrast, positive numbers are less (this is the way the underlying library works, no sane person would design it this way).&lt;br /&gt;
* '''emboss_image();''' - Adds an Artistic Embossed Look to an image.&lt;br /&gt;
* '''tint_image(r,g,b,''a'')''' - will colorize the entire image based on the RGB values specified. By default if you do not pass an alpha value in badgecode, one is inserted (0), this is fully opaque, you can adjust the intensity of the tinting effect by adjusting the transparency level. This is somewhat non-intuitive to use. Valid Alpha ranges are between 0 and 127, Valid Color Ranges are between 0 and 255.&lt;br /&gt;
&lt;br /&gt;
===== Layout Assistance Function =====&lt;br /&gt;
* '''draw_measure([x,y],Optional Arguments Here)''' - Will draw a measurement line for you to help figure out co-ordinates of your drawing.&lt;br /&gt;
** ticks=&amp;lt;integer&amp;gt; - Defaults to 100 (Draw a large tick every &amp;lt;integer&amp;gt; pixels, and a small tick every &amp;lt;integer/2&amp;gt; pixels)&lt;br /&gt;
** type=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Vertical&lt;br /&gt;
&lt;br /&gt;
===== Text and Barcode Functions =====&lt;br /&gt;
* '''draw_text(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws text at the x,y co-ordinates, with the following optional arguments which can be passed in any order and must be seperated by a comma.&lt;br /&gt;
** font=&amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; is the name of a font file in the shared_php folder, case-sensitive, do not add the .ttf extension.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;aign&amp;gt; is the alignment you want, left, right or center&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;vertalign=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;align&amp;gt; is top, middle or bottom.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;size=&amp;lt;size&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;size&amp;gt; is the size of the text you want&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;angle=&amp;lt;angle&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;angle&amp;gt; is the angle of the text&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;border=&amp;lt;true|false|numeric&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if there will be a border on the text If border is a numeric value the value will dictate the thickness of the border.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;inverted=&amp;lt;true|false&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if the text will be inverted.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;maxwidth=&amp;lt;width&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the maximum width this text can take, if long names appear they will be automatically reduced in font in order for them to maintain a size no greater than the maximum width.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** color=r:g:b - If this value is present then the rgb value of the color will be used for the font. Otherwise, black will be used. &amp;lt;nowiki&amp;gt;(Or white if invert is present This setting overrides Invert)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''draw_barcode(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws a barcode at the x,y co-ordinates with the following optional arguments which can be passed in any order and must be seperated by a comma,&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;format=&amp;lt;code128|code39|codabar&amp;gt; - Defaults to code39&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;left|center|right&amp;gt; - Defaults to Left&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;orientation=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Horizontal&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;height=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Integer value determines the height of the barcode, width is always determined by the string, no scaling option is available.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;width=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Strech or squash the barcode to this width (Does not maintain aspect ratio, use with height)&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt;, - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;color=&amp;lt;r:g:b&amp;gt;&amp;lt;/nowiki&amp;gt; - Set the draw color.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous Functions ====&lt;br /&gt;
* '''label_convert''' - This is a special function to improve the quality of thermal prints when used with the cups print method, it gives a rough approximation of the work the legacy EPL print method does when doing its image conversion. However, as its direct CUPS, there is a performance improvement.&lt;br /&gt;
* '''// comment''' - Using // will add comments to your draw code that won't render.&lt;br /&gt;
&lt;br /&gt;
==== Logic Functions ====&lt;br /&gt;
*''' if(&amp;quot;value&amp;quot;|true-action|false-action);''' - For example if($underage | draw_text(&amp;quot;Underage&amp;quot;, [82.5%,80%]) | do_nothing());&lt;br /&gt;
*''' strcmp(&amp;quot;somthing&amp;quot;=&amp;quot;somthingelse&amp;quot;|true-action|false-action);''' - this function.&lt;br /&gt;
*''' do_nothing();''' - this function is valuable for the IF statements.&lt;br /&gt;
&lt;br /&gt;
===== Special Logic Functions =====&lt;br /&gt;
*''' ifmembershipgroup(&amp;quot;value&amp;quot;|true-action|false-action);''' - This tools is a IF stament that will allow you to draw things depending on whether or not a person has a specific membership group.&lt;br /&gt;
** Example ifmembershipgroup(&amp;quot;patron&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
*''' ifproductpurchased(&amp;quot;upc&amp;quot;|true-action|false-action);''' - This tool is a IF statement that will allow you to draw things depending on whether or not a person has a specific product purchased (paid, not just in cart), and not refunded.&lt;br /&gt;
** Example:ifproductpurchased(&amp;quot;1000180&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
&lt;br /&gt;
===Badgecode Examples===&lt;br /&gt;
&lt;br /&gt;
==== CR80 Horizontal Example ====&lt;br /&gt;
&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:CR80 Horizontal FNO.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Minor Ada Dealer.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Media Ada Dealer.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for StratosFur 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
//badge image commented out, comment out the invert_image line when restoring - will show a black background for testing without image.&lt;br /&gt;
//draw_image(&amp;quot;IMAGE_UID1&amp;quot;, [1,1], [100%,100%]);&lt;br /&gt;
invert_image();&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Event and Membership &lt;br /&gt;
draw_text(&amp;quot;$events_event_title  - $uid&amp;quot;,[95.5%,600],size=30,align=right,color=255:255:255,font=&amp;quot;gayatri&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// draw minor warning - Draws in Red - overlaps with Media Flag, cannot be a media minor.&lt;br /&gt;
if($underage |  draw_text(&amp;quot;Minor&amp;quot;,[95.5%,25.5%],size=150,align=right,color=255:0:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
// Max Width must change for Membership type because of size of minor warning.&lt;br /&gt;
&lt;br /&gt;
if($underage|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=450,font=&amp;quot;gayatri&amp;quot;)|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=1000,font=&amp;quot;gayatri&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//Show marker for ADA - Yellow&lt;br /&gt;
if ($UDF_6_value | draw_text(&amp;quot;ADA&amp;quot;,[95.5%,39.5%],size=60,align=right,color=240:240:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Media - Green - Cannot be Media/Minor, they occupy the same space&lt;br /&gt;
if ($UDF_7_value | draw_text(&amp;quot;Media&amp;quot;,[95.5%,25.5%],size=150,align=right,color=0:255:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Dealers - Draws in Magenta.&lt;br /&gt;
if ($UDF_8_value |draw_text(&amp;quot;Dealers&amp;quot;,[95.5%,50.5%],size=60,align=right,color=255:0:255,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,530],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=1000,color=255:255:255);&lt;br /&gt;
 &lt;br /&gt;
// Next lets draw the furry name under the main name &lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,600],,font=&amp;quot;gayatri&amp;quot;,size=50,align=left,maxwidth=540,color=255:255:255); &lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=600,color=255:255:255;&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
// Next lets draw the real name&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,530],font=&amp;quot;andlso&amp;quot;,size=85,align=left,maxwidth=550,color=255:255:255,font=&amp;quot;gayatri&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=50,align=left,valign=bottom,maxwidth=600,color=255:255:255);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;br /&gt;
&lt;br /&gt;
==== CR80 Vertical Example ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Zebra 4x1 Example ====&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:Zebra 4x1 FNO.jpg|thumb]]&lt;br /&gt;
[[File:Zebra 4x1 FNO Minor.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for TTFC 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
// Lets draw the EVENT ID&lt;br /&gt;
if($underage | draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],inverted=true,size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;) |draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// If underage, draw &amp;quot;UNDER AGE&amp;quot;, else draw optional value (nominally species)&lt;br /&gt;
if($underage | draw_text(&amp;quot;UNDER AGE&amp;quot;, [150,-15],inverted=true,font=&amp;quot;andlso&amp;quot;,size=40,align=left) | draw_text(&amp;quot;$UDF_1_value&amp;quot;,[190,-9],size=28,font=&amp;quot;andlso&amp;quot;,maxwidth=320));&lt;br /&gt;
&lt;br /&gt;
// Draw membership type and UID&lt;br /&gt;
draw_text(&amp;quot;$event_membership_types_long_name&amp;quot;,[-128,-15],size=28,align=right,font=&amp;quot;andlso&amp;quot;)); &lt;br /&gt;
draw_text(&amp;quot;$uid&amp;quot;,[-120,-15],size=28,align=left,font=&amp;quot;andlso&amp;quot;, str_pad_length=4,str_pad_align=left,str_pad_value=&amp;quot;0&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[480,120],font=&amp;quot;andlso&amp;quot;,size=85,align=center,valign=bottom,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Release_notes&amp;diff=756</id>
		<title>Release notes</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Release_notes&amp;diff=756"/>
		<updated>2023-08-28T04:32:10Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This page links to the various release notes available for Convention Master.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Info page&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Date Released&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | DB Version&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Public Subversion Revision&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Minimum PHP Version Supported&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.3.0|10.3.0]]&lt;br /&gt;
| 2023-07-22&lt;br /&gt;
| 589&lt;br /&gt;
| 191&lt;br /&gt;
| 8.1 min (8.2 Recommended)&lt;br /&gt;
| PHP 8+ required&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.2.1|10.2.1]]&lt;br /&gt;
| 2023-04-15&lt;br /&gt;
| 588&lt;br /&gt;
| 190&lt;br /&gt;
| 7.4&lt;br /&gt;
| Warning about PHP starts here (This is the last version that will support PHP 7.4)&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.2.0|10.2.0]]&lt;br /&gt;
|2023-03-10&lt;br /&gt;
|588&lt;br /&gt;
|187&lt;br /&gt;
|7.4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.8|10.1.8]]&lt;br /&gt;
|2023-01-12&lt;br /&gt;
|588&lt;br /&gt;
|184&lt;br /&gt;
|7.4&lt;br /&gt;
|PHP 8.2 now supported&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.7|10.1.7]]&lt;br /&gt;
|2022-11-16&lt;br /&gt;
|588&lt;br /&gt;
|182&lt;br /&gt;
|7.1&lt;br /&gt;
|PHP 8.2 now supported&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.6|10.1.6a]]&lt;br /&gt;
|2022-09-23&lt;br /&gt;
|588&lt;br /&gt;
|178&lt;br /&gt;
|7.1&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.6|10.1.6]]&lt;br /&gt;
|2022-09-14&lt;br /&gt;
|588&lt;br /&gt;
|175&lt;br /&gt;
|7.1&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.5|10.1.5]]&lt;br /&gt;
|2022-01-10&lt;br /&gt;
|584&lt;br /&gt;
|171&lt;br /&gt;
|7.1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.4|10.1.4]]&lt;br /&gt;
|2021-07-18&lt;br /&gt;
|584&lt;br /&gt;
|169&lt;br /&gt;
|7.1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.3|10.1.3]]&lt;br /&gt;
|2021-07-17&lt;br /&gt;
|583&lt;br /&gt;
|167&lt;br /&gt;
|7.1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.2|10.1.2]]&lt;br /&gt;
|2021-02-25&lt;br /&gt;
|582&lt;br /&gt;
|166&lt;br /&gt;
|7.1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.1|10.1.1]]&lt;br /&gt;
|2021-02-19&lt;br /&gt;
|582&lt;br /&gt;
|164&lt;br /&gt;
|7.1&lt;br /&gt;
|Warning about PHP version 7.2 starts here&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.0|10.1.0]]&lt;br /&gt;
|2021-01-31&lt;br /&gt;
|582&lt;br /&gt;
|161&lt;br /&gt;
|7.1&lt;br /&gt;
|Versions 10.1.0 and later require the database be from a version 9.5.0 or newer to perform an upgrade. (Min DB version 572) &lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.13|10.0.13]]&lt;br /&gt;
|2020-08-10&lt;br /&gt;
|579&lt;br /&gt;
|156&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.12|10.0.12]]&lt;br /&gt;
|2020-05-30&lt;br /&gt;
|579&lt;br /&gt;
|155&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.11|10.0.11]]&lt;br /&gt;
|2020-03-04&lt;br /&gt;
|578&lt;br /&gt;
|153&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.10|10.0.10]]&lt;br /&gt;
|2020-02-26&lt;br /&gt;
|578&lt;br /&gt;
|151&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.9|10.0.9]]&lt;br /&gt;
|2020-02-24&lt;br /&gt;
|578&lt;br /&gt;
|149&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.8|10.0.8]]&lt;br /&gt;
|2019-12-12&lt;br /&gt;
|576&lt;br /&gt;
|147&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.7|10.0.7]]&lt;br /&gt;
|2019-11-24&lt;br /&gt;
|576&lt;br /&gt;
|145&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.6|10.0.6]]&lt;br /&gt;
|2019-11-20&lt;br /&gt;
|576&lt;br /&gt;
|143&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.5|10.0.5]]&lt;br /&gt;
|2019-05-09&lt;br /&gt;
|575&lt;br /&gt;
|141&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.4|10.0.4]]&lt;br /&gt;
|2019-05-04&lt;br /&gt;
|575&lt;br /&gt;
|139&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.3|10.0.3]]&lt;br /&gt;
|2019-03-05&lt;br /&gt;
|574&lt;br /&gt;
|136&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.2|10.0.2]]&lt;br /&gt;
|2019-02-27&lt;br /&gt;
|574&lt;br /&gt;
|132&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.1|10.0.1]]&lt;br /&gt;
|2019-02-11&lt;br /&gt;
|573&lt;br /&gt;
|129&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.0|10.0.0]]&lt;br /&gt;
|2018-12-30&lt;br /&gt;
|572&lt;br /&gt;
|127&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.5.0|9.5.0]]&lt;br /&gt;
|2018-11-21&lt;br /&gt;
|572&lt;br /&gt;
|122&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.4.2|9.4.2]]&lt;br /&gt;
|2018-09-12&lt;br /&gt;
|570&lt;br /&gt;
|117&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.4.1|9.4.1]]&lt;br /&gt;
|2018-07-03&lt;br /&gt;
|570&lt;br /&gt;
|115&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.4.0|9.4.0]]&lt;br /&gt;
|2018-06-28&lt;br /&gt;
|570&lt;br /&gt;
|113&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.3.5|9.3.5]]&lt;br /&gt;
|2018-03-07&lt;br /&gt;
|556&lt;br /&gt;
|111&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.3.4|9.3.4]]&lt;br /&gt;
|2018-02-23&lt;br /&gt;
|555&lt;br /&gt;
|109&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.3.3|9.3.3]]&lt;br /&gt;
|2018-02-18&lt;br /&gt;
|554&lt;br /&gt;
|108&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9.3.2&lt;br /&gt;
|2018-01-11&lt;br /&gt;
|553&lt;br /&gt;
|106&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9.3.1&lt;br /&gt;
|2018-01-11&lt;br /&gt;
|553&lt;br /&gt;
|104&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.3.0|9.3.0]]&lt;br /&gt;
|2018-01-06&lt;br /&gt;
|553&lt;br /&gt;
|102&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9.2.0&lt;br /&gt;
|2017-06-05&lt;br /&gt;
|549&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.1.2|9.1.2]]&lt;br /&gt;
|2017-03-30&lt;br /&gt;
|549&lt;br /&gt;
|97&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.1.1|9.1.1]]&lt;br /&gt;
|2017-01-11&lt;br /&gt;
|548&lt;br /&gt;
|94&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.1.0|9.1.0]]&lt;br /&gt;
|2017-01-03&lt;br /&gt;
|547&lt;br /&gt;
|93&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.0.3|9.0.3]]&lt;br /&gt;
|2016-08-31&lt;br /&gt;
|544&lt;br /&gt;
|92&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.0.2|9.0.2]]&lt;br /&gt;
|2016-07-27&lt;br /&gt;
|544&lt;br /&gt;
|90&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.0.1|9.0.1]]&lt;br /&gt;
|2016-07-06&lt;br /&gt;
|543&lt;br /&gt;
|86&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.0.0|9.0.0]]&lt;br /&gt;
|2016-05-08&lt;br /&gt;
|542&lt;br /&gt;
|85&lt;br /&gt;
|&lt;br /&gt;
|Versions 9.0.0 and later require the database be from a version 8.2.9 or newer to perform an upgrade. (Min DB version 538) &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.10|8.2.10]]&lt;br /&gt;
|2015-12-02&lt;br /&gt;
|&lt;br /&gt;
|84&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.9|8.2.9]]&lt;br /&gt;
|2015-10-26&lt;br /&gt;
|&lt;br /&gt;
|83&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.8|8.2.8]]&lt;br /&gt;
|2015-06-13&lt;br /&gt;
|&lt;br /&gt;
|80&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.7|8.2.7]]&lt;br /&gt;
|2015-01-19&lt;br /&gt;
|&lt;br /&gt;
|75&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.6|8.2.6]]&lt;br /&gt;
|2014-07-17&lt;br /&gt;
|&lt;br /&gt;
|68&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.5|8.2.5]]&lt;br /&gt;
|2014-06-19&lt;br /&gt;
|&lt;br /&gt;
|67&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.4|8.2.4]]&lt;br /&gt;
|2014-05-12&lt;br /&gt;
|&lt;br /&gt;
|65&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.3|8.2.3]]&lt;br /&gt;
|2014-05-05&lt;br /&gt;
|&lt;br /&gt;
|62&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.2|8.2.2]]&lt;br /&gt;
|2013-12-12&lt;br /&gt;
|&lt;br /&gt;
|58&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.1|8.2.1]]&lt;br /&gt;
|2013-11-14&lt;br /&gt;
|&lt;br /&gt;
|56&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.0|8.2.0]]&lt;br /&gt;
|2013-06-01&lt;br /&gt;
|&lt;br /&gt;
|53&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.1.0|8.1.0]]&lt;br /&gt;
|2013-03-25&lt;br /&gt;
|&lt;br /&gt;
|52&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.0.0|8.0.0]]&lt;br /&gt;
|2013-02-25&lt;br /&gt;
|&lt;br /&gt;
|51&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.2.0|7.2.0]]&lt;br /&gt;
|2012-07-14&lt;br /&gt;
|&lt;br /&gt;
|48&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.1.0|7.1.0]]&lt;br /&gt;
|2012-04-11&lt;br /&gt;
|&lt;br /&gt;
|39&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.0.2|7.0.2]]&lt;br /&gt;
|2012-03-03&lt;br /&gt;
|&lt;br /&gt;
|37&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.0.1|7.0.1]]&lt;br /&gt;
|2012-02-05&lt;br /&gt;
|&lt;br /&gt;
|35&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.0.0|7.0.0]]&lt;br /&gt;
|2012-01-27&lt;br /&gt;
|&lt;br /&gt;
|32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also == &lt;br /&gt;
&lt;br /&gt;
[[Category:Upgrading]]&lt;br /&gt;
[[Category:Convention Master Release Notes]]&lt;br /&gt;
[[Category:Convention Master development]]&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Release_notes/10.3.0&amp;diff=755</id>
		<title>Release notes/10.3.0</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Release_notes/10.3.0&amp;diff=755"/>
		<updated>2023-08-02T01:59:06Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt; [[Release notes]]&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
    Release notes for version 10.3.0.&lt;br /&gt;
     July 23, 2023, 03:11:&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
    This release contains all changes listed below&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
    * Mantis 155 - New feature!!   Email templates have been made multilingual, and brought into the UI. &lt;br /&gt;
    * Mantis 1372 - Cloud Printing Download URL&lt;br /&gt;
    * Mantis 1377 - Add UID to Cashier Screen. - Added button to the cashier screen that allows user to go back and look at UID record.&lt;br /&gt;
    * Mantis 1379 - Badge Name Regex Fix - Fixed a issue that was caused in 10.2.1 where charachters that used to be allowed are no longer allowed. &lt;br /&gt;
    * Mantis 1361 - Corrected kiosk bug that happens when you try to enable kiosk step 30&lt;br /&gt;
    * Mantis 1368 - No Birthday Print failure - Using the system settings to set the birthday collection to &amp;quot;No birthday collection&amp;quot; the system will crash with a error.&lt;br /&gt;
    * Mantis 1305 - Replaced existing JSON marshaller&lt;br /&gt;
    * Mantis 1375 - User defined fields - Fixed a error when filtering by FLAG, getting the error message &amp;quot;Expected a value; Got...&amp;quot;	&lt;br /&gt;
    * Mantis 155  - Email Templates Feature - &lt;br /&gt;
    * The Credit card payment browser report now shows only transactions from the last year.&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Upgrading_from_MySQL_5.7_to_MySQL_8.0&amp;diff=734</id>
		<title>Upgrading from MySQL 5.7 to MySQL 8.0</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Upgrading_from_MySQL_5.7_to_MySQL_8.0&amp;diff=734"/>
		<updated>2023-03-25T02:01:15Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Incompatible SQL modes ==&lt;br /&gt;
&lt;br /&gt;
For MySQL 5.7, the installation instructions guided you to create &amp;lt;code&amp;gt;/etc/mysql/conf.d/convention_master.cnf&amp;lt;/code&amp;gt; with the following contents:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;code&amp;gt;[mysqld]&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;sql-mode=&amp;quot;NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These may also have been placed directly within &amp;lt;code&amp;gt;/etc/mysql/mysql.conf.d/mysqld.cnf&amp;lt;/code&amp;gt; or another configuration file; your installation may vary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''BEFORE beginning the MySQL upgrade process!!!'''&lt;br /&gt;
You must remove &amp;lt;code&amp;gt;NO_AUTO_CREATE_USER&amp;lt;/code&amp;gt; from the list of SQL modes. This is not a valid mode in MySQL 8.0, and leaving it in place will cause the upgrade process to break! You should now have&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;code&amp;gt;[mysqld]&amp;lt;/code&amp;gt;&lt;br /&gt;
    &amp;lt;code&amp;gt;sql-mode=&amp;quot;NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''HELP! I didn't read the instructions and my installation is now broken!'''&lt;br /&gt;
Find and remove the incompatible SQL mode as mentioned above, then run &amp;lt;code&amp;gt;apt-get --fix-broken install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set the required options ==&lt;br /&gt;
&lt;br /&gt;
'''AFTER''' the upgrade to MySQL 8.0 is finished, log into MySQL as the root user (you may try &amp;lt;code&amp;gt;sudo mysql&amp;lt;/code&amp;gt;, or you may also try &amp;lt;code&amp;gt;mysql -u root -p&amp;lt;/code&amp;gt;) and run the following query:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;code&amp;gt;SET GLOBAL log_bin_trust_function_creators = 1;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should now be ready to run with MySQL 8.0.&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=725</id>
		<title>Sending parsed DL-ID data to CM</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=725"/>
		<updated>2023-03-12T13:29:44Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When trying to implement reading of DL/ID barcodes we realized a way to pass the information to CM in a machine parsable way that was easy to send via a web browser without add-on software was needed.&lt;br /&gt;
&lt;br /&gt;
This document attempts to create a standard so either mobile applications, or hardware imagers can be programmed to send the needed DL/ID information to CM, in a way that is universal and easy to understand.&lt;br /&gt;
&lt;br /&gt;
Note, any field concatenation should be done on the server side, and blank fields are allowed, and will be ignored by the server side parser.&lt;br /&gt;
&lt;br /&gt;
== V1 Data String ==&lt;br /&gt;
&amp;lt;tt&amp;gt;!V1!firstname!lastname!suffix!dateofbirth!address1!address2!city!state!postalcode!country&amp;lt;enter&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more information about the AAMVA field, see ''Annex D'' of the AAMVA DL/ID Card Design Standard&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ V1 Data String Breakdown and Explanation&lt;br /&gt;
|-&lt;br /&gt;
! Data String !! AAMVA field !! Field Information !! Notes/Definition&lt;br /&gt;
|-&lt;br /&gt;
| V1 || N/A || !V followed by up to 3 numbers || Version String&lt;br /&gt;
|-&lt;br /&gt;
| firstname || DAC || Up to 40 Chars ANSI Text || First name of the cardholder.&lt;br /&gt;
|-&lt;br /&gt;
| lastname || DCS || Up to 40 Chars ANSI Text || Family Name of the Cardholder&lt;br /&gt;
|-&lt;br /&gt;
| suffix || DCU || Up to 40 Chars ANSI Text || Name Suffix (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| dateofbirth || DBB || 8 Characters Numbers Only || CM Expected format is CCYYMMDD, format on license may be MMDDCCYY or CCYYMMDD, Reader must convert&lt;br /&gt;
|-&lt;br /&gt;
| address1 || DAG || Up to 35 Chars ANSI Text || Street Portion of Address&lt;br /&gt;
|-&lt;br /&gt;
| address2 || DAH || Up to 35 Chars ANSI Text || Second Line of Address (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| city || DAI || Up to 20 Chars ANSI Text || City Portion of Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| state || DAJ || 2 Chars ANSI Text || State Portion of the Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| postalcode || DAK || Up to 11 Chars ANSI Text || Postal Code, includes zip+4 for US&lt;br /&gt;
|-&lt;br /&gt;
| country || DCG || 3 Chars ANSI Text || Country the Card is issued in&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;enter&amp;gt; || N/A || N/A || Send the Enter Key when done reading.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-Built Configuration Files for Zebra Imagers==&lt;br /&gt;
* These configuration files should work on any Zebra USB scanners that can support DL/ID scanning.&lt;br /&gt;
&lt;br /&gt;
[https://leho.blastpuppy.com/cm-ref/DS4208-DS6708-Config.pdf Pre Made DS4208/DS6708 Config File]&lt;br /&gt;
&lt;br /&gt;
[https://leho.blastpuppy.com/cm-ref/Config_File_DS4208_DLID_Decode_2023.02.25.scncfg Scan123 Config File for DS408 (works on DS6708)]&lt;br /&gt;
&lt;br /&gt;
==Reference Documents==&lt;br /&gt;
[https://www.aamva.org/assets/best-practices,-guides,-standards,-manuals,-whitepapers/aamva-dl-id-card-design-standard-(2020) AAMVA DL/ID Card Design Standard]&lt;br /&gt;
&lt;br /&gt;
[https://www.zebra.com/us/en/support-downloads/scanners/general-purpose-scanners/ds6708-dl.html Support Page to obtain product reference guide for DS6708]&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=721</id>
		<title>Sending parsed DL-ID data to CM</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=721"/>
		<updated>2023-02-25T16:13:25Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When trying to implement reading of DL/ID barcodes we realized a way to pass the information to CM in a machine parsable way that was easy to send via a web browser without add-on software was needed.&lt;br /&gt;
&lt;br /&gt;
This document attempts to create a standard so either mobile applications, or hardware imagers can be programmed to send the needed DL/ID information to CM, in a way that is universal and easy to understand.&lt;br /&gt;
&lt;br /&gt;
Note, any field concatenation should be done on the server side, and blank fields are allowed, and will be ignored by the server side parser.&lt;br /&gt;
&lt;br /&gt;
== V1 Data String ==&lt;br /&gt;
&amp;lt;tt&amp;gt;!V1!firstname!lastname!suffix!dateofbirth!address1!address2!city!state!postalcode!country&amp;lt;enter&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more information about the AAMVA field, see ''Annex D'' of the AAMVA DL/ID Card Design Standard&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ V1 Data String Breakdown and Explanation&lt;br /&gt;
|-&lt;br /&gt;
! Data String !! AAMVA field !! Field Information !! Notes/Definition&lt;br /&gt;
|-&lt;br /&gt;
| V1 || N/A || !V followed by up to 3 numbers || Version String&lt;br /&gt;
|-&lt;br /&gt;
| firstname || DAC || Up to 40 Chars ANSI Text || First name of the cardholder.&lt;br /&gt;
|-&lt;br /&gt;
| lastname || DCS || Up to 40 Chars ANSI Text || Family Name of the Cardholder&lt;br /&gt;
|-&lt;br /&gt;
| suffix || DCU || Up to 40 Chars ANSI Text || Name Suffix (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| dateofbirth || DBB || 8 Characters Numbers Only || CM Expected format is CCYYMMDD, format on license may be MMDDCCYY or CCYYMMDD, Reader must convert&lt;br /&gt;
|-&lt;br /&gt;
| address1 || DAG || Up to 35 Chars ANSI Text || Street Portion of Address&lt;br /&gt;
|-&lt;br /&gt;
| address2 || DAH || Up to 35 Chars ANSI Text || Second Line of Address (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| city || DAI || Up to 20 Chars ANSI Text || City Portion of Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| state || DAJ || 2 Chars ANSI Text || State Portion of the Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| postalcode || DAK || Up to 11 Chars ANSI Text || Postal Code, includes zip+4 for US&lt;br /&gt;
|-&lt;br /&gt;
| country || DCG || 3 Chars ANSI Text || Country the Card is issued in&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;enter&amp;gt; || N/A || N/A || Send the Enter Key when done reading.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-Built Configuration Files for Zebra Imagers==&lt;br /&gt;
* These configuration files should work on any Zebra USB scanners that can support DL/ID scanning.&lt;br /&gt;
&lt;br /&gt;
[https://leho.blastpuppy.com/cm-ref/DS4208-DS6708-Config.pdf Pre Made DS4208/DS6708 Config File]&lt;br /&gt;
&lt;br /&gt;
[https://leho.blastpuppy.com/cm-ref/Config_File_DS4208_DLID_Decode_2023.02.25.scncfg Scan123 Config File for DS408 (works on DS6708)]&lt;br /&gt;
&lt;br /&gt;
==Reference Documents==&lt;br /&gt;
[https://www.aamva.org/assets/best-practices-guidance/dl-id-card-design-standard AAMVA DL/ID Card Design Standard]&lt;br /&gt;
&lt;br /&gt;
[https://www.zebra.com/us/en/support-downloads/scanners/general-purpose-scanners/ds6708-dl.html Support Page to obtain product reference guide for DS6708]&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Main_Page&amp;diff=720</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Main_Page&amp;diff=720"/>
		<updated>2023-02-25T15:48:07Z</updated>

		<summary type="html">&lt;p&gt;Aloha: /* Reference Documents */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Convention Master Documentation=&lt;br /&gt;
&lt;br /&gt;
This wiki will attempt to document all things Convention Master. It is brand new and currently a work-in-progress, so if a subject below does not yet have a page or has incomplete documentation, please contact a development team member for more information.&lt;br /&gt;
&lt;br /&gt;
== Installation &amp;amp; Upgrade ==&lt;br /&gt;
* [[InstallGuide | Installation Guide]]&lt;br /&gt;
* [[Upgrading Convention Master]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instructional Guides ==&lt;br /&gt;
&lt;br /&gt;
* [[Guide/MoveDatabase|Moving a Database Between Installations]]&lt;br /&gt;
* [[Guide/Vouchers|Voucher System]]&lt;br /&gt;
* [[Guide/PaymentGateways|Payment Gateway System]]&lt;br /&gt;
* [[Guide/DealersDen|Dealer Den / Vendor Hall Subsystem]]&lt;br /&gt;
* [[Guide/X-forwarded-for|X Forwarded For Headers]]&lt;br /&gt;
&lt;br /&gt;
== Other Pages ==&lt;br /&gt;
* [[Automated Tasks]]&lt;br /&gt;
* [[EventGrid]]&lt;br /&gt;
* [[Kiosks]]&lt;br /&gt;
* [[Potential New Feature Descriptions]]&lt;br /&gt;
* [[UpgradeError_Index|Database Upgrade Errors]]&lt;br /&gt;
&lt;br /&gt;
== Reference Documents ==&lt;br /&gt;
* [[Badge Display Code Documentation]]&lt;br /&gt;
* [[Tag Replacements]]&lt;br /&gt;
* [[Global Settings]]&lt;br /&gt;
* [[Sending parsed DL-ID data to CM]]&lt;br /&gt;
&lt;br /&gt;
== Release Notes == &lt;br /&gt;
* [[Release notes]]: All information on releases of Convention Master can be found here.&lt;br /&gt;
&lt;br /&gt;
== Support == &lt;br /&gt;
You can get support by contacting us via email at support[at]civetsolutions[dot]com&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Release_notes&amp;diff=719</id>
		<title>Release notes</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Release_notes&amp;diff=719"/>
		<updated>2023-02-25T15:44:20Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This page links to the various release notes available for Convention Master.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Info page&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Date Released&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | DB Version&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Public Subversion Revision&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Minimum PHP Version Supported&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.8|10.1.8]]&lt;br /&gt;
|2023-01-12&lt;br /&gt;
|588&lt;br /&gt;
|184&lt;br /&gt;
|7.1&lt;br /&gt;
|PHP 8.2 now supported&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.7|10.1.7]]&lt;br /&gt;
|2022-11-16&lt;br /&gt;
|588&lt;br /&gt;
|182&lt;br /&gt;
|7.1&lt;br /&gt;
|PHP 8.2 now supported&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.6|10.1.6a]]&lt;br /&gt;
|2022-09-23&lt;br /&gt;
|588&lt;br /&gt;
|178&lt;br /&gt;
|7.1&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.6|10.1.6]]&lt;br /&gt;
|2022-09-14&lt;br /&gt;
|588&lt;br /&gt;
|175&lt;br /&gt;
|7.1&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.5|10.1.5]]&lt;br /&gt;
|2022-01-10&lt;br /&gt;
|584&lt;br /&gt;
|171&lt;br /&gt;
|7.1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.4|10.1.4]]&lt;br /&gt;
|2021-07-18&lt;br /&gt;
|584&lt;br /&gt;
|169&lt;br /&gt;
|7.1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.3|10.1.3]]&lt;br /&gt;
|2021-07-17&lt;br /&gt;
|583&lt;br /&gt;
|167&lt;br /&gt;
|7.1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.2|10.1.2]]&lt;br /&gt;
|2021-02-25&lt;br /&gt;
|582&lt;br /&gt;
|166&lt;br /&gt;
|7.1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.1|10.1.1]]&lt;br /&gt;
|2021-02-19&lt;br /&gt;
|582&lt;br /&gt;
|164&lt;br /&gt;
|7.1&lt;br /&gt;
|Warning about PHP version 7.2 starts here&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.0|10.1.0]]&lt;br /&gt;
|2021-01-31&lt;br /&gt;
|582&lt;br /&gt;
|161&lt;br /&gt;
|7.1&lt;br /&gt;
|Versions 10.1.0 and later require the database be from a version 9.5.0 or newer to perform an upgrade. (Min DB version 572) &lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.13|10.0.13]]&lt;br /&gt;
|2020-08-10&lt;br /&gt;
|579&lt;br /&gt;
|156&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.12|10.0.12]]&lt;br /&gt;
|2020-05-30&lt;br /&gt;
|579&lt;br /&gt;
|155&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.11|10.0.11]]&lt;br /&gt;
|2020-03-04&lt;br /&gt;
|578&lt;br /&gt;
|153&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.10|10.0.10]]&lt;br /&gt;
|2020-02-26&lt;br /&gt;
|578&lt;br /&gt;
|151&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.9|10.0.9]]&lt;br /&gt;
|2020-02-24&lt;br /&gt;
|578&lt;br /&gt;
|149&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.8|10.0.8]]&lt;br /&gt;
|2019-12-12&lt;br /&gt;
|576&lt;br /&gt;
|147&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.7|10.0.7]]&lt;br /&gt;
|2019-11-24&lt;br /&gt;
|576&lt;br /&gt;
|145&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.6|10.0.6]]&lt;br /&gt;
|2019-11-20&lt;br /&gt;
|576&lt;br /&gt;
|143&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.5|10.0.5]]&lt;br /&gt;
|2019-05-09&lt;br /&gt;
|575&lt;br /&gt;
|141&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.4|10.0.4]]&lt;br /&gt;
|2019-05-04&lt;br /&gt;
|575&lt;br /&gt;
|139&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.3|10.0.3]]&lt;br /&gt;
|2019-03-05&lt;br /&gt;
|574&lt;br /&gt;
|136&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.2|10.0.2]]&lt;br /&gt;
|2019-02-27&lt;br /&gt;
|574&lt;br /&gt;
|132&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.1|10.0.1]]&lt;br /&gt;
|2019-02-11&lt;br /&gt;
|573&lt;br /&gt;
|129&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.0|10.0.0]]&lt;br /&gt;
|2018-12-30&lt;br /&gt;
|572&lt;br /&gt;
|127&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.5.0|9.5.0]]&lt;br /&gt;
|2018-11-21&lt;br /&gt;
|572&lt;br /&gt;
|122&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.4.2|9.4.2]]&lt;br /&gt;
|2018-09-12&lt;br /&gt;
|570&lt;br /&gt;
|117&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.4.1|9.4.1]]&lt;br /&gt;
|2018-07-03&lt;br /&gt;
|570&lt;br /&gt;
|115&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.4.0|9.4.0]]&lt;br /&gt;
|2018-06-28&lt;br /&gt;
|570&lt;br /&gt;
|113&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.3.5|9.3.5]]&lt;br /&gt;
|2018-03-07&lt;br /&gt;
|556&lt;br /&gt;
|111&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.3.4|9.3.4]]&lt;br /&gt;
|2018-02-23&lt;br /&gt;
|555&lt;br /&gt;
|109&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.3.3|9.3.3]]&lt;br /&gt;
|2018-02-18&lt;br /&gt;
|554&lt;br /&gt;
|108&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9.3.2&lt;br /&gt;
|2018-01-11&lt;br /&gt;
|553&lt;br /&gt;
|106&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9.3.1&lt;br /&gt;
|2018-01-11&lt;br /&gt;
|553&lt;br /&gt;
|104&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.3.0|9.3.0]]&lt;br /&gt;
|2018-01-06&lt;br /&gt;
|553&lt;br /&gt;
|102&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9.2.0&lt;br /&gt;
|2017-06-05&lt;br /&gt;
|549&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.1.2|9.1.2]]&lt;br /&gt;
|2017-03-30&lt;br /&gt;
|549&lt;br /&gt;
|97&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.1.1|9.1.1]]&lt;br /&gt;
|2017-01-11&lt;br /&gt;
|548&lt;br /&gt;
|94&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.1.0|9.1.0]]&lt;br /&gt;
|2017-01-03&lt;br /&gt;
|547&lt;br /&gt;
|93&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.0.3|9.0.3]]&lt;br /&gt;
|2016-08-31&lt;br /&gt;
|544&lt;br /&gt;
|92&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.0.2|9.0.2]]&lt;br /&gt;
|2016-07-27&lt;br /&gt;
|544&lt;br /&gt;
|90&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.0.1|9.0.1]]&lt;br /&gt;
|2016-07-06&lt;br /&gt;
|543&lt;br /&gt;
|86&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.0.0|9.0.0]]&lt;br /&gt;
|2016-05-08&lt;br /&gt;
|542&lt;br /&gt;
|85&lt;br /&gt;
|&lt;br /&gt;
|Versions 9.0.0 and later require the database be from a version 8.2.9 or newer to perform an upgrade. (Min DB version 538) &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.10|8.2.10]]&lt;br /&gt;
|2015-12-02&lt;br /&gt;
|&lt;br /&gt;
|84&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.9|8.2.9]]&lt;br /&gt;
|2015-10-26&lt;br /&gt;
|&lt;br /&gt;
|83&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.8|8.2.8]]&lt;br /&gt;
|2015-06-13&lt;br /&gt;
|&lt;br /&gt;
|80&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.7|8.2.7]]&lt;br /&gt;
|2015-01-19&lt;br /&gt;
|&lt;br /&gt;
|75&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.6|8.2.6]]&lt;br /&gt;
|2014-07-17&lt;br /&gt;
|&lt;br /&gt;
|68&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.5|8.2.5]]&lt;br /&gt;
|2014-06-19&lt;br /&gt;
|&lt;br /&gt;
|67&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.4|8.2.4]]&lt;br /&gt;
|2014-05-12&lt;br /&gt;
|&lt;br /&gt;
|65&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.3|8.2.3]]&lt;br /&gt;
|2014-05-05&lt;br /&gt;
|&lt;br /&gt;
|62&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.2|8.2.2]]&lt;br /&gt;
|2013-12-12&lt;br /&gt;
|&lt;br /&gt;
|58&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.1|8.2.1]]&lt;br /&gt;
|2013-11-14&lt;br /&gt;
|&lt;br /&gt;
|56&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.0|8.2.0]]&lt;br /&gt;
|2013-06-01&lt;br /&gt;
|&lt;br /&gt;
|53&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.1.0|8.1.0]]&lt;br /&gt;
|2013-03-25&lt;br /&gt;
|&lt;br /&gt;
|52&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.0.0|8.0.0]]&lt;br /&gt;
|2013-02-25&lt;br /&gt;
|&lt;br /&gt;
|51&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.2.0|7.2.0]]&lt;br /&gt;
|2012-07-14&lt;br /&gt;
|&lt;br /&gt;
|48&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.1.0|7.1.0]]&lt;br /&gt;
|2012-04-11&lt;br /&gt;
|&lt;br /&gt;
|39&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.0.2|7.0.2]]&lt;br /&gt;
|2012-03-03&lt;br /&gt;
|&lt;br /&gt;
|37&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.0.1|7.0.1]]&lt;br /&gt;
|2012-02-05&lt;br /&gt;
|&lt;br /&gt;
|35&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.0.0|7.0.0]]&lt;br /&gt;
|2012-01-27&lt;br /&gt;
|&lt;br /&gt;
|32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also == &lt;br /&gt;
&lt;br /&gt;
[[Category:Upgrading]]&lt;br /&gt;
[[Category:Convention Master Release Notes]]&lt;br /&gt;
[[Category:Convention Master development]]&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Release_notes&amp;diff=718</id>
		<title>Release notes</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Release_notes&amp;diff=718"/>
		<updated>2023-02-25T15:43:53Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This page links to the various release notes available for Convention Master.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Info page&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Date Released&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | DB Version&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Public Subversion Revision&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Minimum PHP Version Supported&lt;br /&gt;
! rowspan=&amp;quot;1&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.8|10.1.8]]&lt;br /&gt;
|2022-11-16&lt;br /&gt;
|588&lt;br /&gt;
|184&lt;br /&gt;
|7.1&lt;br /&gt;
|PHP 8.2 now supported&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.7|10.1.7]]&lt;br /&gt;
|2022-11-16&lt;br /&gt;
|588&lt;br /&gt;
|182&lt;br /&gt;
|7.1&lt;br /&gt;
|PHP 8.2 now supported&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.6|10.1.6a]]&lt;br /&gt;
|2022-09-23&lt;br /&gt;
|588&lt;br /&gt;
|178&lt;br /&gt;
|7.1&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.6|10.1.6]]&lt;br /&gt;
|2022-09-14&lt;br /&gt;
|588&lt;br /&gt;
|175&lt;br /&gt;
|7.1&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.5|10.1.5]]&lt;br /&gt;
|2022-01-10&lt;br /&gt;
|584&lt;br /&gt;
|171&lt;br /&gt;
|7.1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.4|10.1.4]]&lt;br /&gt;
|2021-07-18&lt;br /&gt;
|584&lt;br /&gt;
|169&lt;br /&gt;
|7.1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.3|10.1.3]]&lt;br /&gt;
|2021-07-17&lt;br /&gt;
|583&lt;br /&gt;
|167&lt;br /&gt;
|7.1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.2|10.1.2]]&lt;br /&gt;
|2021-02-25&lt;br /&gt;
|582&lt;br /&gt;
|166&lt;br /&gt;
|7.1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.1|10.1.1]]&lt;br /&gt;
|2021-02-19&lt;br /&gt;
|582&lt;br /&gt;
|164&lt;br /&gt;
|7.1&lt;br /&gt;
|Warning about PHP version 7.2 starts here&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.1.0|10.1.0]]&lt;br /&gt;
|2021-01-31&lt;br /&gt;
|582&lt;br /&gt;
|161&lt;br /&gt;
|7.1&lt;br /&gt;
|Versions 10.1.0 and later require the database be from a version 9.5.0 or newer to perform an upgrade. (Min DB version 572) &lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.13|10.0.13]]&lt;br /&gt;
|2020-08-10&lt;br /&gt;
|579&lt;br /&gt;
|156&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.12|10.0.12]]&lt;br /&gt;
|2020-05-30&lt;br /&gt;
|579&lt;br /&gt;
|155&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.11|10.0.11]]&lt;br /&gt;
|2020-03-04&lt;br /&gt;
|578&lt;br /&gt;
|153&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.10|10.0.10]]&lt;br /&gt;
|2020-02-26&lt;br /&gt;
|578&lt;br /&gt;
|151&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.9|10.0.9]]&lt;br /&gt;
|2020-02-24&lt;br /&gt;
|578&lt;br /&gt;
|149&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.8|10.0.8]]&lt;br /&gt;
|2019-12-12&lt;br /&gt;
|576&lt;br /&gt;
|147&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.7|10.0.7]]&lt;br /&gt;
|2019-11-24&lt;br /&gt;
|576&lt;br /&gt;
|145&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.6|10.0.6]]&lt;br /&gt;
|2019-11-20&lt;br /&gt;
|576&lt;br /&gt;
|143&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.5|10.0.5]]&lt;br /&gt;
|2019-05-09&lt;br /&gt;
|575&lt;br /&gt;
|141&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.4|10.0.4]]&lt;br /&gt;
|2019-05-04&lt;br /&gt;
|575&lt;br /&gt;
|139&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.3|10.0.3]]&lt;br /&gt;
|2019-03-05&lt;br /&gt;
|574&lt;br /&gt;
|136&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.2|10.0.2]]&lt;br /&gt;
|2019-02-27&lt;br /&gt;
|574&lt;br /&gt;
|132&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.1|10.0.1]]&lt;br /&gt;
|2019-02-11&lt;br /&gt;
|573&lt;br /&gt;
|129&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/10.0.0|10.0.0]]&lt;br /&gt;
|2018-12-30&lt;br /&gt;
|572&lt;br /&gt;
|127&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.5.0|9.5.0]]&lt;br /&gt;
|2018-11-21&lt;br /&gt;
|572&lt;br /&gt;
|122&lt;br /&gt;
|5.6&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.4.2|9.4.2]]&lt;br /&gt;
|2018-09-12&lt;br /&gt;
|570&lt;br /&gt;
|117&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.4.1|9.4.1]]&lt;br /&gt;
|2018-07-03&lt;br /&gt;
|570&lt;br /&gt;
|115&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.4.0|9.4.0]]&lt;br /&gt;
|2018-06-28&lt;br /&gt;
|570&lt;br /&gt;
|113&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.3.5|9.3.5]]&lt;br /&gt;
|2018-03-07&lt;br /&gt;
|556&lt;br /&gt;
|111&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.3.4|9.3.4]]&lt;br /&gt;
|2018-02-23&lt;br /&gt;
|555&lt;br /&gt;
|109&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.3.3|9.3.3]]&lt;br /&gt;
|2018-02-18&lt;br /&gt;
|554&lt;br /&gt;
|108&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9.3.2&lt;br /&gt;
|2018-01-11&lt;br /&gt;
|553&lt;br /&gt;
|106&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9.3.1&lt;br /&gt;
|2018-01-11&lt;br /&gt;
|553&lt;br /&gt;
|104&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.3.0|9.3.0]]&lt;br /&gt;
|2018-01-06&lt;br /&gt;
|553&lt;br /&gt;
|102&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|9.2.0&lt;br /&gt;
|2017-06-05&lt;br /&gt;
|549&lt;br /&gt;
|100&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.1.2|9.1.2]]&lt;br /&gt;
|2017-03-30&lt;br /&gt;
|549&lt;br /&gt;
|97&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.1.1|9.1.1]]&lt;br /&gt;
|2017-01-11&lt;br /&gt;
|548&lt;br /&gt;
|94&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.1.0|9.1.0]]&lt;br /&gt;
|2017-01-03&lt;br /&gt;
|547&lt;br /&gt;
|93&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.0.3|9.0.3]]&lt;br /&gt;
|2016-08-31&lt;br /&gt;
|544&lt;br /&gt;
|92&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.0.2|9.0.2]]&lt;br /&gt;
|2016-07-27&lt;br /&gt;
|544&lt;br /&gt;
|90&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.0.1|9.0.1]]&lt;br /&gt;
|2016-07-06&lt;br /&gt;
|543&lt;br /&gt;
|86&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/9.0.0|9.0.0]]&lt;br /&gt;
|2016-05-08&lt;br /&gt;
|542&lt;br /&gt;
|85&lt;br /&gt;
|&lt;br /&gt;
|Versions 9.0.0 and later require the database be from a version 8.2.9 or newer to perform an upgrade. (Min DB version 538) &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.10|8.2.10]]&lt;br /&gt;
|2015-12-02&lt;br /&gt;
|&lt;br /&gt;
|84&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.9|8.2.9]]&lt;br /&gt;
|2015-10-26&lt;br /&gt;
|&lt;br /&gt;
|83&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.8|8.2.8]]&lt;br /&gt;
|2015-06-13&lt;br /&gt;
|&lt;br /&gt;
|80&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.7|8.2.7]]&lt;br /&gt;
|2015-01-19&lt;br /&gt;
|&lt;br /&gt;
|75&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.6|8.2.6]]&lt;br /&gt;
|2014-07-17&lt;br /&gt;
|&lt;br /&gt;
|68&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.5|8.2.5]]&lt;br /&gt;
|2014-06-19&lt;br /&gt;
|&lt;br /&gt;
|67&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.4|8.2.4]]&lt;br /&gt;
|2014-05-12&lt;br /&gt;
|&lt;br /&gt;
|65&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.3|8.2.3]]&lt;br /&gt;
|2014-05-05&lt;br /&gt;
|&lt;br /&gt;
|62&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.2|8.2.2]]&lt;br /&gt;
|2013-12-12&lt;br /&gt;
|&lt;br /&gt;
|58&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.1|8.2.1]]&lt;br /&gt;
|2013-11-14&lt;br /&gt;
|&lt;br /&gt;
|56&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.2.0|8.2.0]]&lt;br /&gt;
|2013-06-01&lt;br /&gt;
|&lt;br /&gt;
|53&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.1.0|8.1.0]]&lt;br /&gt;
|2013-03-25&lt;br /&gt;
|&lt;br /&gt;
|52&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/8.0.0|8.0.0]]&lt;br /&gt;
|2013-02-25&lt;br /&gt;
|&lt;br /&gt;
|51&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.2.0|7.2.0]]&lt;br /&gt;
|2012-07-14&lt;br /&gt;
|&lt;br /&gt;
|48&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.1.0|7.1.0]]&lt;br /&gt;
|2012-04-11&lt;br /&gt;
|&lt;br /&gt;
|39&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.0.2|7.0.2]]&lt;br /&gt;
|2012-03-03&lt;br /&gt;
|&lt;br /&gt;
|37&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.0.1|7.0.1]]&lt;br /&gt;
|2012-02-05&lt;br /&gt;
|&lt;br /&gt;
|35&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[Release notes/7.0.0|7.0.0]]&lt;br /&gt;
|2012-01-27&lt;br /&gt;
|&lt;br /&gt;
|32&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also == &lt;br /&gt;
&lt;br /&gt;
[[Category:Upgrading]]&lt;br /&gt;
[[Category:Convention Master Release Notes]]&lt;br /&gt;
[[Category:Convention Master development]]&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Release_notes/10.1.8&amp;diff=717</id>
		<title>Release notes/10.1.8</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Release_notes/10.1.8&amp;diff=717"/>
		<updated>2023-02-25T15:41:36Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt; [[Release notes]]&lt;br /&gt;
&lt;br /&gt;
'''Convention Master 10.1.8''' Released on January 12, 2023. &lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
    Release notes for version 10.1.8.&lt;br /&gt;
     January 12, 2023, 00:54:&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
The following changes and or features were added:&lt;br /&gt;
* No new features or feature changes in this release&lt;br /&gt;
Other fixes/changes:&lt;br /&gt;
* Fixed a problem with new events wizard where it had problems inserting badge types into a new event.&lt;br /&gt;
* Fixed a issue with badge editor that caused a fatal error when loading the badge editor with a event with no attendance.&lt;br /&gt;
* Fixed Square Payment provider - Upgrade square to v2 api so it works again note 3d secure payments dont work - and didnt before&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Release_notes/10.1.8&amp;diff=716</id>
		<title>Release notes/10.1.8</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Release_notes/10.1.8&amp;diff=716"/>
		<updated>2023-02-25T15:41:18Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt; [[Release notes]]&lt;br /&gt;
&lt;br /&gt;
'''Convention Master 10.1.8''' Released on January 12, 2023. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
    Release notes for version 10.1.7.&lt;br /&gt;
     November 16, 2022, 05:40:&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
    Release notes for version 10.1.8.&lt;br /&gt;
     January 12, 2023, 00:54:&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
The following changes and or features were added:&lt;br /&gt;
* No new features or feature changes in this release&lt;br /&gt;
Other fixes/changes:&lt;br /&gt;
* Fixed a problem with new events wizard where it had problems inserting badge types into a new event.&lt;br /&gt;
* Fixed a issue with badge editor that caused a fatal error when loading the badge editor with a event with no attendance.&lt;br /&gt;
* Fixed Square Payment provider - Upgrade square to v2 api so it works again note 3d secure payments dont work - and didnt before&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Release_notes/10.1.8&amp;diff=715</id>
		<title>Release notes/10.1.8</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Release_notes/10.1.8&amp;diff=715"/>
		<updated>2023-02-25T15:40:55Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt; [[Release notes]]&lt;br /&gt;
&lt;br /&gt;
'''Convention Master 10.1.8''' Released on January 12, 2023. &lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
    Release notes for version 10.1.8.&lt;br /&gt;
     January 12, 2023, 00:54:&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
The following changes and or features were added:&lt;br /&gt;
* No new features or feature changes in this release&lt;br /&gt;
Other fixes/changes:&lt;br /&gt;
* Fixed a problem with new events wizard where it had problems inserting badge types into a new event.&lt;br /&gt;
* Fixed a issue with badge editor that caused a fatal error when loading the badge editor with a event with no attendance.&lt;br /&gt;
* Fixed Square Payment provider - Upgrade square to v2 api so it works again note 3d secure payments dont work - and didnt before&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Release_notes/10.1.8&amp;diff=714</id>
		<title>Release notes/10.1.8</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Release_notes/10.1.8&amp;diff=714"/>
		<updated>2023-02-25T15:38:39Z</updated>

		<summary type="html">&lt;p&gt;Aloha: Created page with &amp;quot;&amp;lt; Release notes  '''Convention Master 10.1.8''' Released on January 12, 2023.   ----------------------------------------------------     Release notes for version 10.1.8.      January 12, 2023, 00:54: ----------------------------------------------------   The following changes and or features were added:     * No new features or feature changes in this release  Other fixes/changes:     * Fixed a problem with new events wizard where it had problems inserting badge typ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt; [[Release notes]]&lt;br /&gt;
&lt;br /&gt;
'''Convention Master 10.1.8''' Released on January 12, 2023. &lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
    Release notes for version 10.1.8.&lt;br /&gt;
     January 12, 2023, 00:54:&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
 The following changes and or features were added:&lt;br /&gt;
    * No new features or feature changes in this release&lt;br /&gt;
 Other fixes/changes:&lt;br /&gt;
    * Fixed a problem with new events wizard where it had problems inserting badge types into a new event.&lt;br /&gt;
	* Fixed a issue with badge editor that caused a fatal error when loading the badge editor with a event with no attendance.&lt;br /&gt;
	* Fixed Square Payment provider - Upgrade square to v2 api so it works again note 3d secure payments dont work - and didnt before&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Release_notes/10.1.6&amp;diff=502</id>
		<title>Release notes/10.1.6</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Release_notes/10.1.6&amp;diff=502"/>
		<updated>2022-09-21T03:15:44Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt; [[Release notes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Convention Master 10.1.6''' Released on January 10, 2022. &lt;br /&gt;
&lt;br /&gt;
'''UPGRADE WARNING:''' If you are currently on version 10.0.x, release 10.1 has special instructions added to the upgrade process. Please make sure you read them before performing an upgrade. See [[Upgrading Convention Master]]&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
          Release notes for version 10.1.6.&lt;br /&gt;
                 September 14, 2022&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 The following changes and or features were added&lt;br /&gt;
&lt;br /&gt;
* Mantis 525 - Bag stuffing stickers PDF now better chops pages without wasted paper.&lt;br /&gt;
* Mantis 786 - Bag stuffing stickers can now be printed to PDF printers.&lt;br /&gt;
* Mantis 834 - Bag stuffing stickers can now be printed to a PDF file that you can download.&lt;br /&gt;
* Mantis 945 - Improved the submit button to prevent multiple clicks from resubmitting the form in den application kiosks. This will prevent duplicated den applications. Also updated table style of pre-auth space codes to match the rest of the kiosk steps.&lt;br /&gt;
* Mantis 958 - Bag stuffing stickers now use the standard printer queue system and support all printer types.&lt;br /&gt;
* Mantis 1038 - Bag stuffing stickers can now be printed using the filtering system.&lt;br /&gt;
* Mantis 1105 - Fixed bug that prevented Space Requests from being deleted by applicants in the ArtShow/Dealer Application kiosks.&lt;br /&gt;
* Mantis 1144 - Overhauled Bag Stuffing Sticker system.&lt;br /&gt;
* Mantis 1165 - Corrected a bug that prevented &amp;quot;use event default&amp;quot; from working correctly on the agreements step of the kiosk.&lt;br /&gt;
* Mantis 1167 - Overhauled Payment Holds system to handle abandoned carts and instant payment methods better so automated tasks can be used to clean up abandoned shopping carts effectively.&lt;br /&gt;
* Mantis 1195 - Created a new feature that will log the history of Fan name and legal name changes and provide the ability to search for previously used names quickly.&lt;br /&gt;
* Mantis 1214 - Created a new feature to find and display user account duplicates.&lt;br /&gt;
* Mantis 1217 - Upgrade license checks to warn when a valid license is installed but is for the wrong event database. &lt;br /&gt;
    (primarily to help our customers who share equipment between multiple events.)&lt;br /&gt;
* Mantis 1218 - Added PHP CLI diagnostic info to the Diagnostic Log to assist in debugging installation issues.&lt;br /&gt;
* Mantis 1219 - Updated DB Sanitization script for registrant notes.&lt;br /&gt;
* Mantis 1227 - Fixed an issue preventing database upgrades prior to v576 from working in some situations.&lt;br /&gt;
* Mantis 1231 - Added the barcode options to the Online Payment kiosk step. This will allow people to pay in line and display a barcode on their phone to be ready for the cashier.&lt;br /&gt;
* Mantis 1234 - Improved the submit button to prevent multiple clicks from resubmitting the form in kiosks. This will prevent duplicate notification emails.&lt;br /&gt;
* Mantis 1235 - Improved method used to pass data in URLs. &lt;br /&gt;
    Note: This will invalidate some URLs generated on console/kiosk pages before applying the update. &lt;br /&gt;
    Refreshing the page will generate new URLs, which only matters to users actively using CM during the upgrade.&lt;br /&gt;
* Mantis 1239 - Automatically process zero-dollar payments (if applicable) on the Kiosk payment step. This resolves an issue for events using memberships that cost $0 that comes with bag-stuffed products.&lt;br /&gt;
* Mantis 1240 - Add a default payment hold to the user's account at the select membership kiosk screen if their payment hold is either non-existent or expired.&lt;br /&gt;
* Mantis 1241 - Add a default payment hold to the user's account at the go shopping kiosk screen if their payment hold is either non-existent or expired.&lt;br /&gt;
* Mantis 1242 - Ensure that instant payment Gateway transactions create a payment hold in the kiosk payment holds system.&lt;br /&gt;
* Mantis 1246 - Corrected an issue where certain situations could prevent bag stuffing labels from being generated for bag stuffed products purchased with a voucher.&lt;br /&gt;
* Mantis 1248 - Updated database migration runner for newer versions of MySQL server to prevent UTF8 upgrade from running unnecessarily during database migrations. (this only impacted performance - no data was modified.)&lt;br /&gt;
* Mantis 1253 - Updated DB Sanitization script to run at the current database version.&lt;br /&gt;
* Mantis 1254 - Updated Kiosk change name step to utilize new name logging system.&lt;br /&gt;
* Mantis 1258 - Corrected an issue on the choose freebies kiosk step, allowing you to select an out-of-stock product if it had a negative number remaining in inventory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{UpgradeAdvice}}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=499</id>
		<title>Sending parsed DL-ID data to CM</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=499"/>
		<updated>2022-09-19T17:09:17Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When trying to implement reading of DL/ID barcodes we realized a way to pass the information to CM in a machine parsable way that was easy to send via a web browser without add-on software was needed.&lt;br /&gt;
&lt;br /&gt;
This document attempts to create a standard so either mobile applications, or hardware imagers can be programmed to send the needed DL/ID information to CM, in a way that is universal and easy to understand.&lt;br /&gt;
&lt;br /&gt;
Note, any field concatenation should be done on the server side, and blank fields are allowed, and will be ignored by the server side parser.&lt;br /&gt;
&lt;br /&gt;
== V1 Data String ==&lt;br /&gt;
&amp;lt;tt&amp;gt;!V1!firstname!lastname!suffix!dateofbirth!address1!address2!city!state!postalcode!country&amp;lt;enter&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more information about the AAMVA field, see ''Annex D'' of the AAMVA DL/ID Card Design Standard&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ V1 Data String Breakdown and Explanation&lt;br /&gt;
|-&lt;br /&gt;
! Data String !! AAMVA field !! Field Information !! Notes/Definition&lt;br /&gt;
|-&lt;br /&gt;
| V1 || N/A || !V followed by up to 3 numbers || Version String&lt;br /&gt;
|-&lt;br /&gt;
| firstname || DAC || Up to 40 Chars ANSI Text || First name of the cardholder.&lt;br /&gt;
|-&lt;br /&gt;
| lastname || DCS || Up to 40 Chars ANSI Text || Family Name of the Cardholder&lt;br /&gt;
|-&lt;br /&gt;
| suffix || DCU || Up to 40 Chars ANSI Text || Name Suffix (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| dateofbirth || DBB || 8 Characters Numbers Only || CM Expected format is CCYYMMDD, format on license may be MMDDCCYY or CCYYMMDD, Reader must convert&lt;br /&gt;
|-&lt;br /&gt;
| address1 || DAG || Up to 35 Chars ANSI Text || Street Portion of Address&lt;br /&gt;
|-&lt;br /&gt;
| address2 || DAH || Up to 35 Chars ANSI Text || Second Line of Address (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| city || DAI || Up to 20 Chars ANSI Text || City Portion of Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| state || DAJ || 2 Chars ANSI Text || State Portion of the Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| postalcode || DAK || Up to 11 Chars ANSI Text || Postal Code, includes zip+4 for US&lt;br /&gt;
|-&lt;br /&gt;
| country || DCG || 3 Chars ANSI Text || Country the Card is issued in&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;enter&amp;gt; || N/A || N/A || Send the Enter Key when done reading.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reference Documents==&lt;br /&gt;
[https://www.aamva.org/assets/best-practices-guidance/dl-id-card-design-standard AAMVA DL/ID Card Design Standard]&lt;br /&gt;
&lt;br /&gt;
[https://www.zebra.com/us/en/support-downloads/scanners/general-purpose-scanners/ds6708-dl.html Support Page to obtain product reference guide for DS6708]&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=498</id>
		<title>Sending parsed DL-ID data to CM</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=498"/>
		<updated>2022-09-19T17:03:55Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When trying to implement reading of DL/ID barcodes we realized a way to pass the information to CM in a machine parsable way that was easy to send via a web browser without add-on software was needed.&lt;br /&gt;
&lt;br /&gt;
This document attempts to create a standard so either mobile applications, or hardware imagers can be programmed to send the needed DL/ID information to CM, in a way that is universal and easy to understand.&lt;br /&gt;
&lt;br /&gt;
Note, any field concatenation should be done on the server side, and blank fields are allowed, and will be ignored by the server side parser.&lt;br /&gt;
&lt;br /&gt;
== V1 Data String ==&lt;br /&gt;
&amp;lt;tt&amp;gt;!V1!firstname!lastname!suffix!dateofbirth!address1!address2!city!state!postalcode!country&amp;lt;enter&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more information about the AAMVA field, see ''Annex D'' of the AAMVA DL/ID Card Design Standard&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ V1 Data String Breakdown and Explanation&lt;br /&gt;
|-&lt;br /&gt;
! Data String !! AAMVA field !! Field Information !! Notes/Definition&lt;br /&gt;
|-&lt;br /&gt;
| V1 || N/A || !V followed by up to 3 numbers || Version String&lt;br /&gt;
|-&lt;br /&gt;
| firstname || DAC || Up to 40 Chars ANSI Text || First name of the cardholder.&lt;br /&gt;
|-&lt;br /&gt;
| lastname || DCS || Up to 40 Chars ANSI Text || Family Name of the Cardholder&lt;br /&gt;
|-&lt;br /&gt;
| suffix || DCU || Up to 40 Chars ANSI Text || Name Suffix (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| dateofbirth || DBB || Up to 40 Chars ANSI Text || CM Expected format is CCYYMMDD, format on license may be MMDDCCYY or CCYYMMDD, Reader must convert&lt;br /&gt;
|-&lt;br /&gt;
| address1 || DAG || Up to 40 Chars ANSI Text || Street Portion of Address&lt;br /&gt;
|-&lt;br /&gt;
| address2 || DAH || Up to 40 Chars ANSI Text || Second Line of Address (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| city || DAI || Up to 40 Chars ANSI Text || City Portion of Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| state || DAJ || Up to 40 Chars ANSI Text || State Portion of the Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| postalcode || DAK || Up to 40 Chars ANSI Text || Postal Code, includes zip+4 for US&lt;br /&gt;
|-&lt;br /&gt;
| country || DCG || Up to 40 Chars ANSI Text || Country the Card is issued in&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;enter&amp;gt; || N/A || N/A || Send the Enter Key when done reading.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reference Documents==&lt;br /&gt;
[https://www.aamva.org/assets/best-practices-guidance/dl-id-card-design-standard AAMVA DL/ID Card Design Standard]&lt;br /&gt;
&lt;br /&gt;
[https://www.zebra.com/us/en/support-downloads/scanners/general-purpose-scanners/ds6708-dl.html Support Page to obtain product reference guide for DS6708]&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=497</id>
		<title>Sending parsed DL-ID data to CM</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=497"/>
		<updated>2022-08-25T17:24:24Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When trying to implement reading of DL/ID barcodes we realized a way to pass the information to CM in a machine parsable way that was easy to send via a web browser without add-on software was needed.&lt;br /&gt;
&lt;br /&gt;
This document attempts to create a standard so either mobile applications, or hardware imagers can be programmed to send the needed DL/ID information to CM, in a way that is universal and easy to understand.&lt;br /&gt;
&lt;br /&gt;
Note, any field concatenation should be done on the server side, and blank fields are allowed, and will be ignored by the server side parser.&lt;br /&gt;
&lt;br /&gt;
== V1 Data String ==&lt;br /&gt;
&amp;lt;tt&amp;gt;!V1!firstname!lastname!suffix!dateofbirth!address1!address2!city!state!postalcode!country&amp;lt;enter&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more information about the AAMVA field, see ''Annex D'' of the AAMVA DL/ID Card Design Standard&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ V1 Data String Breakdown and Explanation&lt;br /&gt;
|-&lt;br /&gt;
! Data String !! AAMVA field !! Notes/Definition&lt;br /&gt;
|-&lt;br /&gt;
| V1 || N/A || Version String&lt;br /&gt;
|-&lt;br /&gt;
| firstname || DAC || First name of the cardholder.&lt;br /&gt;
|-&lt;br /&gt;
| lastname || DCS || Family Name of the Cardholder&lt;br /&gt;
|-&lt;br /&gt;
| suffix || DCU || Name Suffix (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| dateofbirth || DBB || CM Expected format is CCYYMMDD, format on license may be MMDDCCYY or CCYYMMDD, Reader must convert&lt;br /&gt;
|-&lt;br /&gt;
| address1 || DAG || Street Portion of Address&lt;br /&gt;
|-&lt;br /&gt;
| address2 || DAH || Second Line of Address (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| city || DAI || City Portion of Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| state || DAJ || State Portion of the Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| postalcode || DAK || Postal Code, includes zip+4 for US&lt;br /&gt;
|-&lt;br /&gt;
| country || DCG || Country the Card is issued in&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;enter&amp;gt; || N/A || Send the Enter Key when done reading.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reference Documents==&lt;br /&gt;
[https://www.aamva.org/assets/best-practices-guidance/dl-id-card-design-standard AAMVA DL/ID Card Design Standard]&lt;br /&gt;
&lt;br /&gt;
[https://www.zebra.com/us/en/support-downloads/scanners/general-purpose-scanners/ds6708-dl.html Support Page to obtain product reference guide for DS6708]&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=496</id>
		<title>Sending parsed DL-ID data to CM</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=496"/>
		<updated>2022-08-25T17:22:48Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When trying to implement reading of DL/ID barcodes we realized a way to pass the information to CM in a machine parsable way that was easy to send via a web browser without add-on software was needed.&lt;br /&gt;
&lt;br /&gt;
This document attempts to create a standard so either mobile applications, or hardware imagers can be programmed to send the needed DL/ID information to CM, in a way that is universal and easy to understand.&lt;br /&gt;
&lt;br /&gt;
== V1 Data String ==&lt;br /&gt;
&amp;lt;tt&amp;gt;!V1!firstname!lastname!suffix!dateofbirth!address1!address2!city!state!postalcode!country&amp;lt;enter&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more information about the AAMVA field, see ''Annex D'' of the AAMVA DL/ID Card Design Standard&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ V1 Data String Breakdown and Explanation&lt;br /&gt;
|-&lt;br /&gt;
! Data String !! AAMVA field !! Notes/Definition&lt;br /&gt;
|-&lt;br /&gt;
| V1 || N/A || Version String&lt;br /&gt;
|-&lt;br /&gt;
| firstname || DAC || First name of the cardholder.&lt;br /&gt;
|-&lt;br /&gt;
| lastname || DCS || Family Name of the Cardholder&lt;br /&gt;
|-&lt;br /&gt;
| suffix || DCU || Name Suffix (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| dateofbirth || DBB || CM Expected format is CCYYMMDD, format on license may be MMDDCCYY or CCYYMMDD, Reader must convert&lt;br /&gt;
|-&lt;br /&gt;
| address1 || DAG || Street Portion of Address&lt;br /&gt;
|-&lt;br /&gt;
| address2 || DAH || Second Line of Address (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| city || DAI || City Portion of Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| state || DAJ || State Portion of the Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| postalcode || DAK || Postal Code, includes zip+4 for US&lt;br /&gt;
|-&lt;br /&gt;
| country || DCG || Country the Card is issued in&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;enter&amp;gt; || N/A || Send the Enter Key when done reading.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reference Documents==&lt;br /&gt;
[https://www.aamva.org/assets/best-practices-guidance/dl-id-card-design-standard AAMVA DL/ID Card Design Standard]&lt;br /&gt;
&lt;br /&gt;
[https://www.zebra.com/us/en/support-downloads/scanners/general-purpose-scanners/ds6708-dl.html Support Page to obtain product reference guide for DS6708]&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=495</id>
		<title>Sending parsed DL-ID data to CM</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=495"/>
		<updated>2022-08-25T17:12:54Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When trying to implement reading of DL/ID barcodes we realized a way to pass the information to CM in a machine parsable way was needed.&lt;br /&gt;
&lt;br /&gt;
This document attempts to create a standard so either mobile applications, or hardware imagers can be programmed to send the needed DL/ID information to CM, in a way that is universal and easy to understand.&lt;br /&gt;
&lt;br /&gt;
== V1 Data String ==&lt;br /&gt;
&amp;lt;tt&amp;gt;!V1!firstname!lastname!suffix!dateofbirth!address1!address2!city!state!postalcode!country&amp;lt;enter&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more information about the AAMVA field, see ''Annex D'' of the AAMVA DL/ID Card Design Standard&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ V1 Data String Breakdown and Explanation&lt;br /&gt;
|-&lt;br /&gt;
! Data String !! AAMVA field !! Notes/Definition&lt;br /&gt;
|-&lt;br /&gt;
| V1 || N/A || Version String&lt;br /&gt;
|-&lt;br /&gt;
| firstname || DAC || First name of the cardholder.&lt;br /&gt;
|-&lt;br /&gt;
| lastname || DCS || Family Name of the Cardholder&lt;br /&gt;
|-&lt;br /&gt;
| suffix || DCU || Name Suffix (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| dateofbirth || DBB || CM Expected format is CCYYMMDD, format on license may be MMDDCCYY or CCYYMMDD, Reader must convert&lt;br /&gt;
|-&lt;br /&gt;
| address1 || DAG || Street Portion of Address&lt;br /&gt;
|-&lt;br /&gt;
| address2 || DAH || Second Line of Address (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| city || DAI || City Portion of Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| state || DAJ || State Portion of the Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| postalcode || DAK || Postal Code, includes zip+4 for US&lt;br /&gt;
|-&lt;br /&gt;
| country || DCG || Country the Card is issued in&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;enter&amp;gt; || N/A || Send the Enter Key when done reading.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reference Documents==&lt;br /&gt;
[https://www.aamva.org/assets/best-practices-guidance/dl-id-card-design-standard AAMVA DL/ID Card Design Standard]&lt;br /&gt;
&lt;br /&gt;
[https://www.zebra.com/us/en/support-downloads/scanners/general-purpose-scanners/ds6708-dl.html Support Page to obtain product reference guide for DS6708]&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=494</id>
		<title>Sending parsed DL-ID data to CM</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=494"/>
		<updated>2022-08-25T17:12:30Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When trying to implement reading of DL/ID barcodes we realized a way to pass the information to CM in a machine parsable way was needed.&lt;br /&gt;
&lt;br /&gt;
This document attempts to create a standard so either mobile applications, or hardware imagers can be programmed to send the needed DL/ID information to CM, in a way that is universal and easy to understand.&lt;br /&gt;
&lt;br /&gt;
== V1 Data String ==&lt;br /&gt;
&amp;lt;tt&amp;gt;!V1!firstname!lastname!suffix!dateofbirth!address1!address2!city!state!postalcode!country&amp;lt;enter&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more information about the AAMVA field, see ''Annex D'' of the AAMVA DL/ID Card Design Standard&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ V1 Data String Breakdown and Explanation&lt;br /&gt;
|-&lt;br /&gt;
! Data String !! AAMVA field !! Notes/Definition&lt;br /&gt;
|-&lt;br /&gt;
| V1 || N/A || Version String&lt;br /&gt;
|-&lt;br /&gt;
| firstname || DAC || First name of the cardholder.&lt;br /&gt;
|-&lt;br /&gt;
| lastname || DCS || Family Name of the Cardholder&lt;br /&gt;
|-&lt;br /&gt;
| suffix || DCU || Name Suffix (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| dateofbirth || DBB || CM Expected format is CCYYMMDD, format on license may be MMDDCCYY or CCYYMMDD, Reader must convert&lt;br /&gt;
|-&lt;br /&gt;
| address1 || DAG || Street Portion of Address&lt;br /&gt;
|-&lt;br /&gt;
| address2 || DAH || Second Line of Address (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| city || DAI || City Portion of Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| state || DAJ || State Portion of the Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| postalcode || DAK || Postal Code, includes zip+4 for US&lt;br /&gt;
|-&lt;br /&gt;
| country || DCG || Country the Card is issued in&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;enter&amp;gt; || N/A || Send the Enter Key when done reading.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Reference Documents==&lt;br /&gt;
[https://www.aamva.org/assets/best-practices-guidance/dl-id-card-design-standard AAMVA DL/ID Card Design Standard]&lt;br /&gt;
[https://www.zebra.com/us/en/support-downloads/scanners/general-purpose-scanners/ds6708-dl.html Support Page to obtain product reference guide for DS6708]&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=493</id>
		<title>Sending parsed DL-ID data to CM</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=493"/>
		<updated>2022-08-25T17:06:52Z</updated>

		<summary type="html">&lt;p&gt;Aloha: /* V1 Data String */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== V1 Data String ==&lt;br /&gt;
&amp;lt;tt&amp;gt;!V1!firstname!lastname!suffix!dateofbirth!address1!address2!city!state!postalcode!country&amp;lt;enter&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ V1 Data String Breakdown and Explanation&lt;br /&gt;
|-&lt;br /&gt;
! Data String !! AAMVA field !! Notes/Definition&lt;br /&gt;
|-&lt;br /&gt;
| V1 || N/A || Version String&lt;br /&gt;
|-&lt;br /&gt;
| firstname || DAC || First name of the cardholder.&lt;br /&gt;
|-&lt;br /&gt;
| lastname || DCS || Family Name of the Cardholder&lt;br /&gt;
|-&lt;br /&gt;
| suffix || DCU || Name Suffix (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| dateofbirth || DBB || CM Expected format is CCYYMMDD, format on license may be MMDDCCYY or CCYYMMDD, Reader must convert&lt;br /&gt;
|-&lt;br /&gt;
| address1 || DAG || Street Portion of Address&lt;br /&gt;
|-&lt;br /&gt;
| address2 || DAH || Second Line of Address (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| city || DAI || City Portion of Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| state || DAJ || State Portion of the Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| postalcode || DAK || Postal Code, includes zip+4 for US&lt;br /&gt;
|-&lt;br /&gt;
| country || DCG || Country the Card is issued in&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;enter&amp;gt; || N/A || Send the Enter Key when done reading.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=492</id>
		<title>Sending parsed DL-ID data to CM</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=492"/>
		<updated>2022-08-25T17:04:54Z</updated>

		<summary type="html">&lt;p&gt;Aloha: /* V1 Data String */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== V1 Data String ==&lt;br /&gt;
&amp;lt;nowiki&amp;gt;!V1!firstname!lastname!suffix!dateofbirth!address1!address2!city!state!postalcode!country&amp;lt;enter&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ V1 Data String Breakdown and Explanation&lt;br /&gt;
|-&lt;br /&gt;
! Data String !! AAMVA field !! Notes/Definition&lt;br /&gt;
|-&lt;br /&gt;
| V1 || N/A || Version String&lt;br /&gt;
|-&lt;br /&gt;
| firstname || DAC || First name of the cardholder.&lt;br /&gt;
|-&lt;br /&gt;
| lastname || DCS || Family Name of the Cardholder&lt;br /&gt;
|-&lt;br /&gt;
| suffix || DCU || Name Suffix (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| dateofbirth || DBB || CM Expected format is CCYYMMDD, format on license may be MMDDCCYY or CCYYMMDD, Reader must convert&lt;br /&gt;
|-&lt;br /&gt;
| address1 || DAG || Street Portion of Address&lt;br /&gt;
|-&lt;br /&gt;
| address2 || DAH || Second Line of Address (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| city || DAI || City Portion of Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| state || DAJ || State Portion of the Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| postalcode || DAK || Postal Code, includes zip+4 for US&lt;br /&gt;
|-&lt;br /&gt;
| country || DCG || Country the Card is issued in&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;enter&amp;gt; || N/A || Send the Enter Key when done reading.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=491</id>
		<title>Sending parsed DL-ID data to CM</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=491"/>
		<updated>2022-08-25T17:04:22Z</updated>

		<summary type="html">&lt;p&gt;Aloha: /* V1 Data String */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== V1 Data String ==&lt;br /&gt;
!V1!firstname!lastname!suffix!dateofbirth!address1!address2!city!state!postalcode!country&amp;lt;enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ V1 Data String Breakdown and Explanation&lt;br /&gt;
|-&lt;br /&gt;
! Data String !! AAMVA field !! Notes/Definition&lt;br /&gt;
|-&lt;br /&gt;
| V1 || N/A || Version String&lt;br /&gt;
|-&lt;br /&gt;
| firstname || DAC || First name of the cardholder.&lt;br /&gt;
|-&lt;br /&gt;
| lastname || DCS || Family Name of the Cardholder&lt;br /&gt;
|-&lt;br /&gt;
| suffix || DCU || Name Suffix (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| dateofbirth || DBB || CM Expected format is CCYYMMDD, format on license may be MMDDCCYY or CCYYMMDD, Reader must convert&lt;br /&gt;
|-&lt;br /&gt;
| address1 || DAG || Street Portion of Address&lt;br /&gt;
|-&lt;br /&gt;
| address2 || DAH || Second Line of Address (Issuer Optional)&lt;br /&gt;
|-&lt;br /&gt;
| city || DAI || City Portion of Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| state || DAJ || State Portion of the Cardholder Address&lt;br /&gt;
|-&lt;br /&gt;
| postalcode || DAK || Postal Code, includes zip+4 for US&lt;br /&gt;
|-&lt;br /&gt;
| country || DCG || Country the Card is issued in&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;enter&amp;gt; || N/A || Send the Enter Key when done reading.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=490</id>
		<title>Sending parsed DL-ID data to CM</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Sending_parsed_DL-ID_data_to_CM&amp;diff=490"/>
		<updated>2022-08-25T16:51:36Z</updated>

		<summary type="html">&lt;p&gt;Aloha: Created page with &amp;quot;== V1 Data String == !V1!firstname!lastname!suffix!dob!address1!address2!city!state!country&amp;lt;enter&amp;gt;  {| class=&amp;quot;wikitable&amp;quot; |+ Caption text |- ! Data String !! AAMVA field !! Not...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== V1 Data String ==&lt;br /&gt;
!V1!firstname!lastname!suffix!dob!address1!address2!city!state!country&amp;lt;enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Caption text&lt;br /&gt;
|-&lt;br /&gt;
! Data String !! AAMVA field !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| V1 || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| firstname || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| lastname || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| suffix || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| dob || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| address1 || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| address2 || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| city || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| state || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| country || Example || Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;enter&amp;gt; || N/A || Example&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=488</id>
		<title>Badge Display Code Documentation</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=488"/>
		<updated>2022-01-12T20:52:10Z</updated>

		<summary type="html">&lt;p&gt;Aloha: /* Image Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In order to generate badges the system uses a series of commands known as ''badgecode''. This ''badgecode'', badge drawing code is documented here.&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Basics ===&lt;br /&gt;
&lt;br /&gt;
Badgecode is highly order of operations based, it renders from top to bottom in order.&lt;br /&gt;
&lt;br /&gt;
Generally, when constructing a badge, place your images near the top, then start to render your text, otherwise your images may render on top of your text. However, this can be used to your advantage, you can use PNG's with partial transparency, to overlay color, images, or other features on top of system rendered objects - including other images. Badges can be built up of multiply layers of objects which can be programmatically switched in or out based on the attendees specific system held data.&lt;br /&gt;
&lt;br /&gt;
For example where you place invert_image(); will effect the way it works, you can make it only effect part of the badge, you can even use multiple invert_image();'s in series to invert part of the badge conditionally based on state (underage, UDF, product purchased, membership, what have you).&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Co-ordinate system. ===&lt;br /&gt;
&lt;br /&gt;
The system requires co-ordinates, and these co-ordinates can be passed in many ways, the most common way will be to pass the just numbers, and numbers will represent pixels in the image your attempting to draw. However, several other methods are possible, including percentages, inches, cm, mm, points, and pixels. In addition the numbers used can be negative which will make them count from the opposite direction.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
The system has many variables that you can pull from in order to put information on-to the badge. Nearly every variable for a person from the database is available in the draw code. The variables are named as &amp;lt;nowiki&amp;gt;&amp;lt;table name&amp;gt;_&amp;lt;field name&amp;gt;&amp;lt;/nowiki&amp;gt; so the fan_name field from the registrant table would be $registrant_fan_name, the current_membership_type from the events_attended table would be $events_attended_current_membership_type. Variables will sometimes need to be followed by a space. This is definatly true in all strings. To get something to read &amp;lt;nowiki&amp;gt;&amp;lt;reg_num&amp;gt;-&amp;lt;uid&amp;gt;&amp;lt;/nowiki&amp;gt; you will need to write your string as &amp;quot;$events_attended_reg_num -$uid&amp;quot; or &amp;quot;$events_attended_reg_num\-$uid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There are some special variables which are populated, here is a list of some of the unique variable names.&lt;br /&gt;
&lt;br /&gt;
==== Event Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Event Variables&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $event_id || Event Short Name E.G. RF0&lt;br /&gt;
|-&lt;br /&gt;
| $events_event_title || Event Title defined on the Edit Event screen.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_name || The membership group.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_long_name || The membership name as is intended to be printed on the badge.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Registrant Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Registrant Variables&lt;br /&gt;
|-&lt;br /&gt;
| $uid || Registrant UID&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_first_created || Creation date of the person.&lt;br /&gt;
|-&lt;br /&gt;
| $events_attended_reg_num || Registration Sequence Number&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_common_name || Uses the $registrant_fan_name value if the value is not empty, and uses the $registrant_rl_first and $registrant_rl_last otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_fan_name || Registrant Fan/Badge Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_rl_first || Registrant First Name&lt;br /&gt;
|- &lt;br /&gt;
| $registrant_rl_last || Registrant Last Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_birthday || The person's birthday.&lt;br /&gt;
|-&lt;br /&gt;
| $underage || true if the person is under the specified of_age. A good example of the use of this could be &amp;lt;nowiki&amp;gt;if($underage|invert_image()|do_nothing());&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Special Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Special Variables&lt;br /&gt;
|-&lt;br /&gt;
! Special Variable !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $staff || if $event_membership_types_name contains the word 'staff' this will equal true, this is not case sensitive. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== UDF Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ User Defined Fields - User defined fields can be applied on the badges. Use the following variables.&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_title || Will display the title of the user defined field. (If the customer has it applied to them)  Ex: $UDF_12_title.&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_value || Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
==== Drawing Functions ====&lt;br /&gt;
All draw functions end in a ;&lt;br /&gt;
===== Geometry Functions =====&lt;br /&gt;
* '''draw_line([ulx,uly],[llx,lly])''' - Draws a line from [x.y] to [x,y]&lt;br /&gt;
* '''draw_box([ulx,uly],[llx,lly],Optional Arguments here)''' - Will draw a box with the top corner being at the first pair, and the lower right being at the second pair. This function always starts drawing from the top or the left.&lt;br /&gt;
** filled=yes - Will Fill the box with black (or the color specified in color)&lt;br /&gt;
** color=r:g:b - Will set the draw color for this function to the specified rgb value.&lt;br /&gt;
&lt;br /&gt;
===== Image Functions =====&lt;br /&gt;
* '''draw_image(&amp;quot;filename&amp;quot;,[p1x,p1y],[p2x,p2y])''' - Draw the specified image with the top left of the image at point 1, and the lower right of the image at point 2. If IMAGE_UID### is specified instead of a filename the image will be pulled from the badge_images table and used instead.  There is no space between IMAGE_UID and the Number of the badge_image.&lt;br /&gt;
* '''flood_fill(r,g,b)''' - will perform a flood fill on the image at 2,2&lt;br /&gt;
*'''invert_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
*'''grayscale_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
* '''image_brightness(n);''' -  Adjust image brightness - Valid range is -255 to 255, 255 is most brightness, -255 is least.&lt;br /&gt;
* '''image_contrast(n);''' - Adjust image contrast - Valid range is -100 to 100, note, negative numbers are more contrast, positive numbers are less (this is the way the underlying library works, no sane person would design it this way).&lt;br /&gt;
* '''emboss_image();''' - Adds an Artistic Embossed Look to an image.&lt;br /&gt;
* '''tint_image(r,g,b,''a'')''' - will colorize the entire image based on the RGB values specified. By default if you do not pass an alpha value in badgecode, one is inserted (0), this is fully opaque, you can adjust the intensity of the tinting effect by adjusting the transparency level. This is somewhat non-intuitive to use. Valid Alpha ranges are between 0 and 127, Valid Color Ranges are between 0 and 255.&lt;br /&gt;
&lt;br /&gt;
===== Layout Assistance Function =====&lt;br /&gt;
* '''draw_measure([x,y],Optional Arguments Here)''' - Will draw a measurement line for you to help figure out co-ordinates of your drawing.&lt;br /&gt;
** ticks=&amp;lt;integer&amp;gt; - Defaults to 100 (Draw a large tick every &amp;lt;integer&amp;gt; pixels, and a small tick every &amp;lt;integer/2&amp;gt; pixels)&lt;br /&gt;
** type=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Vertical&lt;br /&gt;
&lt;br /&gt;
===== Text and Barcode Functions =====&lt;br /&gt;
* '''draw_text(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws text at the x,y co-ordinates, with the following optional arguments which can be passed in any order and must be seperated by a comma.&lt;br /&gt;
** font=&amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; is the name of a font file in the shared_php folder, case-sensitive, do not add the .ttf extension.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;aign&amp;gt; is the alignment you want, left, right or center&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;vertalign=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;align&amp;gt; is top, middle or bottom.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;size=&amp;lt;size&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;size&amp;gt; is the size of the text you want&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;angle=&amp;lt;angle&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;angle&amp;gt; is the angle of the text&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;border=&amp;lt;true|false|numeric&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if there will be a border on the text If border is a numeric value the value will dictate the thickness of the border.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;inverted=&amp;lt;true|false&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if the text will be inverted.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;maxwidth=&amp;lt;width&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the maximum width this text can take, if long names appear they will be automatically reduced in font in order for them to maintain a size no greater than the maximum width.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** color=r:g:b - If this value is present then the rgb value of the color will be used for the font. Otherwise, black will be used. &amp;lt;nowiki&amp;gt;(Or white if invert is present This setting overrides Invert)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''draw_barcode(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws a barcode at the x,y co-ordinates with the following optional arguments which can be passed in any order and must be seperated by a comma,&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;format=&amp;lt;code128|code39|codebar&amp;gt; - Defaults to code39&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;left|center|right&amp;gt; - Defaults to Left&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;orientation=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Horizontal&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;height=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Integer value determines the height of the barcode, width is always determined by the string, no scaling option is available.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;width=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Strech or squash the barcode to this width (Does not maintain aspect ratio, use with height)&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt;, - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;color=&amp;lt;r:g:b&amp;gt;&amp;lt;/nowiki&amp;gt; - Set the draw color.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous Functions ====&lt;br /&gt;
* '''label_convert''' - This is a special function to improve the quality of thermal prints when used with the cups print method, it gives a rough approximation of the work the legacy EPL print method does when doing its image conversion. However, as its direct CUPS, there is a performance improvement.&lt;br /&gt;
* '''// comment''' - Using // will add comments to your draw code that won't render.&lt;br /&gt;
&lt;br /&gt;
==== Logic Functions ====&lt;br /&gt;
*''' if(&amp;quot;value&amp;quot;|true-action|false-action);''' - For example if($underage | draw_text(&amp;quot;Underage&amp;quot;, [82.5%,80%]) | do_nothing());&lt;br /&gt;
*''' strcmp(&amp;quot;somthing&amp;quot;=&amp;quot;somthingelse&amp;quot;|true-action|false-action);''' - this function.&lt;br /&gt;
*''' do_nothing();''' - this function is valuable for the IF statements.&lt;br /&gt;
&lt;br /&gt;
===== Special Logic Functions =====&lt;br /&gt;
*''' ifmembershipgroup(&amp;quot;value&amp;quot;|true-action|false-action);''' - This tools is a IF stament that will allow you to draw things depending on whether or not a person has a specific membership group.&lt;br /&gt;
** Example ifmembershipgroup(&amp;quot;patron&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
*''' ifproductpurchased(&amp;quot;upc&amp;quot;|true-action|false-action);''' - This tool is a IF statement that will allow you to draw things depending on whether or not a person has a specific product purchased (paid, not just in cart), and not refunded.&lt;br /&gt;
** Example:ifproductpurchased(&amp;quot;1000180&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
&lt;br /&gt;
===Badgecode Examples===&lt;br /&gt;
&lt;br /&gt;
==== CR80 Horizontal Example ====&lt;br /&gt;
&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:CR80 Horizontal FNO.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Minor Ada Dealer.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Media Ada Dealer.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for StratosFur 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
//badge image commented out, comment out the invert_image line when restoring - will show a black background for testing without image.&lt;br /&gt;
//draw_image(&amp;quot;IMAGE_UID1&amp;quot;, [1,1], [100%,100%]);&lt;br /&gt;
invert_image();&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Event and Membership &lt;br /&gt;
draw_text(&amp;quot;$events_event_title  - $uid&amp;quot;,[95.5%,600],size=30,align=right,color=255:255:255,font=&amp;quot;gayatri&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// draw minor warning - Draws in Red - overlaps with Media Flag, cannot be a media minor.&lt;br /&gt;
if($underage |  draw_text(&amp;quot;Minor&amp;quot;,[95.5%,25.5%],size=150,align=right,color=255:0:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
// Max Width must change for Membership type because of size of minor warning.&lt;br /&gt;
&lt;br /&gt;
if($underage|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=450,font=&amp;quot;gayatri&amp;quot;)|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=1000,font=&amp;quot;gayatri&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//Show marker for ADA - Yellow&lt;br /&gt;
if ($UDF_6_value | draw_text(&amp;quot;ADA&amp;quot;,[95.5%,39.5%],size=60,align=right,color=240:240:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Media - Green - Cannot be Media/Minor, they occupy the same space&lt;br /&gt;
if ($UDF_7_value | draw_text(&amp;quot;Media&amp;quot;,[95.5%,25.5%],size=150,align=right,color=0:255:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Dealers - Draws in Magenta.&lt;br /&gt;
if ($UDF_8_value |draw_text(&amp;quot;Dealers&amp;quot;,[95.5%,50.5%],size=60,align=right,color=255:0:255,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,530],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=1000,color=255:255:255);&lt;br /&gt;
 &lt;br /&gt;
// Next lets draw the furry name under the main name &lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,600],,font=&amp;quot;gayatri&amp;quot;,size=50,align=left,maxwidth=540,color=255:255:255); &lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=600,color=255:255:255;&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
// Next lets draw the real name&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,530],font=&amp;quot;andlso&amp;quot;,size=85,align=left,maxwidth=550,color=255:255:255,font=&amp;quot;gayatri&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=50,align=left,valign=bottom,maxwidth=600,color=255:255:255);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;br /&gt;
&lt;br /&gt;
==== CR80 Vertical Example ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Zebra 4x1 Example ====&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:Zebra 4x1 FNO.jpg|thumb]]&lt;br /&gt;
[[File:Zebra 4x1 FNO Minor.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for TTFC 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
// Lets draw the EVENT ID&lt;br /&gt;
if($underage | draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],inverted=true,size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;) |draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// If underage, draw &amp;quot;UNDER AGE&amp;quot;, else draw optional value (nominally species)&lt;br /&gt;
if($underage | draw_text(&amp;quot;UNDER AGE&amp;quot;, [150,-15],inverted=true,font=&amp;quot;andlso&amp;quot;,size=40,align=left) | draw_text(&amp;quot;$UDF_1_value&amp;quot;,[190,-9],size=28,font=&amp;quot;andlso&amp;quot;,maxwidth=320));&lt;br /&gt;
&lt;br /&gt;
// Draw membership type and UID&lt;br /&gt;
draw_text(&amp;quot;$event_membership_types_long_name&amp;quot;,[-128,-15],size=28,align=right,font=&amp;quot;andlso&amp;quot;)); &lt;br /&gt;
draw_text(&amp;quot;$uid&amp;quot;,[-120,-15],size=28,align=left,font=&amp;quot;andlso&amp;quot;, str_pad_length=4,str_pad_align=left,str_pad_value=&amp;quot;0&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[480,120],font=&amp;quot;andlso&amp;quot;,size=85,align=center,valign=bottom,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=487</id>
		<title>Badge Display Code Documentation</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=487"/>
		<updated>2022-01-12T20:51:18Z</updated>

		<summary type="html">&lt;p&gt;Aloha: /* Image Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In order to generate badges the system uses a series of commands known as ''badgecode''. This ''badgecode'', badge drawing code is documented here.&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Basics ===&lt;br /&gt;
&lt;br /&gt;
Badgecode is highly order of operations based, it renders from top to bottom in order.&lt;br /&gt;
&lt;br /&gt;
Generally, when constructing a badge, place your images near the top, then start to render your text, otherwise your images may render on top of your text. However, this can be used to your advantage, you can use PNG's with partial transparency, to overlay color, images, or other features on top of system rendered objects - including other images. Badges can be built up of multiply layers of objects which can be programmatically switched in or out based on the attendees specific system held data.&lt;br /&gt;
&lt;br /&gt;
For example where you place invert_image(); will effect the way it works, you can make it only effect part of the badge, you can even use multiple invert_image();'s in series to invert part of the badge conditionally based on state (underage, UDF, product purchased, membership, what have you).&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Co-ordinate system. ===&lt;br /&gt;
&lt;br /&gt;
The system requires co-ordinates, and these co-ordinates can be passed in many ways, the most common way will be to pass the just numbers, and numbers will represent pixels in the image your attempting to draw. However, several other methods are possible, including percentages, inches, cm, mm, points, and pixels. In addition the numbers used can be negative which will make them count from the opposite direction.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
The system has many variables that you can pull from in order to put information on-to the badge. Nearly every variable for a person from the database is available in the draw code. The variables are named as &amp;lt;nowiki&amp;gt;&amp;lt;table name&amp;gt;_&amp;lt;field name&amp;gt;&amp;lt;/nowiki&amp;gt; so the fan_name field from the registrant table would be $registrant_fan_name, the current_membership_type from the events_attended table would be $events_attended_current_membership_type. Variables will sometimes need to be followed by a space. This is definatly true in all strings. To get something to read &amp;lt;nowiki&amp;gt;&amp;lt;reg_num&amp;gt;-&amp;lt;uid&amp;gt;&amp;lt;/nowiki&amp;gt; you will need to write your string as &amp;quot;$events_attended_reg_num -$uid&amp;quot; or &amp;quot;$events_attended_reg_num\-$uid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There are some special variables which are populated, here is a list of some of the unique variable names.&lt;br /&gt;
&lt;br /&gt;
==== Event Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Event Variables&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $event_id || Event Short Name E.G. RF0&lt;br /&gt;
|-&lt;br /&gt;
| $events_event_title || Event Title defined on the Edit Event screen.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_name || The membership group.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_long_name || The membership name as is intended to be printed on the badge.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Registrant Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Registrant Variables&lt;br /&gt;
|-&lt;br /&gt;
| $uid || Registrant UID&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_first_created || Creation date of the person.&lt;br /&gt;
|-&lt;br /&gt;
| $events_attended_reg_num || Registration Sequence Number&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_common_name || Uses the $registrant_fan_name value if the value is not empty, and uses the $registrant_rl_first and $registrant_rl_last otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_fan_name || Registrant Fan/Badge Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_rl_first || Registrant First Name&lt;br /&gt;
|- &lt;br /&gt;
| $registrant_rl_last || Registrant Last Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_birthday || The person's birthday.&lt;br /&gt;
|-&lt;br /&gt;
| $underage || true if the person is under the specified of_age. A good example of the use of this could be &amp;lt;nowiki&amp;gt;if($underage|invert_image()|do_nothing());&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Special Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Special Variables&lt;br /&gt;
|-&lt;br /&gt;
! Special Variable !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $staff || if $event_membership_types_name contains the word 'staff' this will equal true, this is not case sensitive. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== UDF Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ User Defined Fields - User defined fields can be applied on the badges. Use the following variables.&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_title || Will display the title of the user defined field. (If the customer has it applied to them)  Ex: $UDF_12_title.&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_value || Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
==== Drawing Functions ====&lt;br /&gt;
All draw functions end in a ;&lt;br /&gt;
===== Geometry Functions =====&lt;br /&gt;
* '''draw_line([ulx,uly],[llx,lly])''' - Draws a line from [x.y] to [x,y]&lt;br /&gt;
* '''draw_box([ulx,uly],[llx,lly],Optional Arguments here)''' - Will draw a box with the top corner being at the first pair, and the lower right being at the second pair. This function always starts drawing from the top or the left.&lt;br /&gt;
** filled=yes - Will Fill the box with black (or the color specified in color)&lt;br /&gt;
** color=r:g:b - Will set the draw color for this function to the specified rgb value.&lt;br /&gt;
&lt;br /&gt;
===== Image Functions =====&lt;br /&gt;
* '''draw_image(&amp;quot;filename&amp;quot;,[p1x,p1y],[p2x,p2y])''' - Draw the specified image with the top left of the image at point 1, and the lower right of the image at point 2. If IMAGE_UID### is specified instead of a filename the image will be pulled from the badge_images table and used instead.  There is no space between IMAGE_UID and the Number of the badge_image.&lt;br /&gt;
* '''flood_fill(r,g,b)''' - will perform a flood fill on the image at 2,2&lt;br /&gt;
*'''invert_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
*'''grayscale_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
* '''image_brightness(n);''' -  Adjust image brightness - Valid range is -255 to 255, 255 is most brightness, -255 is least.&lt;br /&gt;
* '''image_contrast(n);''' - Adjust image contrast - Valid range is -100 to 100, note, negative numbers are more contrast, positive numbers are less.&lt;br /&gt;
* '''emboss_image();''' - Adds an Artistic Embossed Look to an image.&lt;br /&gt;
* '''tint_image(r,g,b,''a'')''' - will colorize the entire image based on the RGB values specified. By default if you do not pass an alpha value in badgecode, one is inserted (0), this is fully opaque, you can adjust the intensity of the tinting effect by adjusting the transparency level. This is somewhat non-intuitive to use. Valid Alpha ranges are between 0 and 127, Valid Color Ranges are between 0 and 255.&lt;br /&gt;
&lt;br /&gt;
===== Layout Assistance Function =====&lt;br /&gt;
* '''draw_measure([x,y],Optional Arguments Here)''' - Will draw a measurement line for you to help figure out co-ordinates of your drawing.&lt;br /&gt;
** ticks=&amp;lt;integer&amp;gt; - Defaults to 100 (Draw a large tick every &amp;lt;integer&amp;gt; pixels, and a small tick every &amp;lt;integer/2&amp;gt; pixels)&lt;br /&gt;
** type=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Vertical&lt;br /&gt;
&lt;br /&gt;
===== Text and Barcode Functions =====&lt;br /&gt;
* '''draw_text(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws text at the x,y co-ordinates, with the following optional arguments which can be passed in any order and must be seperated by a comma.&lt;br /&gt;
** font=&amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; is the name of a font file in the shared_php folder, case-sensitive, do not add the .ttf extension.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;aign&amp;gt; is the alignment you want, left, right or center&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;vertalign=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;align&amp;gt; is top, middle or bottom.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;size=&amp;lt;size&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;size&amp;gt; is the size of the text you want&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;angle=&amp;lt;angle&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;angle&amp;gt; is the angle of the text&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;border=&amp;lt;true|false|numeric&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if there will be a border on the text If border is a numeric value the value will dictate the thickness of the border.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;inverted=&amp;lt;true|false&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if the text will be inverted.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;maxwidth=&amp;lt;width&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the maximum width this text can take, if long names appear they will be automatically reduced in font in order for them to maintain a size no greater than the maximum width.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** color=r:g:b - If this value is present then the rgb value of the color will be used for the font. Otherwise, black will be used. &amp;lt;nowiki&amp;gt;(Or white if invert is present This setting overrides Invert)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''draw_barcode(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws a barcode at the x,y co-ordinates with the following optional arguments which can be passed in any order and must be seperated by a comma,&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;format=&amp;lt;code128|code39|codebar&amp;gt; - Defaults to code39&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;left|center|right&amp;gt; - Defaults to Left&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;orientation=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Horizontal&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;height=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Integer value determines the height of the barcode, width is always determined by the string, no scaling option is available.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;width=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Strech or squash the barcode to this width (Does not maintain aspect ratio, use with height)&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt;, - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;color=&amp;lt;r:g:b&amp;gt;&amp;lt;/nowiki&amp;gt; - Set the draw color.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous Functions ====&lt;br /&gt;
* '''label_convert''' - This is a special function to improve the quality of thermal prints when used with the cups print method, it gives a rough approximation of the work the legacy EPL print method does when doing its image conversion. However, as its direct CUPS, there is a performance improvement.&lt;br /&gt;
* '''// comment''' - Using // will add comments to your draw code that won't render.&lt;br /&gt;
&lt;br /&gt;
==== Logic Functions ====&lt;br /&gt;
*''' if(&amp;quot;value&amp;quot;|true-action|false-action);''' - For example if($underage | draw_text(&amp;quot;Underage&amp;quot;, [82.5%,80%]) | do_nothing());&lt;br /&gt;
*''' strcmp(&amp;quot;somthing&amp;quot;=&amp;quot;somthingelse&amp;quot;|true-action|false-action);''' - this function.&lt;br /&gt;
*''' do_nothing();''' - this function is valuable for the IF statements.&lt;br /&gt;
&lt;br /&gt;
===== Special Logic Functions =====&lt;br /&gt;
*''' ifmembershipgroup(&amp;quot;value&amp;quot;|true-action|false-action);''' - This tools is a IF stament that will allow you to draw things depending on whether or not a person has a specific membership group.&lt;br /&gt;
** Example ifmembershipgroup(&amp;quot;patron&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
*''' ifproductpurchased(&amp;quot;upc&amp;quot;|true-action|false-action);''' - This tool is a IF statement that will allow you to draw things depending on whether or not a person has a specific product purchased (paid, not just in cart), and not refunded.&lt;br /&gt;
** Example:ifproductpurchased(&amp;quot;1000180&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
&lt;br /&gt;
===Badgecode Examples===&lt;br /&gt;
&lt;br /&gt;
==== CR80 Horizontal Example ====&lt;br /&gt;
&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:CR80 Horizontal FNO.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Minor Ada Dealer.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Media Ada Dealer.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for StratosFur 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
//badge image commented out, comment out the invert_image line when restoring - will show a black background for testing without image.&lt;br /&gt;
//draw_image(&amp;quot;IMAGE_UID1&amp;quot;, [1,1], [100%,100%]);&lt;br /&gt;
invert_image();&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Event and Membership &lt;br /&gt;
draw_text(&amp;quot;$events_event_title  - $uid&amp;quot;,[95.5%,600],size=30,align=right,color=255:255:255,font=&amp;quot;gayatri&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// draw minor warning - Draws in Red - overlaps with Media Flag, cannot be a media minor.&lt;br /&gt;
if($underage |  draw_text(&amp;quot;Minor&amp;quot;,[95.5%,25.5%],size=150,align=right,color=255:0:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
// Max Width must change for Membership type because of size of minor warning.&lt;br /&gt;
&lt;br /&gt;
if($underage|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=450,font=&amp;quot;gayatri&amp;quot;)|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=1000,font=&amp;quot;gayatri&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//Show marker for ADA - Yellow&lt;br /&gt;
if ($UDF_6_value | draw_text(&amp;quot;ADA&amp;quot;,[95.5%,39.5%],size=60,align=right,color=240:240:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Media - Green - Cannot be Media/Minor, they occupy the same space&lt;br /&gt;
if ($UDF_7_value | draw_text(&amp;quot;Media&amp;quot;,[95.5%,25.5%],size=150,align=right,color=0:255:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Dealers - Draws in Magenta.&lt;br /&gt;
if ($UDF_8_value |draw_text(&amp;quot;Dealers&amp;quot;,[95.5%,50.5%],size=60,align=right,color=255:0:255,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,530],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=1000,color=255:255:255);&lt;br /&gt;
 &lt;br /&gt;
// Next lets draw the furry name under the main name &lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,600],,font=&amp;quot;gayatri&amp;quot;,size=50,align=left,maxwidth=540,color=255:255:255); &lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=600,color=255:255:255;&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
// Next lets draw the real name&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,530],font=&amp;quot;andlso&amp;quot;,size=85,align=left,maxwidth=550,color=255:255:255,font=&amp;quot;gayatri&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=50,align=left,valign=bottom,maxwidth=600,color=255:255:255);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;br /&gt;
&lt;br /&gt;
==== CR80 Vertical Example ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Zebra 4x1 Example ====&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:Zebra 4x1 FNO.jpg|thumb]]&lt;br /&gt;
[[File:Zebra 4x1 FNO Minor.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for TTFC 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
// Lets draw the EVENT ID&lt;br /&gt;
if($underage | draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],inverted=true,size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;) |draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// If underage, draw &amp;quot;UNDER AGE&amp;quot;, else draw optional value (nominally species)&lt;br /&gt;
if($underage | draw_text(&amp;quot;UNDER AGE&amp;quot;, [150,-15],inverted=true,font=&amp;quot;andlso&amp;quot;,size=40,align=left) | draw_text(&amp;quot;$UDF_1_value&amp;quot;,[190,-9],size=28,font=&amp;quot;andlso&amp;quot;,maxwidth=320));&lt;br /&gt;
&lt;br /&gt;
// Draw membership type and UID&lt;br /&gt;
draw_text(&amp;quot;$event_membership_types_long_name&amp;quot;,[-128,-15],size=28,align=right,font=&amp;quot;andlso&amp;quot;)); &lt;br /&gt;
draw_text(&amp;quot;$uid&amp;quot;,[-120,-15],size=28,align=left,font=&amp;quot;andlso&amp;quot;, str_pad_length=4,str_pad_align=left,str_pad_value=&amp;quot;0&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[480,120],font=&amp;quot;andlso&amp;quot;,size=85,align=center,valign=bottom,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=486</id>
		<title>Badge Display Code Documentation</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=486"/>
		<updated>2022-01-12T20:50:23Z</updated>

		<summary type="html">&lt;p&gt;Aloha: /* Image Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In order to generate badges the system uses a series of commands known as ''badgecode''. This ''badgecode'', badge drawing code is documented here.&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Basics ===&lt;br /&gt;
&lt;br /&gt;
Badgecode is highly order of operations based, it renders from top to bottom in order.&lt;br /&gt;
&lt;br /&gt;
Generally, when constructing a badge, place your images near the top, then start to render your text, otherwise your images may render on top of your text. However, this can be used to your advantage, you can use PNG's with partial transparency, to overlay color, images, or other features on top of system rendered objects - including other images. Badges can be built up of multiply layers of objects which can be programmatically switched in or out based on the attendees specific system held data.&lt;br /&gt;
&lt;br /&gt;
For example where you place invert_image(); will effect the way it works, you can make it only effect part of the badge, you can even use multiple invert_image();'s in series to invert part of the badge conditionally based on state (underage, UDF, product purchased, membership, what have you).&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Co-ordinate system. ===&lt;br /&gt;
&lt;br /&gt;
The system requires co-ordinates, and these co-ordinates can be passed in many ways, the most common way will be to pass the just numbers, and numbers will represent pixels in the image your attempting to draw. However, several other methods are possible, including percentages, inches, cm, mm, points, and pixels. In addition the numbers used can be negative which will make them count from the opposite direction.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
The system has many variables that you can pull from in order to put information on-to the badge. Nearly every variable for a person from the database is available in the draw code. The variables are named as &amp;lt;nowiki&amp;gt;&amp;lt;table name&amp;gt;_&amp;lt;field name&amp;gt;&amp;lt;/nowiki&amp;gt; so the fan_name field from the registrant table would be $registrant_fan_name, the current_membership_type from the events_attended table would be $events_attended_current_membership_type. Variables will sometimes need to be followed by a space. This is definatly true in all strings. To get something to read &amp;lt;nowiki&amp;gt;&amp;lt;reg_num&amp;gt;-&amp;lt;uid&amp;gt;&amp;lt;/nowiki&amp;gt; you will need to write your string as &amp;quot;$events_attended_reg_num -$uid&amp;quot; or &amp;quot;$events_attended_reg_num\-$uid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There are some special variables which are populated, here is a list of some of the unique variable names.&lt;br /&gt;
&lt;br /&gt;
==== Event Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Event Variables&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $event_id || Event Short Name E.G. RF0&lt;br /&gt;
|-&lt;br /&gt;
| $events_event_title || Event Title defined on the Edit Event screen.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_name || The membership group.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_long_name || The membership name as is intended to be printed on the badge.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Registrant Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Registrant Variables&lt;br /&gt;
|-&lt;br /&gt;
| $uid || Registrant UID&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_first_created || Creation date of the person.&lt;br /&gt;
|-&lt;br /&gt;
| $events_attended_reg_num || Registration Sequence Number&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_common_name || Uses the $registrant_fan_name value if the value is not empty, and uses the $registrant_rl_first and $registrant_rl_last otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_fan_name || Registrant Fan/Badge Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_rl_first || Registrant First Name&lt;br /&gt;
|- &lt;br /&gt;
| $registrant_rl_last || Registrant Last Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_birthday || The person's birthday.&lt;br /&gt;
|-&lt;br /&gt;
| $underage || true if the person is under the specified of_age. A good example of the use of this could be &amp;lt;nowiki&amp;gt;if($underage|invert_image()|do_nothing());&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Special Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Special Variables&lt;br /&gt;
|-&lt;br /&gt;
! Special Variable !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $staff || if $event_membership_types_name contains the word 'staff' this will equal true, this is not case sensitive. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== UDF Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ User Defined Fields - User defined fields can be applied on the badges. Use the following variables.&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_title || Will display the title of the user defined field. (If the customer has it applied to them)  Ex: $UDF_12_title.&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_value || Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
==== Drawing Functions ====&lt;br /&gt;
All draw functions end in a ;&lt;br /&gt;
===== Geometry Functions =====&lt;br /&gt;
* '''draw_line([ulx,uly],[llx,lly])''' - Draws a line from [x.y] to [x,y]&lt;br /&gt;
* '''draw_box([ulx,uly],[llx,lly],Optional Arguments here)''' - Will draw a box with the top corner being at the first pair, and the lower right being at the second pair. This function always starts drawing from the top or the left.&lt;br /&gt;
** filled=yes - Will Fill the box with black (or the color specified in color)&lt;br /&gt;
** color=r:g:b - Will set the draw color for this function to the specified rgb value.&lt;br /&gt;
&lt;br /&gt;
===== Image Functions =====&lt;br /&gt;
* '''draw_image(&amp;quot;filename&amp;quot;,[p1x,p1y],[p2x,p2y])''' - Draw the specified image with the top left of the image at point 1, and the lower right of the image at point 2. If IMAGE_UID### is specified instead of a filename the image will be pulled from the badge_images table and used instead.  There is no space between IMAGE_UID and the Number of the badge_image.&lt;br /&gt;
* '''flood_fill(r,g,b)''' - will perform a flood fill on the image at 2,2&lt;br /&gt;
*'''invert_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
*'''grayscale_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
* '''image_contrast(n);''' - Adjust image contrast - note, negative numbers are more contrast, positive numbers are less.&lt;br /&gt;
* '''image_brightness(n);''' -  Adjust image brightness - Valid range  is -255 to 255, 255 is most brightness, -255 is least.&lt;br /&gt;
* '''emboss_image();''' - Adds an Artistic Embossed Look to an image.&lt;br /&gt;
* '''tint_image(r,g,b,''a'')''' - will colorize the entire image based on the RGB values specified. By default if you do not pass an alpha value in badgecode, one is inserted (0), this is fully opaque, you can adjust the intensity of the tinting effect by adjusting the transparency level. This is somewhat non-intuitive to use. Valid Alpha ranges are between 0 and 127, Valid Color Ranges are between 0 and 255.&lt;br /&gt;
&lt;br /&gt;
===== Layout Assistance Function =====&lt;br /&gt;
* '''draw_measure([x,y],Optional Arguments Here)''' - Will draw a measurement line for you to help figure out co-ordinates of your drawing.&lt;br /&gt;
** ticks=&amp;lt;integer&amp;gt; - Defaults to 100 (Draw a large tick every &amp;lt;integer&amp;gt; pixels, and a small tick every &amp;lt;integer/2&amp;gt; pixels)&lt;br /&gt;
** type=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Vertical&lt;br /&gt;
&lt;br /&gt;
===== Text and Barcode Functions =====&lt;br /&gt;
* '''draw_text(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws text at the x,y co-ordinates, with the following optional arguments which can be passed in any order and must be seperated by a comma.&lt;br /&gt;
** font=&amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; is the name of a font file in the shared_php folder, case-sensitive, do not add the .ttf extension.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;aign&amp;gt; is the alignment you want, left, right or center&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;vertalign=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;align&amp;gt; is top, middle or bottom.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;size=&amp;lt;size&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;size&amp;gt; is the size of the text you want&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;angle=&amp;lt;angle&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;angle&amp;gt; is the angle of the text&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;border=&amp;lt;true|false|numeric&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if there will be a border on the text If border is a numeric value the value will dictate the thickness of the border.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;inverted=&amp;lt;true|false&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if the text will be inverted.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;maxwidth=&amp;lt;width&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the maximum width this text can take, if long names appear they will be automatically reduced in font in order for them to maintain a size no greater than the maximum width.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** color=r:g:b - If this value is present then the rgb value of the color will be used for the font. Otherwise, black will be used. &amp;lt;nowiki&amp;gt;(Or white if invert is present This setting overrides Invert)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''draw_barcode(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws a barcode at the x,y co-ordinates with the following optional arguments which can be passed in any order and must be seperated by a comma,&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;format=&amp;lt;code128|code39|codebar&amp;gt; - Defaults to code39&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;left|center|right&amp;gt; - Defaults to Left&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;orientation=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Horizontal&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;height=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Integer value determines the height of the barcode, width is always determined by the string, no scaling option is available.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;width=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Strech or squash the barcode to this width (Does not maintain aspect ratio, use with height)&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt;, - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;color=&amp;lt;r:g:b&amp;gt;&amp;lt;/nowiki&amp;gt; - Set the draw color.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous Functions ====&lt;br /&gt;
* '''label_convert''' - This is a special function to improve the quality of thermal prints when used with the cups print method, it gives a rough approximation of the work the legacy EPL print method does when doing its image conversion. However, as its direct CUPS, there is a performance improvement.&lt;br /&gt;
* '''// comment''' - Using // will add comments to your draw code that won't render.&lt;br /&gt;
&lt;br /&gt;
==== Logic Functions ====&lt;br /&gt;
*''' if(&amp;quot;value&amp;quot;|true-action|false-action);''' - For example if($underage | draw_text(&amp;quot;Underage&amp;quot;, [82.5%,80%]) | do_nothing());&lt;br /&gt;
*''' strcmp(&amp;quot;somthing&amp;quot;=&amp;quot;somthingelse&amp;quot;|true-action|false-action);''' - this function.&lt;br /&gt;
*''' do_nothing();''' - this function is valuable for the IF statements.&lt;br /&gt;
&lt;br /&gt;
===== Special Logic Functions =====&lt;br /&gt;
*''' ifmembershipgroup(&amp;quot;value&amp;quot;|true-action|false-action);''' - This tools is a IF stament that will allow you to draw things depending on whether or not a person has a specific membership group.&lt;br /&gt;
** Example ifmembershipgroup(&amp;quot;patron&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
*''' ifproductpurchased(&amp;quot;upc&amp;quot;|true-action|false-action);''' - This tool is a IF statement that will allow you to draw things depending on whether or not a person has a specific product purchased (paid, not just in cart), and not refunded.&lt;br /&gt;
** Example:ifproductpurchased(&amp;quot;1000180&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
&lt;br /&gt;
===Badgecode Examples===&lt;br /&gt;
&lt;br /&gt;
==== CR80 Horizontal Example ====&lt;br /&gt;
&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:CR80 Horizontal FNO.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Minor Ada Dealer.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Media Ada Dealer.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for StratosFur 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
//badge image commented out, comment out the invert_image line when restoring - will show a black background for testing without image.&lt;br /&gt;
//draw_image(&amp;quot;IMAGE_UID1&amp;quot;, [1,1], [100%,100%]);&lt;br /&gt;
invert_image();&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Event and Membership &lt;br /&gt;
draw_text(&amp;quot;$events_event_title  - $uid&amp;quot;,[95.5%,600],size=30,align=right,color=255:255:255,font=&amp;quot;gayatri&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// draw minor warning - Draws in Red - overlaps with Media Flag, cannot be a media minor.&lt;br /&gt;
if($underage |  draw_text(&amp;quot;Minor&amp;quot;,[95.5%,25.5%],size=150,align=right,color=255:0:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
// Max Width must change for Membership type because of size of minor warning.&lt;br /&gt;
&lt;br /&gt;
if($underage|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=450,font=&amp;quot;gayatri&amp;quot;)|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=1000,font=&amp;quot;gayatri&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//Show marker for ADA - Yellow&lt;br /&gt;
if ($UDF_6_value | draw_text(&amp;quot;ADA&amp;quot;,[95.5%,39.5%],size=60,align=right,color=240:240:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Media - Green - Cannot be Media/Minor, they occupy the same space&lt;br /&gt;
if ($UDF_7_value | draw_text(&amp;quot;Media&amp;quot;,[95.5%,25.5%],size=150,align=right,color=0:255:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Dealers - Draws in Magenta.&lt;br /&gt;
if ($UDF_8_value |draw_text(&amp;quot;Dealers&amp;quot;,[95.5%,50.5%],size=60,align=right,color=255:0:255,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,530],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=1000,color=255:255:255);&lt;br /&gt;
 &lt;br /&gt;
// Next lets draw the furry name under the main name &lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,600],,font=&amp;quot;gayatri&amp;quot;,size=50,align=left,maxwidth=540,color=255:255:255); &lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=600,color=255:255:255;&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
// Next lets draw the real name&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,530],font=&amp;quot;andlso&amp;quot;,size=85,align=left,maxwidth=550,color=255:255:255,font=&amp;quot;gayatri&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=50,align=left,valign=bottom,maxwidth=600,color=255:255:255);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;br /&gt;
&lt;br /&gt;
==== CR80 Vertical Example ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Zebra 4x1 Example ====&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:Zebra 4x1 FNO.jpg|thumb]]&lt;br /&gt;
[[File:Zebra 4x1 FNO Minor.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for TTFC 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
// Lets draw the EVENT ID&lt;br /&gt;
if($underage | draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],inverted=true,size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;) |draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// If underage, draw &amp;quot;UNDER AGE&amp;quot;, else draw optional value (nominally species)&lt;br /&gt;
if($underage | draw_text(&amp;quot;UNDER AGE&amp;quot;, [150,-15],inverted=true,font=&amp;quot;andlso&amp;quot;,size=40,align=left) | draw_text(&amp;quot;$UDF_1_value&amp;quot;,[190,-9],size=28,font=&amp;quot;andlso&amp;quot;,maxwidth=320));&lt;br /&gt;
&lt;br /&gt;
// Draw membership type and UID&lt;br /&gt;
draw_text(&amp;quot;$event_membership_types_long_name&amp;quot;,[-128,-15],size=28,align=right,font=&amp;quot;andlso&amp;quot;)); &lt;br /&gt;
draw_text(&amp;quot;$uid&amp;quot;,[-120,-15],size=28,align=left,font=&amp;quot;andlso&amp;quot;, str_pad_length=4,str_pad_align=left,str_pad_value=&amp;quot;0&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[480,120],font=&amp;quot;andlso&amp;quot;,size=85,align=center,valign=bottom,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=485</id>
		<title>Badge Display Code Documentation</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=485"/>
		<updated>2022-01-12T20:48:23Z</updated>

		<summary type="html">&lt;p&gt;Aloha: /* Image Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In order to generate badges the system uses a series of commands known as ''badgecode''. This ''badgecode'', badge drawing code is documented here.&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Basics ===&lt;br /&gt;
&lt;br /&gt;
Badgecode is highly order of operations based, it renders from top to bottom in order.&lt;br /&gt;
&lt;br /&gt;
Generally, when constructing a badge, place your images near the top, then start to render your text, otherwise your images may render on top of your text. However, this can be used to your advantage, you can use PNG's with partial transparency, to overlay color, images, or other features on top of system rendered objects - including other images. Badges can be built up of multiply layers of objects which can be programmatically switched in or out based on the attendees specific system held data.&lt;br /&gt;
&lt;br /&gt;
For example where you place invert_image(); will effect the way it works, you can make it only effect part of the badge, you can even use multiple invert_image();'s in series to invert part of the badge conditionally based on state (underage, UDF, product purchased, membership, what have you).&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Co-ordinate system. ===&lt;br /&gt;
&lt;br /&gt;
The system requires co-ordinates, and these co-ordinates can be passed in many ways, the most common way will be to pass the just numbers, and numbers will represent pixels in the image your attempting to draw. However, several other methods are possible, including percentages, inches, cm, mm, points, and pixels. In addition the numbers used can be negative which will make them count from the opposite direction.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
The system has many variables that you can pull from in order to put information on-to the badge. Nearly every variable for a person from the database is available in the draw code. The variables are named as &amp;lt;nowiki&amp;gt;&amp;lt;table name&amp;gt;_&amp;lt;field name&amp;gt;&amp;lt;/nowiki&amp;gt; so the fan_name field from the registrant table would be $registrant_fan_name, the current_membership_type from the events_attended table would be $events_attended_current_membership_type. Variables will sometimes need to be followed by a space. This is definatly true in all strings. To get something to read &amp;lt;nowiki&amp;gt;&amp;lt;reg_num&amp;gt;-&amp;lt;uid&amp;gt;&amp;lt;/nowiki&amp;gt; you will need to write your string as &amp;quot;$events_attended_reg_num -$uid&amp;quot; or &amp;quot;$events_attended_reg_num\-$uid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There are some special variables which are populated, here is a list of some of the unique variable names.&lt;br /&gt;
&lt;br /&gt;
==== Event Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Event Variables&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $event_id || Event Short Name E.G. RF0&lt;br /&gt;
|-&lt;br /&gt;
| $events_event_title || Event Title defined on the Edit Event screen.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_name || The membership group.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_long_name || The membership name as is intended to be printed on the badge.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Registrant Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Registrant Variables&lt;br /&gt;
|-&lt;br /&gt;
| $uid || Registrant UID&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_first_created || Creation date of the person.&lt;br /&gt;
|-&lt;br /&gt;
| $events_attended_reg_num || Registration Sequence Number&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_common_name || Uses the $registrant_fan_name value if the value is not empty, and uses the $registrant_rl_first and $registrant_rl_last otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_fan_name || Registrant Fan/Badge Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_rl_first || Registrant First Name&lt;br /&gt;
|- &lt;br /&gt;
| $registrant_rl_last || Registrant Last Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_birthday || The person's birthday.&lt;br /&gt;
|-&lt;br /&gt;
| $underage || true if the person is under the specified of_age. A good example of the use of this could be &amp;lt;nowiki&amp;gt;if($underage|invert_image()|do_nothing());&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Special Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Special Variables&lt;br /&gt;
|-&lt;br /&gt;
! Special Variable !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $staff || if $event_membership_types_name contains the word 'staff' this will equal true, this is not case sensitive. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== UDF Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ User Defined Fields - User defined fields can be applied on the badges. Use the following variables.&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_title || Will display the title of the user defined field. (If the customer has it applied to them)  Ex: $UDF_12_title.&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_value || Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
==== Drawing Functions ====&lt;br /&gt;
All draw functions end in a ;&lt;br /&gt;
===== Geometry Functions =====&lt;br /&gt;
* '''draw_line([ulx,uly],[llx,lly])''' - Draws a line from [x.y] to [x,y]&lt;br /&gt;
* '''draw_box([ulx,uly],[llx,lly],Optional Arguments here)''' - Will draw a box with the top corner being at the first pair, and the lower right being at the second pair. This function always starts drawing from the top or the left.&lt;br /&gt;
** filled=yes - Will Fill the box with black (or the color specified in color)&lt;br /&gt;
** color=r:g:b - Will set the draw color for this function to the specified rgb value.&lt;br /&gt;
&lt;br /&gt;
===== Image Functions =====&lt;br /&gt;
* '''draw_image(&amp;quot;filename&amp;quot;,[p1x,p1y],[p2x,p2y])''' - Draw the specified image with the top left of the image at point 1, and the lower right of the image at point 2. If IMAGE_UID### is specified instead of a filename the image will be pulled from the badge_images table and used instead.  There is no space between IMAGE_UID and the Number of the badge_image.&lt;br /&gt;
* '''flood_fill(r,g,b)''' - will perform a flood fill on the image at 2,2&lt;br /&gt;
*'''invert_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
*'''grayscale_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
* '''image_contrast(n);''' - Adjust image contrast - note, negative numbers are more contrast, positive numbers are less.&lt;br /&gt;
* '''image_brightness(n);''' -  Adjust image brightness - Valid range  is -255 to 255, 255 is most brightness, -255 is least.&lt;br /&gt;
* '''emboss_image();''' - Adds an Artistic Embossed Look to an image.&lt;br /&gt;
* '''tint_image(r,g,b,''a'')''' - will colorize the entire image based on the RGB values specified. By default if you do not pass an alpha value in badgecode, one is inserted (0) by the parse_color function, this is fully opaque, you can adjust the intensity of the tinting effect by adjusting the transparency level. This is somewhat non-intuitive to use. Valid Alpha ranges are between 0 and 127, Valid Color Ranges are between 0 and 255.&lt;br /&gt;
&lt;br /&gt;
===== Layout Assistance Function =====&lt;br /&gt;
* '''draw_measure([x,y],Optional Arguments Here)''' - Will draw a measurement line for you to help figure out co-ordinates of your drawing.&lt;br /&gt;
** ticks=&amp;lt;integer&amp;gt; - Defaults to 100 (Draw a large tick every &amp;lt;integer&amp;gt; pixels, and a small tick every &amp;lt;integer/2&amp;gt; pixels)&lt;br /&gt;
** type=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Vertical&lt;br /&gt;
&lt;br /&gt;
===== Text and Barcode Functions =====&lt;br /&gt;
* '''draw_text(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws text at the x,y co-ordinates, with the following optional arguments which can be passed in any order and must be seperated by a comma.&lt;br /&gt;
** font=&amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; is the name of a font file in the shared_php folder, case-sensitive, do not add the .ttf extension.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;aign&amp;gt; is the alignment you want, left, right or center&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;vertalign=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;align&amp;gt; is top, middle or bottom.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;size=&amp;lt;size&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;size&amp;gt; is the size of the text you want&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;angle=&amp;lt;angle&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;angle&amp;gt; is the angle of the text&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;border=&amp;lt;true|false|numeric&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if there will be a border on the text If border is a numeric value the value will dictate the thickness of the border.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;inverted=&amp;lt;true|false&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if the text will be inverted.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;maxwidth=&amp;lt;width&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the maximum width this text can take, if long names appear they will be automatically reduced in font in order for them to maintain a size no greater than the maximum width.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** color=r:g:b - If this value is present then the rgb value of the color will be used for the font. Otherwise, black will be used. &amp;lt;nowiki&amp;gt;(Or white if invert is present This setting overrides Invert)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''draw_barcode(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws a barcode at the x,y co-ordinates with the following optional arguments which can be passed in any order and must be seperated by a comma,&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;format=&amp;lt;code128|code39|codebar&amp;gt; - Defaults to code39&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;left|center|right&amp;gt; - Defaults to Left&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;orientation=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Horizontal&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;height=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Integer value determines the height of the barcode, width is always determined by the string, no scaling option is available.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;width=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Strech or squash the barcode to this width (Does not maintain aspect ratio, use with height)&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt;, - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;color=&amp;lt;r:g:b&amp;gt;&amp;lt;/nowiki&amp;gt; - Set the draw color.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous Functions ====&lt;br /&gt;
* '''label_convert''' - This is a special function to improve the quality of thermal prints when used with the cups print method, it gives a rough approximation of the work the legacy EPL print method does when doing its image conversion. However, as its direct CUPS, there is a performance improvement.&lt;br /&gt;
* '''// comment''' - Using // will add comments to your draw code that won't render.&lt;br /&gt;
&lt;br /&gt;
==== Logic Functions ====&lt;br /&gt;
*''' if(&amp;quot;value&amp;quot;|true-action|false-action);''' - For example if($underage | draw_text(&amp;quot;Underage&amp;quot;, [82.5%,80%]) | do_nothing());&lt;br /&gt;
*''' strcmp(&amp;quot;somthing&amp;quot;=&amp;quot;somthingelse&amp;quot;|true-action|false-action);''' - this function.&lt;br /&gt;
*''' do_nothing();''' - this function is valuable for the IF statements.&lt;br /&gt;
&lt;br /&gt;
===== Special Logic Functions =====&lt;br /&gt;
*''' ifmembershipgroup(&amp;quot;value&amp;quot;|true-action|false-action);''' - This tools is a IF stament that will allow you to draw things depending on whether or not a person has a specific membership group.&lt;br /&gt;
** Example ifmembershipgroup(&amp;quot;patron&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
*''' ifproductpurchased(&amp;quot;upc&amp;quot;|true-action|false-action);''' - This tool is a IF statement that will allow you to draw things depending on whether or not a person has a specific product purchased (paid, not just in cart), and not refunded.&lt;br /&gt;
** Example:ifproductpurchased(&amp;quot;1000180&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
&lt;br /&gt;
===Badgecode Examples===&lt;br /&gt;
&lt;br /&gt;
==== CR80 Horizontal Example ====&lt;br /&gt;
&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:CR80 Horizontal FNO.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Minor Ada Dealer.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Media Ada Dealer.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for StratosFur 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
//badge image commented out, comment out the invert_image line when restoring - will show a black background for testing without image.&lt;br /&gt;
//draw_image(&amp;quot;IMAGE_UID1&amp;quot;, [1,1], [100%,100%]);&lt;br /&gt;
invert_image();&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Event and Membership &lt;br /&gt;
draw_text(&amp;quot;$events_event_title  - $uid&amp;quot;,[95.5%,600],size=30,align=right,color=255:255:255,font=&amp;quot;gayatri&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// draw minor warning - Draws in Red - overlaps with Media Flag, cannot be a media minor.&lt;br /&gt;
if($underage |  draw_text(&amp;quot;Minor&amp;quot;,[95.5%,25.5%],size=150,align=right,color=255:0:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
// Max Width must change for Membership type because of size of minor warning.&lt;br /&gt;
&lt;br /&gt;
if($underage|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=450,font=&amp;quot;gayatri&amp;quot;)|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=1000,font=&amp;quot;gayatri&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//Show marker for ADA - Yellow&lt;br /&gt;
if ($UDF_6_value | draw_text(&amp;quot;ADA&amp;quot;,[95.5%,39.5%],size=60,align=right,color=240:240:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Media - Green - Cannot be Media/Minor, they occupy the same space&lt;br /&gt;
if ($UDF_7_value | draw_text(&amp;quot;Media&amp;quot;,[95.5%,25.5%],size=150,align=right,color=0:255:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Dealers - Draws in Magenta.&lt;br /&gt;
if ($UDF_8_value |draw_text(&amp;quot;Dealers&amp;quot;,[95.5%,50.5%],size=60,align=right,color=255:0:255,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,530],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=1000,color=255:255:255);&lt;br /&gt;
 &lt;br /&gt;
// Next lets draw the furry name under the main name &lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,600],,font=&amp;quot;gayatri&amp;quot;,size=50,align=left,maxwidth=540,color=255:255:255); &lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=600,color=255:255:255;&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
// Next lets draw the real name&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,530],font=&amp;quot;andlso&amp;quot;,size=85,align=left,maxwidth=550,color=255:255:255,font=&amp;quot;gayatri&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=50,align=left,valign=bottom,maxwidth=600,color=255:255:255);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;br /&gt;
&lt;br /&gt;
==== CR80 Vertical Example ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Zebra 4x1 Example ====&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:Zebra 4x1 FNO.jpg|thumb]]&lt;br /&gt;
[[File:Zebra 4x1 FNO Minor.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for TTFC 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
// Lets draw the EVENT ID&lt;br /&gt;
if($underage | draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],inverted=true,size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;) |draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// If underage, draw &amp;quot;UNDER AGE&amp;quot;, else draw optional value (nominally species)&lt;br /&gt;
if($underage | draw_text(&amp;quot;UNDER AGE&amp;quot;, [150,-15],inverted=true,font=&amp;quot;andlso&amp;quot;,size=40,align=left) | draw_text(&amp;quot;$UDF_1_value&amp;quot;,[190,-9],size=28,font=&amp;quot;andlso&amp;quot;,maxwidth=320));&lt;br /&gt;
&lt;br /&gt;
// Draw membership type and UID&lt;br /&gt;
draw_text(&amp;quot;$event_membership_types_long_name&amp;quot;,[-128,-15],size=28,align=right,font=&amp;quot;andlso&amp;quot;)); &lt;br /&gt;
draw_text(&amp;quot;$uid&amp;quot;,[-120,-15],size=28,align=left,font=&amp;quot;andlso&amp;quot;, str_pad_length=4,str_pad_align=left,str_pad_value=&amp;quot;0&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[480,120],font=&amp;quot;andlso&amp;quot;,size=85,align=center,valign=bottom,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=484</id>
		<title>Badge Display Code Documentation</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=484"/>
		<updated>2022-01-12T20:44:59Z</updated>

		<summary type="html">&lt;p&gt;Aloha: /* Image Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In order to generate badges the system uses a series of commands known as ''badgecode''. This ''badgecode'', badge drawing code is documented here.&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Basics ===&lt;br /&gt;
&lt;br /&gt;
Badgecode is highly order of operations based, it renders from top to bottom in order.&lt;br /&gt;
&lt;br /&gt;
Generally, when constructing a badge, place your images near the top, then start to render your text, otherwise your images may render on top of your text. However, this can be used to your advantage, you can use PNG's with partial transparency, to overlay color, images, or other features on top of system rendered objects - including other images. Badges can be built up of multiply layers of objects which can be programmatically switched in or out based on the attendees specific system held data.&lt;br /&gt;
&lt;br /&gt;
For example where you place invert_image(); will effect the way it works, you can make it only effect part of the badge, you can even use multiple invert_image();'s in series to invert part of the badge conditionally based on state (underage, UDF, product purchased, membership, what have you).&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Co-ordinate system. ===&lt;br /&gt;
&lt;br /&gt;
The system requires co-ordinates, and these co-ordinates can be passed in many ways, the most common way will be to pass the just numbers, and numbers will represent pixels in the image your attempting to draw. However, several other methods are possible, including percentages, inches, cm, mm, points, and pixels. In addition the numbers used can be negative which will make them count from the opposite direction.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
The system has many variables that you can pull from in order to put information on-to the badge. Nearly every variable for a person from the database is available in the draw code. The variables are named as &amp;lt;nowiki&amp;gt;&amp;lt;table name&amp;gt;_&amp;lt;field name&amp;gt;&amp;lt;/nowiki&amp;gt; so the fan_name field from the registrant table would be $registrant_fan_name, the current_membership_type from the events_attended table would be $events_attended_current_membership_type. Variables will sometimes need to be followed by a space. This is definatly true in all strings. To get something to read &amp;lt;nowiki&amp;gt;&amp;lt;reg_num&amp;gt;-&amp;lt;uid&amp;gt;&amp;lt;/nowiki&amp;gt; you will need to write your string as &amp;quot;$events_attended_reg_num -$uid&amp;quot; or &amp;quot;$events_attended_reg_num\-$uid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There are some special variables which are populated, here is a list of some of the unique variable names.&lt;br /&gt;
&lt;br /&gt;
==== Event Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Event Variables&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $event_id || Event Short Name E.G. RF0&lt;br /&gt;
|-&lt;br /&gt;
| $events_event_title || Event Title defined on the Edit Event screen.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_name || The membership group.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_long_name || The membership name as is intended to be printed on the badge.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Registrant Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Registrant Variables&lt;br /&gt;
|-&lt;br /&gt;
| $uid || Registrant UID&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_first_created || Creation date of the person.&lt;br /&gt;
|-&lt;br /&gt;
| $events_attended_reg_num || Registration Sequence Number&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_common_name || Uses the $registrant_fan_name value if the value is not empty, and uses the $registrant_rl_first and $registrant_rl_last otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_fan_name || Registrant Fan/Badge Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_rl_first || Registrant First Name&lt;br /&gt;
|- &lt;br /&gt;
| $registrant_rl_last || Registrant Last Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_birthday || The person's birthday.&lt;br /&gt;
|-&lt;br /&gt;
| $underage || true if the person is under the specified of_age. A good example of the use of this could be &amp;lt;nowiki&amp;gt;if($underage|invert_image()|do_nothing());&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Special Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Special Variables&lt;br /&gt;
|-&lt;br /&gt;
! Special Variable !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $staff || if $event_membership_types_name contains the word 'staff' this will equal true, this is not case sensitive. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== UDF Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ User Defined Fields - User defined fields can be applied on the badges. Use the following variables.&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_title || Will display the title of the user defined field. (If the customer has it applied to them)  Ex: $UDF_12_title.&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_value || Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
==== Drawing Functions ====&lt;br /&gt;
All draw functions end in a ;&lt;br /&gt;
===== Geometry Functions =====&lt;br /&gt;
* '''draw_line([ulx,uly],[llx,lly])''' - Draws a line from [x.y] to [x,y]&lt;br /&gt;
* '''draw_box([ulx,uly],[llx,lly],Optional Arguments here)''' - Will draw a box with the top corner being at the first pair, and the lower right being at the second pair. This function always starts drawing from the top or the left.&lt;br /&gt;
** filled=yes - Will Fill the box with black (or the color specified in color)&lt;br /&gt;
** color=r:g:b - Will set the draw color for this function to the specified rgb value.&lt;br /&gt;
&lt;br /&gt;
===== Image Functions =====&lt;br /&gt;
* '''draw_image(&amp;quot;filename&amp;quot;,[p1x,p1y],[p2x,p2y])''' - Draw the specified image with the top left of the image at point 1, and the lower right of the image at point 2. If IMAGE_UID### is specified instead of a filename the image will be pulled from the badge_images table and used instead.  There is no space between IMAGE_UID and the Number of the badge_image.&lt;br /&gt;
* '''flood_fill(r,g,b)''' - will perform a flood fill on the image at 2,2&lt;br /&gt;
*'''invert_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
*'''grayscale_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
* '''image_contrast(0);''' - Adjust image contrast - note, negative numbers are more contrast, positive numbers are less.&lt;br /&gt;
* '''image_brightness();''' -  Adjust image brightness - Valid range  is -255 to 255, 255 is most brightness, -255 is least.&lt;br /&gt;
* '''emboss_image();''' - Adds an Artistic Embossed Look to an image.&lt;br /&gt;
* '''tint_image(r,g,b,''a'')''' - will colorize the entire image based on the RGB values specified. By default if you do not pass an alpha value in badgecode, one is inserted (0) by the parse_color function, this is fully opaque, you can adjust the intensity of the tinting effect by adjusting the transparency level. This is somewhat non-intuitive to use. Valid Alpha ranges are between 0 and 127, Valid Color Ranges are between 0 and 255.&lt;br /&gt;
&lt;br /&gt;
===== Layout Assistance Function =====&lt;br /&gt;
* '''draw_measure([x,y],Optional Arguments Here)''' - Will draw a measurement line for you to help figure out co-ordinates of your drawing.&lt;br /&gt;
** ticks=&amp;lt;integer&amp;gt; - Defaults to 100 (Draw a large tick every &amp;lt;integer&amp;gt; pixels, and a small tick every &amp;lt;integer/2&amp;gt; pixels)&lt;br /&gt;
** type=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Vertical&lt;br /&gt;
&lt;br /&gt;
===== Text and Barcode Functions =====&lt;br /&gt;
* '''draw_text(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws text at the x,y co-ordinates, with the following optional arguments which can be passed in any order and must be seperated by a comma.&lt;br /&gt;
** font=&amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; is the name of a font file in the shared_php folder, case-sensitive, do not add the .ttf extension.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;aign&amp;gt; is the alignment you want, left, right or center&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;vertalign=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;align&amp;gt; is top, middle or bottom.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;size=&amp;lt;size&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;size&amp;gt; is the size of the text you want&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;angle=&amp;lt;angle&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;angle&amp;gt; is the angle of the text&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;border=&amp;lt;true|false|numeric&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if there will be a border on the text If border is a numeric value the value will dictate the thickness of the border.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;inverted=&amp;lt;true|false&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if the text will be inverted.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;maxwidth=&amp;lt;width&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the maximum width this text can take, if long names appear they will be automatically reduced in font in order for them to maintain a size no greater than the maximum width.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** color=r:g:b - If this value is present then the rgb value of the color will be used for the font. Otherwise, black will be used. &amp;lt;nowiki&amp;gt;(Or white if invert is present This setting overrides Invert)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''draw_barcode(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws a barcode at the x,y co-ordinates with the following optional arguments which can be passed in any order and must be seperated by a comma,&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;format=&amp;lt;code128|code39|codebar&amp;gt; - Defaults to code39&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;left|center|right&amp;gt; - Defaults to Left&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;orientation=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Horizontal&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;height=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Integer value determines the height of the barcode, width is always determined by the string, no scaling option is available.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;width=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Strech or squash the barcode to this width (Does not maintain aspect ratio, use with height)&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt;, - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;color=&amp;lt;r:g:b&amp;gt;&amp;lt;/nowiki&amp;gt; - Set the draw color.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous Functions ====&lt;br /&gt;
* '''label_convert''' - This is a special function to improve the quality of thermal prints when used with the cups print method, it gives a rough approximation of the work the legacy EPL print method does when doing its image conversion. However, as its direct CUPS, there is a performance improvement.&lt;br /&gt;
* '''// comment''' - Using // will add comments to your draw code that won't render.&lt;br /&gt;
&lt;br /&gt;
==== Logic Functions ====&lt;br /&gt;
*''' if(&amp;quot;value&amp;quot;|true-action|false-action);''' - For example if($underage | draw_text(&amp;quot;Underage&amp;quot;, [82.5%,80%]) | do_nothing());&lt;br /&gt;
*''' strcmp(&amp;quot;somthing&amp;quot;=&amp;quot;somthingelse&amp;quot;|true-action|false-action);''' - this function.&lt;br /&gt;
*''' do_nothing();''' - this function is valuable for the IF statements.&lt;br /&gt;
&lt;br /&gt;
===== Special Logic Functions =====&lt;br /&gt;
*''' ifmembershipgroup(&amp;quot;value&amp;quot;|true-action|false-action);''' - This tools is a IF stament that will allow you to draw things depending on whether or not a person has a specific membership group.&lt;br /&gt;
** Example ifmembershipgroup(&amp;quot;patron&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
*''' ifproductpurchased(&amp;quot;upc&amp;quot;|true-action|false-action);''' - This tool is a IF statement that will allow you to draw things depending on whether or not a person has a specific product purchased (paid, not just in cart), and not refunded.&lt;br /&gt;
** Example:ifproductpurchased(&amp;quot;1000180&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
&lt;br /&gt;
===Badgecode Examples===&lt;br /&gt;
&lt;br /&gt;
==== CR80 Horizontal Example ====&lt;br /&gt;
&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:CR80 Horizontal FNO.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Minor Ada Dealer.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Media Ada Dealer.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for StratosFur 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
//badge image commented out, comment out the invert_image line when restoring - will show a black background for testing without image.&lt;br /&gt;
//draw_image(&amp;quot;IMAGE_UID1&amp;quot;, [1,1], [100%,100%]);&lt;br /&gt;
invert_image();&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Event and Membership &lt;br /&gt;
draw_text(&amp;quot;$events_event_title  - $uid&amp;quot;,[95.5%,600],size=30,align=right,color=255:255:255,font=&amp;quot;gayatri&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// draw minor warning - Draws in Red - overlaps with Media Flag, cannot be a media minor.&lt;br /&gt;
if($underage |  draw_text(&amp;quot;Minor&amp;quot;,[95.5%,25.5%],size=150,align=right,color=255:0:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
// Max Width must change for Membership type because of size of minor warning.&lt;br /&gt;
&lt;br /&gt;
if($underage|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=450,font=&amp;quot;gayatri&amp;quot;)|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=1000,font=&amp;quot;gayatri&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//Show marker for ADA - Yellow&lt;br /&gt;
if ($UDF_6_value | draw_text(&amp;quot;ADA&amp;quot;,[95.5%,39.5%],size=60,align=right,color=240:240:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Media - Green - Cannot be Media/Minor, they occupy the same space&lt;br /&gt;
if ($UDF_7_value | draw_text(&amp;quot;Media&amp;quot;,[95.5%,25.5%],size=150,align=right,color=0:255:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Dealers - Draws in Magenta.&lt;br /&gt;
if ($UDF_8_value |draw_text(&amp;quot;Dealers&amp;quot;,[95.5%,50.5%],size=60,align=right,color=255:0:255,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,530],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=1000,color=255:255:255);&lt;br /&gt;
 &lt;br /&gt;
// Next lets draw the furry name under the main name &lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,600],,font=&amp;quot;gayatri&amp;quot;,size=50,align=left,maxwidth=540,color=255:255:255); &lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=600,color=255:255:255;&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
// Next lets draw the real name&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,530],font=&amp;quot;andlso&amp;quot;,size=85,align=left,maxwidth=550,color=255:255:255,font=&amp;quot;gayatri&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=50,align=left,valign=bottom,maxwidth=600,color=255:255:255);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;br /&gt;
&lt;br /&gt;
==== CR80 Vertical Example ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Zebra 4x1 Example ====&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:Zebra 4x1 FNO.jpg|thumb]]&lt;br /&gt;
[[File:Zebra 4x1 FNO Minor.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for TTFC 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
// Lets draw the EVENT ID&lt;br /&gt;
if($underage | draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],inverted=true,size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;) |draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// If underage, draw &amp;quot;UNDER AGE&amp;quot;, else draw optional value (nominally species)&lt;br /&gt;
if($underage | draw_text(&amp;quot;UNDER AGE&amp;quot;, [150,-15],inverted=true,font=&amp;quot;andlso&amp;quot;,size=40,align=left) | draw_text(&amp;quot;$UDF_1_value&amp;quot;,[190,-9],size=28,font=&amp;quot;andlso&amp;quot;,maxwidth=320));&lt;br /&gt;
&lt;br /&gt;
// Draw membership type and UID&lt;br /&gt;
draw_text(&amp;quot;$event_membership_types_long_name&amp;quot;,[-128,-15],size=28,align=right,font=&amp;quot;andlso&amp;quot;)); &lt;br /&gt;
draw_text(&amp;quot;$uid&amp;quot;,[-120,-15],size=28,align=left,font=&amp;quot;andlso&amp;quot;, str_pad_length=4,str_pad_align=left,str_pad_value=&amp;quot;0&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[480,120],font=&amp;quot;andlso&amp;quot;,size=85,align=center,valign=bottom,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=483</id>
		<title>Badge Display Code Documentation</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=483"/>
		<updated>2022-01-12T20:44:24Z</updated>

		<summary type="html">&lt;p&gt;Aloha: /* Image Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In order to generate badges the system uses a series of commands known as ''badgecode''. This ''badgecode'', badge drawing code is documented here.&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Basics ===&lt;br /&gt;
&lt;br /&gt;
Badgecode is highly order of operations based, it renders from top to bottom in order.&lt;br /&gt;
&lt;br /&gt;
Generally, when constructing a badge, place your images near the top, then start to render your text, otherwise your images may render on top of your text. However, this can be used to your advantage, you can use PNG's with partial transparency, to overlay color, images, or other features on top of system rendered objects - including other images. Badges can be built up of multiply layers of objects which can be programmatically switched in or out based on the attendees specific system held data.&lt;br /&gt;
&lt;br /&gt;
For example where you place invert_image(); will effect the way it works, you can make it only effect part of the badge, you can even use multiple invert_image();'s in series to invert part of the badge conditionally based on state (underage, UDF, product purchased, membership, what have you).&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Co-ordinate system. ===&lt;br /&gt;
&lt;br /&gt;
The system requires co-ordinates, and these co-ordinates can be passed in many ways, the most common way will be to pass the just numbers, and numbers will represent pixels in the image your attempting to draw. However, several other methods are possible, including percentages, inches, cm, mm, points, and pixels. In addition the numbers used can be negative which will make them count from the opposite direction.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
The system has many variables that you can pull from in order to put information on-to the badge. Nearly every variable for a person from the database is available in the draw code. The variables are named as &amp;lt;nowiki&amp;gt;&amp;lt;table name&amp;gt;_&amp;lt;field name&amp;gt;&amp;lt;/nowiki&amp;gt; so the fan_name field from the registrant table would be $registrant_fan_name, the current_membership_type from the events_attended table would be $events_attended_current_membership_type. Variables will sometimes need to be followed by a space. This is definatly true in all strings. To get something to read &amp;lt;nowiki&amp;gt;&amp;lt;reg_num&amp;gt;-&amp;lt;uid&amp;gt;&amp;lt;/nowiki&amp;gt; you will need to write your string as &amp;quot;$events_attended_reg_num -$uid&amp;quot; or &amp;quot;$events_attended_reg_num\-$uid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There are some special variables which are populated, here is a list of some of the unique variable names.&lt;br /&gt;
&lt;br /&gt;
==== Event Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Event Variables&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $event_id || Event Short Name E.G. RF0&lt;br /&gt;
|-&lt;br /&gt;
| $events_event_title || Event Title defined on the Edit Event screen.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_name || The membership group.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_long_name || The membership name as is intended to be printed on the badge.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Registrant Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Registrant Variables&lt;br /&gt;
|-&lt;br /&gt;
| $uid || Registrant UID&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_first_created || Creation date of the person.&lt;br /&gt;
|-&lt;br /&gt;
| $events_attended_reg_num || Registration Sequence Number&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_common_name || Uses the $registrant_fan_name value if the value is not empty, and uses the $registrant_rl_first and $registrant_rl_last otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_fan_name || Registrant Fan/Badge Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_rl_first || Registrant First Name&lt;br /&gt;
|- &lt;br /&gt;
| $registrant_rl_last || Registrant Last Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_birthday || The person's birthday.&lt;br /&gt;
|-&lt;br /&gt;
| $underage || true if the person is under the specified of_age. A good example of the use of this could be &amp;lt;nowiki&amp;gt;if($underage|invert_image()|do_nothing());&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Special Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Special Variables&lt;br /&gt;
|-&lt;br /&gt;
! Special Variable !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $staff || if $event_membership_types_name contains the word 'staff' this will equal true, this is not case sensitive. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== UDF Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ User Defined Fields - User defined fields can be applied on the badges. Use the following variables.&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_title || Will display the title of the user defined field. (If the customer has it applied to them)  Ex: $UDF_12_title.&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_value || Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
==== Drawing Functions ====&lt;br /&gt;
All draw functions end in a ;&lt;br /&gt;
===== Geometry Functions =====&lt;br /&gt;
* '''draw_line([ulx,uly],[llx,lly])''' - Draws a line from [x.y] to [x,y]&lt;br /&gt;
* '''draw_box([ulx,uly],[llx,lly],Optional Arguments here)''' - Will draw a box with the top corner being at the first pair, and the lower right being at the second pair. This function always starts drawing from the top or the left.&lt;br /&gt;
** filled=yes - Will Fill the box with black (or the color specified in color)&lt;br /&gt;
** color=r:g:b - Will set the draw color for this function to the specified rgb value.&lt;br /&gt;
&lt;br /&gt;
===== Image Functions =====&lt;br /&gt;
* '''draw_image(&amp;quot;filename&amp;quot;,[p1x,p1y],[p2x,p2y])''' - Draw the specified image with the top left of the image at point 1, and the lower right of the image at point 2. If IMAGE_UID### is specified instead of a filename the image will be pulled from the badge_images table and used instead.  There is no space between IMAGE_UID and the Number of the badge_image.&lt;br /&gt;
* '''flood_fill(r,g,b)''' - will perform a flood fill on the image at 2,2&lt;br /&gt;
*'''invert_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
*'''grayscale_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
* '''image_contrast(0);''' - Adjust image contrast - note, negative numbers are more contrast, positive numbers are less.&lt;br /&gt;
* '''image_brightness();''' -  Adjust image brightness - Valid range  is -255 to 255, 255 is most brightness, -255 is least.&lt;br /&gt;
* '''emboss_image();''' - Adds an Artistic Embossed Look to an image.&lt;br /&gt;
* '''tint_image(r,g,b,''a'')''' - will colorize the entire image based on the RGB values specified. By default if you do not pass an alpha value in badgecode, one is inserted (0) by the parse_color function, this is fully opaque, you can adjust the intensity of the tinting effect by adjusting the transparency level. This is somewhat non-intuitive to use. &lt;br /&gt;
Valid Alpha ranges are between 0 and 127, Valid Color Ranges are between 0 and 255.&lt;br /&gt;
&lt;br /&gt;
===== Layout Assistance Function =====&lt;br /&gt;
* '''draw_measure([x,y],Optional Arguments Here)''' - Will draw a measurement line for you to help figure out co-ordinates of your drawing.&lt;br /&gt;
** ticks=&amp;lt;integer&amp;gt; - Defaults to 100 (Draw a large tick every &amp;lt;integer&amp;gt; pixels, and a small tick every &amp;lt;integer/2&amp;gt; pixels)&lt;br /&gt;
** type=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Vertical&lt;br /&gt;
&lt;br /&gt;
===== Text and Barcode Functions =====&lt;br /&gt;
* '''draw_text(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws text at the x,y co-ordinates, with the following optional arguments which can be passed in any order and must be seperated by a comma.&lt;br /&gt;
** font=&amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; is the name of a font file in the shared_php folder, case-sensitive, do not add the .ttf extension.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;aign&amp;gt; is the alignment you want, left, right or center&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;vertalign=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;align&amp;gt; is top, middle or bottom.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;size=&amp;lt;size&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;size&amp;gt; is the size of the text you want&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;angle=&amp;lt;angle&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;angle&amp;gt; is the angle of the text&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;border=&amp;lt;true|false|numeric&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if there will be a border on the text If border is a numeric value the value will dictate the thickness of the border.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;inverted=&amp;lt;true|false&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if the text will be inverted.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;maxwidth=&amp;lt;width&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the maximum width this text can take, if long names appear they will be automatically reduced in font in order for them to maintain a size no greater than the maximum width.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** color=r:g:b - If this value is present then the rgb value of the color will be used for the font. Otherwise, black will be used. &amp;lt;nowiki&amp;gt;(Or white if invert is present This setting overrides Invert)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''draw_barcode(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws a barcode at the x,y co-ordinates with the following optional arguments which can be passed in any order and must be seperated by a comma,&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;format=&amp;lt;code128|code39|codebar&amp;gt; - Defaults to code39&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;left|center|right&amp;gt; - Defaults to Left&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;orientation=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Horizontal&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;height=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Integer value determines the height of the barcode, width is always determined by the string, no scaling option is available.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;width=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Strech or squash the barcode to this width (Does not maintain aspect ratio, use with height)&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt;, - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;color=&amp;lt;r:g:b&amp;gt;&amp;lt;/nowiki&amp;gt; - Set the draw color.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous Functions ====&lt;br /&gt;
* '''label_convert''' - This is a special function to improve the quality of thermal prints when used with the cups print method, it gives a rough approximation of the work the legacy EPL print method does when doing its image conversion. However, as its direct CUPS, there is a performance improvement.&lt;br /&gt;
* '''// comment''' - Using // will add comments to your draw code that won't render.&lt;br /&gt;
&lt;br /&gt;
==== Logic Functions ====&lt;br /&gt;
*''' if(&amp;quot;value&amp;quot;|true-action|false-action);''' - For example if($underage | draw_text(&amp;quot;Underage&amp;quot;, [82.5%,80%]) | do_nothing());&lt;br /&gt;
*''' strcmp(&amp;quot;somthing&amp;quot;=&amp;quot;somthingelse&amp;quot;|true-action|false-action);''' - this function.&lt;br /&gt;
*''' do_nothing();''' - this function is valuable for the IF statements.&lt;br /&gt;
&lt;br /&gt;
===== Special Logic Functions =====&lt;br /&gt;
*''' ifmembershipgroup(&amp;quot;value&amp;quot;|true-action|false-action);''' - This tools is a IF stament that will allow you to draw things depending on whether or not a person has a specific membership group.&lt;br /&gt;
** Example ifmembershipgroup(&amp;quot;patron&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
*''' ifproductpurchased(&amp;quot;upc&amp;quot;|true-action|false-action);''' - This tool is a IF statement that will allow you to draw things depending on whether or not a person has a specific product purchased (paid, not just in cart), and not refunded.&lt;br /&gt;
** Example:ifproductpurchased(&amp;quot;1000180&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
&lt;br /&gt;
===Badgecode Examples===&lt;br /&gt;
&lt;br /&gt;
==== CR80 Horizontal Example ====&lt;br /&gt;
&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:CR80 Horizontal FNO.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Minor Ada Dealer.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Media Ada Dealer.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for StratosFur 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
//badge image commented out, comment out the invert_image line when restoring - will show a black background for testing without image.&lt;br /&gt;
//draw_image(&amp;quot;IMAGE_UID1&amp;quot;, [1,1], [100%,100%]);&lt;br /&gt;
invert_image();&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Event and Membership &lt;br /&gt;
draw_text(&amp;quot;$events_event_title  - $uid&amp;quot;,[95.5%,600],size=30,align=right,color=255:255:255,font=&amp;quot;gayatri&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// draw minor warning - Draws in Red - overlaps with Media Flag, cannot be a media minor.&lt;br /&gt;
if($underage |  draw_text(&amp;quot;Minor&amp;quot;,[95.5%,25.5%],size=150,align=right,color=255:0:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
// Max Width must change for Membership type because of size of minor warning.&lt;br /&gt;
&lt;br /&gt;
if($underage|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=450,font=&amp;quot;gayatri&amp;quot;)|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=1000,font=&amp;quot;gayatri&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//Show marker for ADA - Yellow&lt;br /&gt;
if ($UDF_6_value | draw_text(&amp;quot;ADA&amp;quot;,[95.5%,39.5%],size=60,align=right,color=240:240:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Media - Green - Cannot be Media/Minor, they occupy the same space&lt;br /&gt;
if ($UDF_7_value | draw_text(&amp;quot;Media&amp;quot;,[95.5%,25.5%],size=150,align=right,color=0:255:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Dealers - Draws in Magenta.&lt;br /&gt;
if ($UDF_8_value |draw_text(&amp;quot;Dealers&amp;quot;,[95.5%,50.5%],size=60,align=right,color=255:0:255,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,530],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=1000,color=255:255:255);&lt;br /&gt;
 &lt;br /&gt;
// Next lets draw the furry name under the main name &lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,600],,font=&amp;quot;gayatri&amp;quot;,size=50,align=left,maxwidth=540,color=255:255:255); &lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=600,color=255:255:255;&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
// Next lets draw the real name&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,530],font=&amp;quot;andlso&amp;quot;,size=85,align=left,maxwidth=550,color=255:255:255,font=&amp;quot;gayatri&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=50,align=left,valign=bottom,maxwidth=600,color=255:255:255);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;br /&gt;
&lt;br /&gt;
==== CR80 Vertical Example ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Zebra 4x1 Example ====&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:Zebra 4x1 FNO.jpg|thumb]]&lt;br /&gt;
[[File:Zebra 4x1 FNO Minor.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for TTFC 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
// Lets draw the EVENT ID&lt;br /&gt;
if($underage | draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],inverted=true,size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;) |draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// If underage, draw &amp;quot;UNDER AGE&amp;quot;, else draw optional value (nominally species)&lt;br /&gt;
if($underage | draw_text(&amp;quot;UNDER AGE&amp;quot;, [150,-15],inverted=true,font=&amp;quot;andlso&amp;quot;,size=40,align=left) | draw_text(&amp;quot;$UDF_1_value&amp;quot;,[190,-9],size=28,font=&amp;quot;andlso&amp;quot;,maxwidth=320));&lt;br /&gt;
&lt;br /&gt;
// Draw membership type and UID&lt;br /&gt;
draw_text(&amp;quot;$event_membership_types_long_name&amp;quot;,[-128,-15],size=28,align=right,font=&amp;quot;andlso&amp;quot;)); &lt;br /&gt;
draw_text(&amp;quot;$uid&amp;quot;,[-120,-15],size=28,align=left,font=&amp;quot;andlso&amp;quot;, str_pad_length=4,str_pad_align=left,str_pad_value=&amp;quot;0&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[480,120],font=&amp;quot;andlso&amp;quot;,size=85,align=center,valign=bottom,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=482</id>
		<title>Badge Display Code Documentation</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=482"/>
		<updated>2022-01-12T20:43:47Z</updated>

		<summary type="html">&lt;p&gt;Aloha: /* Image Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In order to generate badges the system uses a series of commands known as ''badgecode''. This ''badgecode'', badge drawing code is documented here.&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Basics ===&lt;br /&gt;
&lt;br /&gt;
Badgecode is highly order of operations based, it renders from top to bottom in order.&lt;br /&gt;
&lt;br /&gt;
Generally, when constructing a badge, place your images near the top, then start to render your text, otherwise your images may render on top of your text. However, this can be used to your advantage, you can use PNG's with partial transparency, to overlay color, images, or other features on top of system rendered objects - including other images. Badges can be built up of multiply layers of objects which can be programmatically switched in or out based on the attendees specific system held data.&lt;br /&gt;
&lt;br /&gt;
For example where you place invert_image(); will effect the way it works, you can make it only effect part of the badge, you can even use multiple invert_image();'s in series to invert part of the badge conditionally based on state (underage, UDF, product purchased, membership, what have you).&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Co-ordinate system. ===&lt;br /&gt;
&lt;br /&gt;
The system requires co-ordinates, and these co-ordinates can be passed in many ways, the most common way will be to pass the just numbers, and numbers will represent pixels in the image your attempting to draw. However, several other methods are possible, including percentages, inches, cm, mm, points, and pixels. In addition the numbers used can be negative which will make them count from the opposite direction.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
The system has many variables that you can pull from in order to put information on-to the badge. Nearly every variable for a person from the database is available in the draw code. The variables are named as &amp;lt;nowiki&amp;gt;&amp;lt;table name&amp;gt;_&amp;lt;field name&amp;gt;&amp;lt;/nowiki&amp;gt; so the fan_name field from the registrant table would be $registrant_fan_name, the current_membership_type from the events_attended table would be $events_attended_current_membership_type. Variables will sometimes need to be followed by a space. This is definatly true in all strings. To get something to read &amp;lt;nowiki&amp;gt;&amp;lt;reg_num&amp;gt;-&amp;lt;uid&amp;gt;&amp;lt;/nowiki&amp;gt; you will need to write your string as &amp;quot;$events_attended_reg_num -$uid&amp;quot; or &amp;quot;$events_attended_reg_num\-$uid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There are some special variables which are populated, here is a list of some of the unique variable names.&lt;br /&gt;
&lt;br /&gt;
==== Event Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Event Variables&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $event_id || Event Short Name E.G. RF0&lt;br /&gt;
|-&lt;br /&gt;
| $events_event_title || Event Title defined on the Edit Event screen.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_name || The membership group.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_long_name || The membership name as is intended to be printed on the badge.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Registrant Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Registrant Variables&lt;br /&gt;
|-&lt;br /&gt;
| $uid || Registrant UID&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_first_created || Creation date of the person.&lt;br /&gt;
|-&lt;br /&gt;
| $events_attended_reg_num || Registration Sequence Number&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_common_name || Uses the $registrant_fan_name value if the value is not empty, and uses the $registrant_rl_first and $registrant_rl_last otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_fan_name || Registrant Fan/Badge Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_rl_first || Registrant First Name&lt;br /&gt;
|- &lt;br /&gt;
| $registrant_rl_last || Registrant Last Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_birthday || The person's birthday.&lt;br /&gt;
|-&lt;br /&gt;
| $underage || true if the person is under the specified of_age. A good example of the use of this could be &amp;lt;nowiki&amp;gt;if($underage|invert_image()|do_nothing());&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Special Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Special Variables&lt;br /&gt;
|-&lt;br /&gt;
! Special Variable !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $staff || if $event_membership_types_name contains the word 'staff' this will equal true, this is not case sensitive. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== UDF Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ User Defined Fields - User defined fields can be applied on the badges. Use the following variables.&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_title || Will display the title of the user defined field. (If the customer has it applied to them)  Ex: $UDF_12_title.&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_value || Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
==== Drawing Functions ====&lt;br /&gt;
All draw functions end in a ;&lt;br /&gt;
===== Geometry Functions =====&lt;br /&gt;
* '''draw_line([ulx,uly],[llx,lly])''' - Draws a line from [x.y] to [x,y]&lt;br /&gt;
* '''draw_box([ulx,uly],[llx,lly],Optional Arguments here)''' - Will draw a box with the top corner being at the first pair, and the lower right being at the second pair. This function always starts drawing from the top or the left.&lt;br /&gt;
** filled=yes - Will Fill the box with black (or the color specified in color)&lt;br /&gt;
** color=r:g:b - Will set the draw color for this function to the specified rgb value.&lt;br /&gt;
&lt;br /&gt;
===== Image Functions =====&lt;br /&gt;
* '''draw_image(&amp;quot;filename&amp;quot;,[p1x,p1y],[p2x,p2y])''' - Draw the specified image with the top left of the image at point 1, and the lower right of the image at point 2. If IMAGE_UID### is specified instead of a filename the image will be pulled from the badge_images table and used instead.  There is no space between IMAGE_UID and the Number of the badge_image.&lt;br /&gt;
* '''flood_fill(r,g,b)''' - will perform a flood fill on the image at 2,2&lt;br /&gt;
*'''invert_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
*'''grayscale_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
* '''tint_image(r,g,b,''a'')''' - will colorize the entire image based on the RGB values specified. By default if you do not pass an alpha value in badgecode, one is inserted (0) by the parse_color function, this is fully opaque, you can adjust the intensity of the tinting effect by adjusting the transparency level. This is somewhat non-intuitive to use. Valid Alpha ranges are between 0 and 127, Valid Color Ranges are between 0 and 255.&lt;br /&gt;
* '''image_contrast(0);''' - Adjust image contrast - note, negative numbers are more contrast, positive numbers are less.&lt;br /&gt;
* '''image_brightness();''' -  Adjust image brightness - Valid range  is -255 to 255, 255 is most brightness, -255 is least.&lt;br /&gt;
* '''emboss_image();''' - Adds an Artistic Embossed Look to an image.&lt;br /&gt;
&lt;br /&gt;
===== Layout Assistance Function =====&lt;br /&gt;
* '''draw_measure([x,y],Optional Arguments Here)''' - Will draw a measurement line for you to help figure out co-ordinates of your drawing.&lt;br /&gt;
** ticks=&amp;lt;integer&amp;gt; - Defaults to 100 (Draw a large tick every &amp;lt;integer&amp;gt; pixels, and a small tick every &amp;lt;integer/2&amp;gt; pixels)&lt;br /&gt;
** type=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Vertical&lt;br /&gt;
&lt;br /&gt;
===== Text and Barcode Functions =====&lt;br /&gt;
* '''draw_text(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws text at the x,y co-ordinates, with the following optional arguments which can be passed in any order and must be seperated by a comma.&lt;br /&gt;
** font=&amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; is the name of a font file in the shared_php folder, case-sensitive, do not add the .ttf extension.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;aign&amp;gt; is the alignment you want, left, right or center&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;vertalign=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;align&amp;gt; is top, middle or bottom.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;size=&amp;lt;size&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;size&amp;gt; is the size of the text you want&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;angle=&amp;lt;angle&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;angle&amp;gt; is the angle of the text&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;border=&amp;lt;true|false|numeric&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if there will be a border on the text If border is a numeric value the value will dictate the thickness of the border.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;inverted=&amp;lt;true|false&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if the text will be inverted.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;maxwidth=&amp;lt;width&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the maximum width this text can take, if long names appear they will be automatically reduced in font in order for them to maintain a size no greater than the maximum width.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** color=r:g:b - If this value is present then the rgb value of the color will be used for the font. Otherwise, black will be used. &amp;lt;nowiki&amp;gt;(Or white if invert is present This setting overrides Invert)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''draw_barcode(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws a barcode at the x,y co-ordinates with the following optional arguments which can be passed in any order and must be seperated by a comma,&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;format=&amp;lt;code128|code39|codebar&amp;gt; - Defaults to code39&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;left|center|right&amp;gt; - Defaults to Left&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;orientation=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Horizontal&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;height=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Integer value determines the height of the barcode, width is always determined by the string, no scaling option is available.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;width=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Strech or squash the barcode to this width (Does not maintain aspect ratio, use with height)&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt;, - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;color=&amp;lt;r:g:b&amp;gt;&amp;lt;/nowiki&amp;gt; - Set the draw color.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous Functions ====&lt;br /&gt;
* '''label_convert''' - This is a special function to improve the quality of thermal prints when used with the cups print method, it gives a rough approximation of the work the legacy EPL print method does when doing its image conversion. However, as its direct CUPS, there is a performance improvement.&lt;br /&gt;
* '''// comment''' - Using // will add comments to your draw code that won't render.&lt;br /&gt;
&lt;br /&gt;
==== Logic Functions ====&lt;br /&gt;
*''' if(&amp;quot;value&amp;quot;|true-action|false-action);''' - For example if($underage | draw_text(&amp;quot;Underage&amp;quot;, [82.5%,80%]) | do_nothing());&lt;br /&gt;
*''' strcmp(&amp;quot;somthing&amp;quot;=&amp;quot;somthingelse&amp;quot;|true-action|false-action);''' - this function.&lt;br /&gt;
*''' do_nothing();''' - this function is valuable for the IF statements.&lt;br /&gt;
&lt;br /&gt;
===== Special Logic Functions =====&lt;br /&gt;
*''' ifmembershipgroup(&amp;quot;value&amp;quot;|true-action|false-action);''' - This tools is a IF stament that will allow you to draw things depending on whether or not a person has a specific membership group.&lt;br /&gt;
** Example ifmembershipgroup(&amp;quot;patron&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
*''' ifproductpurchased(&amp;quot;upc&amp;quot;|true-action|false-action);''' - This tool is a IF statement that will allow you to draw things depending on whether or not a person has a specific product purchased (paid, not just in cart), and not refunded.&lt;br /&gt;
** Example:ifproductpurchased(&amp;quot;1000180&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
&lt;br /&gt;
===Badgecode Examples===&lt;br /&gt;
&lt;br /&gt;
==== CR80 Horizontal Example ====&lt;br /&gt;
&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:CR80 Horizontal FNO.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Minor Ada Dealer.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Media Ada Dealer.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for StratosFur 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
//badge image commented out, comment out the invert_image line when restoring - will show a black background for testing without image.&lt;br /&gt;
//draw_image(&amp;quot;IMAGE_UID1&amp;quot;, [1,1], [100%,100%]);&lt;br /&gt;
invert_image();&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Event and Membership &lt;br /&gt;
draw_text(&amp;quot;$events_event_title  - $uid&amp;quot;,[95.5%,600],size=30,align=right,color=255:255:255,font=&amp;quot;gayatri&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// draw minor warning - Draws in Red - overlaps with Media Flag, cannot be a media minor.&lt;br /&gt;
if($underage |  draw_text(&amp;quot;Minor&amp;quot;,[95.5%,25.5%],size=150,align=right,color=255:0:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
// Max Width must change for Membership type because of size of minor warning.&lt;br /&gt;
&lt;br /&gt;
if($underage|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=450,font=&amp;quot;gayatri&amp;quot;)|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=1000,font=&amp;quot;gayatri&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//Show marker for ADA - Yellow&lt;br /&gt;
if ($UDF_6_value | draw_text(&amp;quot;ADA&amp;quot;,[95.5%,39.5%],size=60,align=right,color=240:240:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Media - Green - Cannot be Media/Minor, they occupy the same space&lt;br /&gt;
if ($UDF_7_value | draw_text(&amp;quot;Media&amp;quot;,[95.5%,25.5%],size=150,align=right,color=0:255:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Dealers - Draws in Magenta.&lt;br /&gt;
if ($UDF_8_value |draw_text(&amp;quot;Dealers&amp;quot;,[95.5%,50.5%],size=60,align=right,color=255:0:255,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,530],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=1000,color=255:255:255);&lt;br /&gt;
 &lt;br /&gt;
// Next lets draw the furry name under the main name &lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,600],,font=&amp;quot;gayatri&amp;quot;,size=50,align=left,maxwidth=540,color=255:255:255); &lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=600,color=255:255:255;&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
// Next lets draw the real name&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,530],font=&amp;quot;andlso&amp;quot;,size=85,align=left,maxwidth=550,color=255:255:255,font=&amp;quot;gayatri&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=50,align=left,valign=bottom,maxwidth=600,color=255:255:255);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;br /&gt;
&lt;br /&gt;
==== CR80 Vertical Example ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Zebra 4x1 Example ====&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:Zebra 4x1 FNO.jpg|thumb]]&lt;br /&gt;
[[File:Zebra 4x1 FNO Minor.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for TTFC 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
// Lets draw the EVENT ID&lt;br /&gt;
if($underage | draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],inverted=true,size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;) |draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// If underage, draw &amp;quot;UNDER AGE&amp;quot;, else draw optional value (nominally species)&lt;br /&gt;
if($underage | draw_text(&amp;quot;UNDER AGE&amp;quot;, [150,-15],inverted=true,font=&amp;quot;andlso&amp;quot;,size=40,align=left) | draw_text(&amp;quot;$UDF_1_value&amp;quot;,[190,-9],size=28,font=&amp;quot;andlso&amp;quot;,maxwidth=320));&lt;br /&gt;
&lt;br /&gt;
// Draw membership type and UID&lt;br /&gt;
draw_text(&amp;quot;$event_membership_types_long_name&amp;quot;,[-128,-15],size=28,align=right,font=&amp;quot;andlso&amp;quot;)); &lt;br /&gt;
draw_text(&amp;quot;$uid&amp;quot;,[-120,-15],size=28,align=left,font=&amp;quot;andlso&amp;quot;, str_pad_length=4,str_pad_align=left,str_pad_value=&amp;quot;0&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[480,120],font=&amp;quot;andlso&amp;quot;,size=85,align=center,valign=bottom,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=481</id>
		<title>Badge Display Code Documentation</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=481"/>
		<updated>2022-01-12T20:43:20Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In order to generate badges the system uses a series of commands known as ''badgecode''. This ''badgecode'', badge drawing code is documented here.&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Basics ===&lt;br /&gt;
&lt;br /&gt;
Badgecode is highly order of operations based, it renders from top to bottom in order.&lt;br /&gt;
&lt;br /&gt;
Generally, when constructing a badge, place your images near the top, then start to render your text, otherwise your images may render on top of your text. However, this can be used to your advantage, you can use PNG's with partial transparency, to overlay color, images, or other features on top of system rendered objects - including other images. Badges can be built up of multiply layers of objects which can be programmatically switched in or out based on the attendees specific system held data.&lt;br /&gt;
&lt;br /&gt;
For example where you place invert_image(); will effect the way it works, you can make it only effect part of the badge, you can even use multiple invert_image();'s in series to invert part of the badge conditionally based on state (underage, UDF, product purchased, membership, what have you).&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Co-ordinate system. ===&lt;br /&gt;
&lt;br /&gt;
The system requires co-ordinates, and these co-ordinates can be passed in many ways, the most common way will be to pass the just numbers, and numbers will represent pixels in the image your attempting to draw. However, several other methods are possible, including percentages, inches, cm, mm, points, and pixels. In addition the numbers used can be negative which will make them count from the opposite direction.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
The system has many variables that you can pull from in order to put information on-to the badge. Nearly every variable for a person from the database is available in the draw code. The variables are named as &amp;lt;nowiki&amp;gt;&amp;lt;table name&amp;gt;_&amp;lt;field name&amp;gt;&amp;lt;/nowiki&amp;gt; so the fan_name field from the registrant table would be $registrant_fan_name, the current_membership_type from the events_attended table would be $events_attended_current_membership_type. Variables will sometimes need to be followed by a space. This is definatly true in all strings. To get something to read &amp;lt;nowiki&amp;gt;&amp;lt;reg_num&amp;gt;-&amp;lt;uid&amp;gt;&amp;lt;/nowiki&amp;gt; you will need to write your string as &amp;quot;$events_attended_reg_num -$uid&amp;quot; or &amp;quot;$events_attended_reg_num\-$uid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There are some special variables which are populated, here is a list of some of the unique variable names.&lt;br /&gt;
&lt;br /&gt;
==== Event Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Event Variables&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $event_id || Event Short Name E.G. RF0&lt;br /&gt;
|-&lt;br /&gt;
| $events_event_title || Event Title defined on the Edit Event screen.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_name || The membership group.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_long_name || The membership name as is intended to be printed on the badge.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Registrant Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Registrant Variables&lt;br /&gt;
|-&lt;br /&gt;
| $uid || Registrant UID&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_first_created || Creation date of the person.&lt;br /&gt;
|-&lt;br /&gt;
| $events_attended_reg_num || Registration Sequence Number&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_common_name || Uses the $registrant_fan_name value if the value is not empty, and uses the $registrant_rl_first and $registrant_rl_last otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_fan_name || Registrant Fan/Badge Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_rl_first || Registrant First Name&lt;br /&gt;
|- &lt;br /&gt;
| $registrant_rl_last || Registrant Last Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_birthday || The person's birthday.&lt;br /&gt;
|-&lt;br /&gt;
| $underage || true if the person is under the specified of_age. A good example of the use of this could be &amp;lt;nowiki&amp;gt;if($underage|invert_image()|do_nothing());&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Special Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Special Variables&lt;br /&gt;
|-&lt;br /&gt;
! Special Variable !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $staff || if $event_membership_types_name contains the word 'staff' this will equal true, this is not case sensitive. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== UDF Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ User Defined Fields - User defined fields can be applied on the badges. Use the following variables.&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_title || Will display the title of the user defined field. (If the customer has it applied to them)  Ex: $UDF_12_title.&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_value || Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
==== Drawing Functions ====&lt;br /&gt;
All draw functions end in a ;&lt;br /&gt;
===== Geometry Functions =====&lt;br /&gt;
* '''draw_line([ulx,uly],[llx,lly])''' - Draws a line from [x.y] to [x,y]&lt;br /&gt;
* '''draw_box([ulx,uly],[llx,lly],Optional Arguments here)''' - Will draw a box with the top corner being at the first pair, and the lower right being at the second pair. This function always starts drawing from the top or the left.&lt;br /&gt;
** filled=yes - Will Fill the box with black (or the color specified in color)&lt;br /&gt;
** color=r:g:b - Will set the draw color for this function to the specified rgb value.&lt;br /&gt;
&lt;br /&gt;
===== Image Functions =====&lt;br /&gt;
* '''draw_image(&amp;quot;filename&amp;quot;,[p1x,p1y],[p2x,p2y])''' - Draw the specified image with the top left of the image at point 1, and the lower right of the image at point 2. If IMAGE_UID### is specified instead of a filename the image will be pulled from the badge_images table and used instead.  There is no space between IMAGE_UID and the Number of the badge_image.&lt;br /&gt;
* '''flood_fill(r,g,b)''' - will perform a flood fill on the image at 2,2&lt;br /&gt;
*'''invert_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
*'''grayscale_image();''' - this function will invert the colors or intensity of all functions which appear after this function.&lt;br /&gt;
* '''tint_image(r,g,b,''a'') - will colorize the entire image based on the RGB values specified. By default if you do not pass an alpha value in badgecode, one is inserted (0) by the parse_color function, this is fully opaque, you can adjust the intensity of the tinting effect by adjusting the transparency level. This is somewhat non-intuitive to use. Valid Alpha ranges are between 0 and 127, Valid Color Ranges are between 0 and 255.&lt;br /&gt;
* '''image_contrast(0);''' - Adjust image contrast - note, negative numbers are more contrast, positive numbers are less.&lt;br /&gt;
* '''image_brightness();''' -  Adjust image brightness - Valid range  is -255 to 255, 255 is most brightness, -255 is least.&lt;br /&gt;
* '''emboss_image();''' - Adds an Artistic Embossed Look to an image.&lt;br /&gt;
&lt;br /&gt;
===== Layout Assistance Function =====&lt;br /&gt;
* '''draw_measure([x,y],Optional Arguments Here)''' - Will draw a measurement line for you to help figure out co-ordinates of your drawing.&lt;br /&gt;
** ticks=&amp;lt;integer&amp;gt; - Defaults to 100 (Draw a large tick every &amp;lt;integer&amp;gt; pixels, and a small tick every &amp;lt;integer/2&amp;gt; pixels)&lt;br /&gt;
** type=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Vertical&lt;br /&gt;
&lt;br /&gt;
===== Text and Barcode Functions =====&lt;br /&gt;
* '''draw_text(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws text at the x,y co-ordinates, with the following optional arguments which can be passed in any order and must be seperated by a comma.&lt;br /&gt;
** font=&amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; is the name of a font file in the shared_php folder, case-sensitive, do not add the .ttf extension.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;aign&amp;gt; is the alignment you want, left, right or center&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;vertalign=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;align&amp;gt; is top, middle or bottom.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;size=&amp;lt;size&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;size&amp;gt; is the size of the text you want&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;angle=&amp;lt;angle&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;angle&amp;gt; is the angle of the text&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;border=&amp;lt;true|false|numeric&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if there will be a border on the text If border is a numeric value the value will dictate the thickness of the border.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;inverted=&amp;lt;true|false&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if the text will be inverted.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;maxwidth=&amp;lt;width&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the maximum width this text can take, if long names appear they will be automatically reduced in font in order for them to maintain a size no greater than the maximum width.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** color=r:g:b - If this value is present then the rgb value of the color will be used for the font. Otherwise, black will be used. &amp;lt;nowiki&amp;gt;(Or white if invert is present This setting overrides Invert)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''draw_barcode(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws a barcode at the x,y co-ordinates with the following optional arguments which can be passed in any order and must be seperated by a comma,&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;format=&amp;lt;code128|code39|codebar&amp;gt; - Defaults to code39&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;left|center|right&amp;gt; - Defaults to Left&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;orientation=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Horizontal&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;height=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Integer value determines the height of the barcode, width is always determined by the string, no scaling option is available.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;width=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Strech or squash the barcode to this width (Does not maintain aspect ratio, use with height)&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt;, - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;color=&amp;lt;r:g:b&amp;gt;&amp;lt;/nowiki&amp;gt; - Set the draw color.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous Functions ====&lt;br /&gt;
* '''label_convert''' - This is a special function to improve the quality of thermal prints when used with the cups print method, it gives a rough approximation of the work the legacy EPL print method does when doing its image conversion. However, as its direct CUPS, there is a performance improvement.&lt;br /&gt;
* '''// comment''' - Using // will add comments to your draw code that won't render.&lt;br /&gt;
&lt;br /&gt;
==== Logic Functions ====&lt;br /&gt;
*''' if(&amp;quot;value&amp;quot;|true-action|false-action);''' - For example if($underage | draw_text(&amp;quot;Underage&amp;quot;, [82.5%,80%]) | do_nothing());&lt;br /&gt;
*''' strcmp(&amp;quot;somthing&amp;quot;=&amp;quot;somthingelse&amp;quot;|true-action|false-action);''' - this function.&lt;br /&gt;
*''' do_nothing();''' - this function is valuable for the IF statements.&lt;br /&gt;
&lt;br /&gt;
===== Special Logic Functions =====&lt;br /&gt;
*''' ifmembershipgroup(&amp;quot;value&amp;quot;|true-action|false-action);''' - This tools is a IF stament that will allow you to draw things depending on whether or not a person has a specific membership group.&lt;br /&gt;
** Example ifmembershipgroup(&amp;quot;patron&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
*''' ifproductpurchased(&amp;quot;upc&amp;quot;|true-action|false-action);''' - This tool is a IF statement that will allow you to draw things depending on whether or not a person has a specific product purchased (paid, not just in cart), and not refunded.&lt;br /&gt;
** Example:ifproductpurchased(&amp;quot;1000180&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
&lt;br /&gt;
===Badgecode Examples===&lt;br /&gt;
&lt;br /&gt;
==== CR80 Horizontal Example ====&lt;br /&gt;
&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:CR80 Horizontal FNO.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Minor Ada Dealer.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Media Ada Dealer.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for StratosFur 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
//badge image commented out, comment out the invert_image line when restoring - will show a black background for testing without image.&lt;br /&gt;
//draw_image(&amp;quot;IMAGE_UID1&amp;quot;, [1,1], [100%,100%]);&lt;br /&gt;
invert_image();&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Event and Membership &lt;br /&gt;
draw_text(&amp;quot;$events_event_title  - $uid&amp;quot;,[95.5%,600],size=30,align=right,color=255:255:255,font=&amp;quot;gayatri&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// draw minor warning - Draws in Red - overlaps with Media Flag, cannot be a media minor.&lt;br /&gt;
if($underage |  draw_text(&amp;quot;Minor&amp;quot;,[95.5%,25.5%],size=150,align=right,color=255:0:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
// Max Width must change for Membership type because of size of minor warning.&lt;br /&gt;
&lt;br /&gt;
if($underage|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=450,font=&amp;quot;gayatri&amp;quot;)|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=1000,font=&amp;quot;gayatri&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//Show marker for ADA - Yellow&lt;br /&gt;
if ($UDF_6_value | draw_text(&amp;quot;ADA&amp;quot;,[95.5%,39.5%],size=60,align=right,color=240:240:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Media - Green - Cannot be Media/Minor, they occupy the same space&lt;br /&gt;
if ($UDF_7_value | draw_text(&amp;quot;Media&amp;quot;,[95.5%,25.5%],size=150,align=right,color=0:255:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Dealers - Draws in Magenta.&lt;br /&gt;
if ($UDF_8_value |draw_text(&amp;quot;Dealers&amp;quot;,[95.5%,50.5%],size=60,align=right,color=255:0:255,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,530],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=1000,color=255:255:255);&lt;br /&gt;
 &lt;br /&gt;
// Next lets draw the furry name under the main name &lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,600],,font=&amp;quot;gayatri&amp;quot;,size=50,align=left,maxwidth=540,color=255:255:255); &lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=600,color=255:255:255;&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
// Next lets draw the real name&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,530],font=&amp;quot;andlso&amp;quot;,size=85,align=left,maxwidth=550,color=255:255:255,font=&amp;quot;gayatri&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=50,align=left,valign=bottom,maxwidth=600,color=255:255:255);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;br /&gt;
&lt;br /&gt;
==== CR80 Vertical Example ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Zebra 4x1 Example ====&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:Zebra 4x1 FNO.jpg|thumb]]&lt;br /&gt;
[[File:Zebra 4x1 FNO Minor.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for TTFC 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
// Lets draw the EVENT ID&lt;br /&gt;
if($underage | draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],inverted=true,size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;) |draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// If underage, draw &amp;quot;UNDER AGE&amp;quot;, else draw optional value (nominally species)&lt;br /&gt;
if($underage | draw_text(&amp;quot;UNDER AGE&amp;quot;, [150,-15],inverted=true,font=&amp;quot;andlso&amp;quot;,size=40,align=left) | draw_text(&amp;quot;$UDF_1_value&amp;quot;,[190,-9],size=28,font=&amp;quot;andlso&amp;quot;,maxwidth=320));&lt;br /&gt;
&lt;br /&gt;
// Draw membership type and UID&lt;br /&gt;
draw_text(&amp;quot;$event_membership_types_long_name&amp;quot;,[-128,-15],size=28,align=right,font=&amp;quot;andlso&amp;quot;)); &lt;br /&gt;
draw_text(&amp;quot;$uid&amp;quot;,[-120,-15],size=28,align=left,font=&amp;quot;andlso&amp;quot;, str_pad_length=4,str_pad_align=left,str_pad_value=&amp;quot;0&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[480,120],font=&amp;quot;andlso&amp;quot;,size=85,align=center,valign=bottom,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=480</id>
		<title>Badge Display Code Documentation</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Badge_Display_Code_Documentation&amp;diff=480"/>
		<updated>2022-01-12T20:28:48Z</updated>

		<summary type="html">&lt;p&gt;Aloha: /* Miscellaneous Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In order to generate badges the system uses a series of commands known as ''badgecode''. This ''badgecode'', badge drawing code is documented here.&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Basics ===&lt;br /&gt;
&lt;br /&gt;
Badgecode is highly order of operations based, it renders from top to bottom in order.&lt;br /&gt;
&lt;br /&gt;
Generally, when constructing a badge, place your images near the top, then start to render your text, otherwise your images may render on top of your text. However, this can be used to your advantage, you can use PNG's with partial transparency, to overlay color, images, or other features on top of system rendered objects - including other images. Badges can be built up of multiply layers of objects which can be programmatically switched in or out based on the attendees specific system held data.&lt;br /&gt;
&lt;br /&gt;
For example where you place invert_image(); will effect the way it works, you can make it only effect part of the badge, you can even use multiple invert_image();'s in series to invert part of the badge conditionally based on state (underage, UDF, product purchased, membership, what have you).&lt;br /&gt;
&lt;br /&gt;
=== Badgecode Co-ordinate system. ===&lt;br /&gt;
&lt;br /&gt;
The system requires co-ordinates, and these co-ordinates can be passed in many ways, the most common way will be to pass the just numbers, and numbers will represent pixels in the image your attempting to draw. However, several other methods are possible, including percentages, inches, cm, mm, points, and pixels. In addition the numbers used can be negative which will make them count from the opposite direction.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
The system has many variables that you can pull from in order to put information on-to the badge. Nearly every variable for a person from the database is available in the draw code. The variables are named as &amp;lt;nowiki&amp;gt;&amp;lt;table name&amp;gt;_&amp;lt;field name&amp;gt;&amp;lt;/nowiki&amp;gt; so the fan_name field from the registrant table would be $registrant_fan_name, the current_membership_type from the events_attended table would be $events_attended_current_membership_type. Variables will sometimes need to be followed by a space. This is definatly true in all strings. To get something to read &amp;lt;nowiki&amp;gt;&amp;lt;reg_num&amp;gt;-&amp;lt;uid&amp;gt;&amp;lt;/nowiki&amp;gt; you will need to write your string as &amp;quot;$events_attended_reg_num -$uid&amp;quot; or &amp;quot;$events_attended_reg_num\-$uid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
There are some special variables which are populated, here is a list of some of the unique variable names.&lt;br /&gt;
&lt;br /&gt;
==== Event Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Event Variables&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $event_id || Event Short Name E.G. RF0&lt;br /&gt;
|-&lt;br /&gt;
| $events_event_title || Event Title defined on the Edit Event screen.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_name || The membership group.&lt;br /&gt;
|-&lt;br /&gt;
| $event_membership_types_long_name || The membership name as is intended to be printed on the badge.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Registrant Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Registrant Variables&lt;br /&gt;
|-&lt;br /&gt;
| $uid || Registrant UID&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_first_created || Creation date of the person.&lt;br /&gt;
|-&lt;br /&gt;
| $events_attended_reg_num || Registration Sequence Number&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_common_name || Uses the $registrant_fan_name value if the value is not empty, and uses the $registrant_rl_first and $registrant_rl_last otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_fan_name || Registrant Fan/Badge Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_rl_first || Registrant First Name&lt;br /&gt;
|- &lt;br /&gt;
| $registrant_rl_last || Registrant Last Name&lt;br /&gt;
|-&lt;br /&gt;
| $registrant_birthday || The person's birthday.&lt;br /&gt;
|-&lt;br /&gt;
| $underage || true if the person is under the specified of_age. A good example of the use of this could be &amp;lt;nowiki&amp;gt;if($underage|invert_image()|do_nothing());&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Special Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Special Variables&lt;br /&gt;
|-&lt;br /&gt;
! Special Variable !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $staff || if $event_membership_types_name contains the word 'staff' this will equal true, this is not case sensitive. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== UDF Variables ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ User Defined Fields - User defined fields can be applied on the badges. Use the following variables.&lt;br /&gt;
|-&lt;br /&gt;
! Variable!! Notes&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_title || Will display the title of the user defined field. (If the customer has it applied to them)  Ex: $UDF_12_title.&lt;br /&gt;
|-&lt;br /&gt;
| $UDF_&amp;lt;num&amp;gt;_value || Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
==== Drawing Functions ====&lt;br /&gt;
All draw functions end in a ;&lt;br /&gt;
===== Geometry Functions =====&lt;br /&gt;
* '''draw_line([ulx,uly],[llx,lly])''' - Draws a line from [x.y] to [x,y]&lt;br /&gt;
* '''draw_box([ulx,uly],[llx,lly],Optional Arguments here)''' - Will draw a box with the top corner being at the first pair, and the lower right being at the second pair. This function always starts drawing from the top or the left.&lt;br /&gt;
** filled=yes - Will Fill the box with black (or the color specified in color)&lt;br /&gt;
** color=r:g:b - Will set the draw color for this function to the specified rgb value.&lt;br /&gt;
&lt;br /&gt;
===== Image Functions =====&lt;br /&gt;
* '''draw_image(&amp;quot;filename&amp;quot;,[p1x,p1y],[p2x,p2y])''' - Draw the specified image with the top left of the image at point 1, and the lower right of the image at point 2. If IMAGE_UID### is specified instead of a filename the image will be pulled from the badge_images table and used instead.  There is no space between IMAGE_UID and the Number of the badge_image.&lt;br /&gt;
* '''flood_fill(r,g,b)''' - will perform a flood fill on the image at 2,2&lt;br /&gt;
&lt;br /&gt;
===== Layout Assistance Function =====&lt;br /&gt;
* '''draw_measure([x,y],Optional Arguments Here)''' - Will draw a measurement line for you to help figure out co-ordinates of your drawing.&lt;br /&gt;
** ticks=&amp;lt;integer&amp;gt; - Defaults to 100 (Draw a large tick every &amp;lt;integer&amp;gt; pixels, and a small tick every &amp;lt;integer/2&amp;gt; pixels)&lt;br /&gt;
** type=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Vertical&lt;br /&gt;
&lt;br /&gt;
===== Text and Barcode Functions =====&lt;br /&gt;
* '''draw_text(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws text at the x,y co-ordinates, with the following optional arguments which can be passed in any order and must be seperated by a comma.&lt;br /&gt;
** font=&amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;nowiki&amp;gt;&amp;lt;font&amp;gt;&amp;lt;/nowiki&amp;gt; is the name of a font file in the shared_php folder, case-sensitive, do not add the .ttf extension.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;aign&amp;gt; is the alignment you want, left, right or center&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;vertalign=&amp;lt;align&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;align&amp;gt; is top, middle or bottom.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;size=&amp;lt;size&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;size&amp;gt; is the size of the text you want&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;angle=&amp;lt;angle&amp;gt;&amp;lt;/nowiki&amp;gt; - Where &amp;lt;angle&amp;gt; is the angle of the text&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;border=&amp;lt;true|false|numeric&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if there will be a border on the text If border is a numeric value the value will dictate the thickness of the border.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;inverted=&amp;lt;true|false&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines if the text will be inverted.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;maxwidth=&amp;lt;width&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the maximum width this text can take, if long names appear they will be automatically reduced in font in order for them to maintain a size no greater than the maximum width.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** color=r:g:b - If this value is present then the rgb value of the color will be used for the font. Otherwise, black will be used. &amp;lt;nowiki&amp;gt;(Or white if invert is present This setting overrides Invert)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''draw_barcode(&amp;quot;string&amp;quot;,[x,y],Optional Arguments here)''' - Draws a barcode at the x,y co-ordinates with the following optional arguments which can be passed in any order and must be seperated by a comma,&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;format=&amp;lt;code128|code39|codebar&amp;gt; - Defaults to code39&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;align=&amp;lt;left|center|right&amp;gt; - Defaults to Left&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;orientation=&amp;lt;horizontal|vertical&amp;gt; - Defaults to Horizontal&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;height=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Integer value determines the height of the barcode, width is always determined by the string, no scaling option is available.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;width=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Strech or squash the barcode to this width (Does not maintain aspect ratio, use with height)&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_length=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt;, - If this value is numeric, the string length will be padded to this number of characters using 0 (default) or the string specified by str_pad_value and the alignment if specified in str_pad_align.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_value=&amp;lt;value&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines the value of the str_pad character if there is a need for one.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;str_pad_align=&amp;lt;left|center|right&amp;gt;&amp;lt;/nowiki&amp;gt; - Determines which side of the string will be padded.&lt;br /&gt;
** &amp;lt;nowiki&amp;gt;color=&amp;lt;r:g:b&amp;gt;&amp;lt;/nowiki&amp;gt; - Set the draw color.&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous Functions ====&lt;br /&gt;
* '''// comment''' - Using // will add comments to your draw code that won't render.&lt;br /&gt;
&lt;br /&gt;
==== Logic Functions ====&lt;br /&gt;
*''' if(&amp;quot;value&amp;quot;|true-action|false-action);''' - For example if($underage | draw_text(&amp;quot;Underage&amp;quot;, [82.5%,80%]) | do_nothing());&lt;br /&gt;
*''' strcmp(&amp;quot;somthing&amp;quot;=&amp;quot;somthingelse&amp;quot;|true-action|false-action);''' - this function.&lt;br /&gt;
*''' do_nothing();''' - this function is valuable for the IF statements.&lt;br /&gt;
&lt;br /&gt;
===== Special Logic Functions =====&lt;br /&gt;
*''' ifmembershipgroup(&amp;quot;value&amp;quot;|true-action|false-action);''' - This tools is a IF stament that will allow you to draw things depending on whether or not a person has a specific membership group.&lt;br /&gt;
** Example ifmembershipgroup(&amp;quot;patron&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
*''' ifproductpurchased(&amp;quot;upc&amp;quot;|true-action|false-action);''' - This tool is a IF statement that will allow you to draw things depending on whether or not a person has a specific product purchased (paid, not just in cart), and not refunded.&lt;br /&gt;
** Example:ifproductpurchased(&amp;quot;1000180&amp;quot;|draw_box([50,50],[100,100],color=0:0:255,filled=yes)|draw_box([50,50],[100,100],color=255:00:00,filled=yes));&lt;br /&gt;
&lt;br /&gt;
===Badgecode Examples===&lt;br /&gt;
&lt;br /&gt;
==== CR80 Horizontal Example ====&lt;br /&gt;
&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:CR80 Horizontal FNO.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Minor Ada Dealer.png|thumb]]&lt;br /&gt;
[[File:CR80 Horizontal FNO Media Ada Dealer.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for StratosFur 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
//badge image commented out, comment out the invert_image line when restoring - will show a black background for testing without image.&lt;br /&gt;
//draw_image(&amp;quot;IMAGE_UID1&amp;quot;, [1,1], [100%,100%]);&lt;br /&gt;
invert_image();&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Event and Membership &lt;br /&gt;
draw_text(&amp;quot;$events_event_title  - $uid&amp;quot;,[95.5%,600],size=30,align=right,color=255:255:255,font=&amp;quot;gayatri&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// draw minor warning - Draws in Red - overlaps with Media Flag, cannot be a media minor.&lt;br /&gt;
if($underage |  draw_text(&amp;quot;Minor&amp;quot;,[95.5%,25.5%],size=150,align=right,color=255:0:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
// Max Width must change for Membership type because of size of minor warning.&lt;br /&gt;
&lt;br /&gt;
if($underage|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=450,font=&amp;quot;gayatri&amp;quot;)|draw_text(&amp;quot;$event_membership_types_name&amp;quot;,[50,15.5%],size=60,align=left,color=255:255:255,maxwidth=1000,font=&amp;quot;gayatri&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//Show marker for ADA - Yellow&lt;br /&gt;
if ($UDF_6_value | draw_text(&amp;quot;ADA&amp;quot;,[95.5%,39.5%],size=60,align=right,color=240:240:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Media - Green - Cannot be Media/Minor, they occupy the same space&lt;br /&gt;
if ($UDF_7_value | draw_text(&amp;quot;Media&amp;quot;,[95.5%,25.5%],size=150,align=right,color=0:255:0,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//Show marker Dealers - Draws in Magenta.&lt;br /&gt;
if ($UDF_8_value |draw_text(&amp;quot;Dealers&amp;quot;,[95.5%,50.5%],size=60,align=right,color=255:0:255,font=&amp;quot;gayatri&amp;quot;)|do_nothing());&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,530],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=1000,color=255:255:255);&lt;br /&gt;
 &lt;br /&gt;
// Next lets draw the furry name under the main name &lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,600],,font=&amp;quot;gayatri&amp;quot;,size=50,align=left,maxwidth=540,color=255:255:255); &lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=85,align=left,valign=bottom,maxwidth=600,color=255:255:255;&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
// Next lets draw the real name&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[50,530],font=&amp;quot;andlso&amp;quot;,size=85,align=left,maxwidth=550,color=255:255:255,font=&amp;quot;gayatri&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
// Lets draw the Fan name.&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[50,600],font=&amp;quot;gayatri&amp;quot;,size=50,align=left,valign=bottom,maxwidth=600,color=255:255:255);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;br /&gt;
&lt;br /&gt;
==== CR80 Vertical Example ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Zebra 4x1 Example ====&lt;br /&gt;
===== Rendered Badges =====&lt;br /&gt;
[[File:Zebra 4x1 FNO.jpg|thumb]]&lt;br /&gt;
[[File:Zebra 4x1 FNO Minor.jpg|thumb]]&lt;br /&gt;
&lt;br /&gt;
===== Badgecode =====&lt;br /&gt;
&lt;br /&gt;
//Developed for TTFC 2021&lt;br /&gt;
&lt;br /&gt;
//Begin Common Code Section&lt;br /&gt;
&lt;br /&gt;
// Lets draw the EVENT ID&lt;br /&gt;
if($underage | draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],inverted=true,size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;) |draw_text(&amp;quot;$events_event_id&amp;quot;,[10,92.5%],size=40,align=left,border=5,font=&amp;quot;blackadd&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// If underage, draw &amp;quot;UNDER AGE&amp;quot;, else draw optional value (nominally species)&lt;br /&gt;
if($underage | draw_text(&amp;quot;UNDER AGE&amp;quot;, [150,-15],inverted=true,font=&amp;quot;andlso&amp;quot;,size=40,align=left) | draw_text(&amp;quot;$UDF_1_value&amp;quot;,[190,-9],size=28,font=&amp;quot;andlso&amp;quot;,maxwidth=320));&lt;br /&gt;
&lt;br /&gt;
// Draw membership type and UID&lt;br /&gt;
draw_text(&amp;quot;$event_membership_types_long_name&amp;quot;,[-128,-15],size=28,align=right,font=&amp;quot;andlso&amp;quot;)); &lt;br /&gt;
draw_text(&amp;quot;$uid&amp;quot;,[-120,-15],size=28,align=left,font=&amp;quot;andlso&amp;quot;, str_pad_length=4,str_pad_align=left,str_pad_value=&amp;quot;0&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
//End Common Code&lt;br /&gt;
&lt;br /&gt;
//Begin FNOT&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOT&lt;br /&gt;
&lt;br /&gt;
//Begin FNO&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name&amp;quot;,[480,120],font=&amp;quot;andlso&amp;quot;,size=85,align=center,valign=bottom,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//END FNO&lt;br /&gt;
&lt;br /&gt;
//Begin FNOB&lt;br /&gt;
&lt;br /&gt;
draw_text(&amp;quot;$registrant_rl_first  $registrant_rl_last &amp;quot;,[480,36],font=&amp;quot;andlso&amp;quot;,size=72,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
draw_text(&amp;quot;$registrant_fan_name &amp;quot;, [480,120],font=&amp;quot;andlso&amp;quot;,size=42,align=center,valign=middle,maxwidth=500);&lt;br /&gt;
&lt;br /&gt;
//End FNOB&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_badgecode2&amp;diff=469</id>
		<title>Proposed badgecode2</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_badgecode2&amp;diff=469"/>
		<updated>2021-07-27T04:25:26Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== badgecode2 ==&lt;br /&gt;
&lt;br /&gt;
=== General Design Philosphy ===&lt;br /&gt;
&lt;br /&gt;
badgecode2 should overcome the limitations with the existing design, allowing us to match combinations of charcteristics to swap out drawing commands.&lt;br /&gt;
&lt;br /&gt;
badgecode2 should rely on sysvars over special logic functions to match things in the system, using an extensive system of flags and strings to create badges.&lt;br /&gt;
&lt;br /&gt;
badgecode2 should reduce the number of potential ways to address the image space, currently we support.. percentages, inches, cm, mm, points, and pixels - it is suggested that this be reduced to percentages and pixels for images, and pixels and points for fonts, with the default mode for fonts being assumed to be in points.&lt;br /&gt;
&lt;br /&gt;
badgecode2 when possible should match the syntax and function names of badgecode, alternatively the following system is proposed.&lt;br /&gt;
&lt;br /&gt;
==== Complex calls: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
generally x and y should be replaced with top= and left= a second x and y string would be replaced with bottom= and right=&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;function_name(top=1,left=1, optional arguments)&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A function like draw_box and draw_line would also have bottom= and right= as required args, draw_image optionally would use this as well.&lt;br /&gt;
&lt;br /&gt;
=== Simple Calls: ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;function_name(value,value,value,value)&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
This is used for simple functions that only need to take color values (or other number values) and apply to the whole image.&lt;br /&gt;
&lt;br /&gt;
=== Language Features ===&lt;br /&gt;
&lt;br /&gt;
* Logic Features&lt;br /&gt;
* full if/elseif/else support&lt;br /&gt;
* Switch support&lt;br /&gt;
* Comparison and/or Logical Operators (likely just one of these is enough)&lt;br /&gt;
&lt;br /&gt;
=== Convivence Features ===&lt;br /&gt;
* Local Variables - useful when bringing templated badge into a system. All UDF's can be patched to a named variable in the badgecode.&lt;br /&gt;
&lt;br /&gt;
=== Wishlist Advanced Features ===&lt;br /&gt;
* php-gd passthru - a special function call to allow us to call any function within php-gd.&lt;br /&gt;
&lt;br /&gt;
=== Drawing, Text and Image Options ===&lt;br /&gt;
* Everything that badgecode currently supports.&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_badgecode2&amp;diff=468</id>
		<title>Proposed badgecode2</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_badgecode2&amp;diff=468"/>
		<updated>2021-07-27T04:24:44Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== badgecode2 ==&lt;br /&gt;
&lt;br /&gt;
=== General Design Philosphy ===&lt;br /&gt;
&lt;br /&gt;
badgecode2 should overcome the limitations with the existing design, allowing us to match combinations of charcteristics to swap out drawing commands.&lt;br /&gt;
&lt;br /&gt;
badgecode2 should rely on sysvars over special logic functions to match things in the system, using an extensive system of flags and strings to create badges.&lt;br /&gt;
&lt;br /&gt;
badgecode2 should reduce the number of potential ways to address the image space, currently we support.. percentages, inches, cm, mm, points, and pixels - it is suggested that this be reduced to percentages and pixels for images, and pixels and points for fonts, with the default mode for fonts being assumed to be in points.&lt;br /&gt;
&lt;br /&gt;
badgecode2 when possible should match the syntax and function names of badgecode, alternatively the following system is proposed.&lt;br /&gt;
&lt;br /&gt;
==== Complex calls: ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
generally x and y should be replaced with top= and left= a second x and y string would be replaced with bottom= and right=&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;function_name(top=1,left=1, optional arguments)&amp;lt;/nowiki&amp;gt; (a function like draw_box and draw_line would also have bottom= and right= as required args, draw_image optionally would use this as well)&lt;br /&gt;
&lt;br /&gt;
=== Simple Calls: ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;function_name(value,value,value,value)&amp;lt;/nowiki&amp;gt; (this is used for simple functions that only need to take color values (or other number values) and apply to the whole image.&lt;br /&gt;
&lt;br /&gt;
=== Language Features ===&lt;br /&gt;
&lt;br /&gt;
* Logic Features&lt;br /&gt;
* full if/elseif/else support&lt;br /&gt;
* Switch support&lt;br /&gt;
* Comparison and/or Logical Operators (likely just one of these is enough)&lt;br /&gt;
&lt;br /&gt;
=== Convivence Features ===&lt;br /&gt;
* Local Variables - useful when bringing templated badge into a system. All UDF's can be patched to a named variable in the badgecode.&lt;br /&gt;
&lt;br /&gt;
=== Wishlist Advanced Features ===&lt;br /&gt;
* php-gd passthru - a special function call to allow us to call any function within php-gd.&lt;br /&gt;
&lt;br /&gt;
=== Drawing, Text and Image Options ===&lt;br /&gt;
* Everything that badgecode currently supports.&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_badgecode2&amp;diff=467</id>
		<title>Proposed badgecode2</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_badgecode2&amp;diff=467"/>
		<updated>2021-07-27T04:23:02Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== badgecode2 ==&lt;br /&gt;
&lt;br /&gt;
=== General Design Philosphy ===&lt;br /&gt;
&lt;br /&gt;
badgecode2 should overcome the limitations with the existing design, allowing us to match combinations of charcteristics to swap out drawing commands.&lt;br /&gt;
&lt;br /&gt;
badgecode2 should rely on sysvars over special logic functions to match things in the system, using an extensive system of flags and strings to create badges.&lt;br /&gt;
&lt;br /&gt;
badgecode2 should reduce the number of potential ways to address the image space, currently we support.. percentages, inches, cm, mm, points, and pixels - it is suggested that this be reduced to percentages and pixels for images, and pixels and points for fonts, with the default mode for fonts being assumed to be in points.&lt;br /&gt;
&lt;br /&gt;
badgecode2 when possible should match the syntax and function names of badgecode, alternatively the following system is proposed.&lt;br /&gt;
&lt;br /&gt;
for complex calls:&lt;br /&gt;
&lt;br /&gt;
generally x and y should be replaced with top= and left= a second x and y string would be replaced with bottom= and right=&lt;br /&gt;
&lt;br /&gt;
function_name(top=1,left=1, optional arguments) (a function like draw_box and draw_line would also have bottom= and right= as required args, draw_image optionally would use this as well)&lt;br /&gt;
&lt;br /&gt;
function name (value,value,value,value) (this is used for simple functions that only need to take color values (or other number values) and apply to the whole image.&lt;br /&gt;
&lt;br /&gt;
=== Language Features ===&lt;br /&gt;
&lt;br /&gt;
* Logic Features&lt;br /&gt;
* full if/elseif/else support&lt;br /&gt;
* Switch support&lt;br /&gt;
* Comparison and/or Logical Operators (likely just one of these is enough)&lt;br /&gt;
&lt;br /&gt;
=== Convivence Features ===&lt;br /&gt;
* Local Variables - useful when bringing templated badge into a system. All UDF's can be patched to a named variable in the badgecode.&lt;br /&gt;
&lt;br /&gt;
=== Wishlist Advanced Features ===&lt;br /&gt;
* php-gd passthru - a special function call to allow us to call any function within php-gd.&lt;br /&gt;
&lt;br /&gt;
=== Drawing, Text and Image Options ===&lt;br /&gt;
* Everything that badgecode currently supports.&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_badgecode2&amp;diff=466</id>
		<title>Proposed badgecode2</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_badgecode2&amp;diff=466"/>
		<updated>2021-07-27T04:14:43Z</updated>

		<summary type="html">&lt;p&gt;Aloha: Created page with &amp;quot;badgecode2  General Design Philosphy  badgecode2 should overcome the limitations with the existing design, allowing us to match combinations of charcteristics to swap out draw...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;badgecode2&lt;br /&gt;
&lt;br /&gt;
General Design Philosphy&lt;br /&gt;
&lt;br /&gt;
badgecode2 should overcome the limitations with the existing design, allowing us to match combinations of charcteristics to swap out drawing commands.&lt;br /&gt;
&lt;br /&gt;
badgecode2 should rely on sysvars over special logic functions to match things in the system, using an extensive system of flags and strings to create badges.&lt;br /&gt;
&lt;br /&gt;
badgecode2 should reduce the number of potential ways to address the image space, currently we support.. percentages, inches, cm, mm, points, and pixels - it is suggested that this be reduced to percentages and pixels for images, and pixels and points for fonts, with the default mode for fonts being assumed to be in points.&lt;br /&gt;
&lt;br /&gt;
badgecode2 when possible should match the syntax and function names of badgecode, alternatively the following system is proposed.&lt;br /&gt;
&lt;br /&gt;
for complex calls:&lt;br /&gt;
&lt;br /&gt;
generally x and y should be replaced with top= and left= a second x and y string would be replaced with bottom= and right=&lt;br /&gt;
&lt;br /&gt;
function_name(top=1,left=1, optional arguments) (a function like draw_box and draw_line would also have bottom= and right= as required args, draw_image optionally would use this as well)&lt;br /&gt;
&lt;br /&gt;
function name (value,value,value,value) (this is used for simple functions that only need to take color values and apply to the whole image.&lt;br /&gt;
&lt;br /&gt;
Language Features&lt;br /&gt;
&lt;br /&gt;
Logic Features&lt;br /&gt;
full if/elseif/else support&lt;br /&gt;
Switch support&lt;br /&gt;
Comparison and/or Logical Operators (likely just one of these is enough)&lt;br /&gt;
&lt;br /&gt;
Convience Features&lt;br /&gt;
Local Variables - useful when bringing templated badge into a system. All UDF's can be patched to a named variable in the badgecode.&lt;br /&gt;
&lt;br /&gt;
Wishlist Advaned Features&lt;br /&gt;
php-gd passthru - a special function call to allow us to call any function within php-gd.&lt;br /&gt;
&lt;br /&gt;
Drawing, Text and Image Options&lt;br /&gt;
Everything that badgecode currently supports.&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Universal_Substitution_System&amp;diff=465</id>
		<title>Universal Substitution System</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Universal_Substitution_System&amp;diff=465"/>
		<updated>2021-07-22T03:45:54Z</updated>

		<summary type="html">&lt;p&gt;Aloha: Aloha moved page Universal Substitution System to Proposed Universal Substitution System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Proposed Universal Substitution System]]&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=464</id>
		<title>Proposed Universal Substitution System</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=464"/>
		<updated>2021-07-22T03:45:54Z</updated>

		<summary type="html">&lt;p&gt;Aloha: Aloha moved page Universal Substitution System to Proposed Universal Substitution System&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== General Idea ===&lt;br /&gt;
CM has a bunch of variable lookup systems, it would be helpful to combine these into one system.&lt;br /&gt;
&lt;br /&gt;
This article is still a stub.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ registrant&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| uid||outputs the registrant uid.||Tag Replacements||reg_uid||$uid|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_first||outputs registrant first name.   ||Tag Replacements||reg_rl_first||$registrant_rl_first|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_last||outputs registrant last name.  ||Tag Replacements||reg_rl_last||$registrant_rl_last|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_name||outputs registrant &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.  ||Tag Replacements||reg_full_name||||&lt;br /&gt;
|-&lt;br /&gt;
| common_name||outputs registrant badge name if not empty - otherwise thier  &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.   ||Tag Replacements||reg_badge_name||$registrant_fan_name|||&lt;br /&gt;
|-&lt;br /&gt;
| badge_name||outputs registrant badge name.  ||Tag Replacements||reg_birthday||$registrant_birthday|||&lt;br /&gt;
|-&lt;br /&gt;
| birthday||outputs registrant birthdate.  ||Tag Replacements||reg_first_created||||&lt;br /&gt;
|-&lt;br /&gt;
| first_created||outputs registrant account creation date from database.  ||Tag Replacements||reg_common_name||$registrant_common_name|||&lt;br /&gt;
|-&lt;br /&gt;
| address_ship_to_name||outputs registrant ship to name.   ||Tag Replacements||reg_address_ship_to_name||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_1||outputs registrant address line 1.  ||Tag Replacements||reg_address_line_1||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_2||outputs registrant address line 2.  ||Tag Replacements||reg_address_line_2||||&lt;br /&gt;
|-&lt;br /&gt;
| address_city||outputs registrant address city.  ||Tag Replacements||reg_address_city||||&lt;br /&gt;
|-&lt;br /&gt;
| address_state||outputs registrant address state. ||Tag Replacements||reg_address_state||||&lt;br /&gt;
|-&lt;br /&gt;
| address_country||outputs registrant address country.   ||Tag Replacements||reg_address_country||||&lt;br /&gt;
|-&lt;br /&gt;
| address_postcode||outputs registrant address zip/postcode.   ||Tag Replacements||reg_address_zip||||&lt;br /&gt;
|-&lt;br /&gt;
| address_full||outputs registrant address with all fields combined.   ||Tag Replacements||reg_address_full||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_type||outputs registrant phone type.  ||Tag Replacements||reg_phone_type||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_number||outputs registrant phone number.  ||Tag Replacements||reg_phone_number||||&lt;br /&gt;
|-&lt;br /&gt;
| email||outputs registrant email.  ||Tag Replacements||reg_email||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_created||outputs date payment hold was created for current registrant and event.  ||Tag Replacements||reg_payment_hold_created||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry||outputs date payment hold will expire for current registrant and event. ex: 2020-01-22 18:30:15   ||Tag Replacements||reg_payment_hold_expiry||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_extendable_to||outputs latest date payment hold can be extended up to for current registrant and event.  ||Tag Replacements||reg_payment_hold_extendable_to||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_payment_type||outputs most recent payment type selected for current registrant and event  ||Tag Replacements||reg_payment_hold_payment_type||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry_long||outputs long date payment hold will expire for current registrant and event. ex: Wednesday, January 22, 2020, @ 6:30 PM ||Tag Replacements||reg_payment_hold_expiry_long||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_marked_deceased||Returns True if the user is marked deceased||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_ConsoleUser||Returns True if the user has an active console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| consoleUserExpiryDate||Displays expiration date for console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| CompMoneyRemaining||Displays the remaining comp money||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ events&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| event_id||outputs the Event Id. Example: &amp;quot;DEMO_1&amp;quot;||Tag Replacements||event_id||$event_id||&lt;br /&gt;
|-&lt;br /&gt;
| event_title||outputs the Event Title. Example: &amp;quot;Demo Event&amp;quot;  ||Tag Replacements||event_title||$events_event_title||&lt;br /&gt;
|-&lt;br /&gt;
| event_start_date||outputs event start date from event settings.  ||Tag Replacements||event_start_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_end_date||outputs event end date from event settings.||Tag Replacements||event_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_age_of_maturity||outputs event age of maturity from event settings. ||Tag Replacements||event_age_of_maturity||||&lt;br /&gt;
|-&lt;br /&gt;
| event_pre_reg_end_date||outputs event pre-reg end date from event settings. ||Tag Replacements||event_pre_reg_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_1||outputs address line 1 from event settings.  ||Tag Replacements||event_address_1||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_2||outputs address line 2 from event settings. ||Tag Replacements||event_address_2||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_3||outputs address line 3 from event settings.  ||Tag Replacements||event_address_3||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_4||outputs address line 4 from event settings.||Tag Replacements||event_address_4||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_full||outputs event address with all fields combined.   ||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultFromEmail||outputs default from email address in event settings.  ||Tag Replacements||event_defaultFromEmail||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultReplyTo||outputs default reply to: in event settings.  ||Tag Replacements||event_defaultReplyTo||||&lt;br /&gt;
|-&lt;br /&gt;
| event_chequeToName||outputs cheque to name in event settings.  ||Tag Replacements||event_chequeToName||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ attendee&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_underage||true if below age of maturity set for event from birthdate and stored event age of maturity||badgecode||||$underage||&lt;br /&gt;
|-&lt;br /&gt;
| num||registration sequence number for that particular event||Tag Replacements||reg_reg_num||$events_attended_reg_num||&lt;br /&gt;
|-&lt;br /&gt;
| badge_display_code||outputs registrant badge layout code. Example: FNOT||Tag Replacements||reg_badge_display_code||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_name||outputs membership name. (setting: Group Name)||Tag Replacements||reg_membership_name||$event_membership_types_name||&lt;br /&gt;
|-&lt;br /&gt;
| membership_long_name||outputs membership long name. (setting: Membership Type as printed on badge)  ||Tag Replacements||reg_membership_long_name||$event_membership_types_long_name||&lt;br /&gt;
|-&lt;br /&gt;
| membership_full_desc||outputs membership description. (setting: Sales pitch description:) ||Tag Replacements||reg_membership_full_desc||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_rules||outputs membership rules. (setting: Rules For this membership)  ||Tag Replacements||reg_membership_rules||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_type||outputs registrant membership code for current event. Example SPON_0||Tag Replacements||reg_membership_type||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_last_updated||outputs membership last modified date for current event.  ||Tag Replacements||reg_membership_last_updated||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_price||outputs membership price.  ||Tag Replacements||reg_membership_price||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_from||outputs membership available from date. ||Tag Replacements||reg_membership_avail_from||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_to||outputs membership available to date.   ||Tag Replacements||reg_membership_avail_to||||&lt;br /&gt;
|-&lt;br /&gt;
| staff||if attendee_membership_name contains the word 'staff' this will equal true, this is not case sensitive.||badgecode||||$staff||if retained, maybe this should also check membership_long_name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ panelist&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_has_confirmed_activity||useful for a true false for flagging panelist badges.||new||||||This is highly speculative, however I'm presuming this would work something like AS/DD in that the application would be tied to the UID of the person who applied, so we could pick it up that way, it could go into the attendee group&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_host||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_assistant||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_is_panelist||true if uid matches to either activity host or assistant - useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| activity_schedule||displays a formatted list of activities a panelist is assigned/confirmed to||new|||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ dealers&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_application_state||useful for doing a strcmp in badgecode to automatically tag dealers on approved dealers/artists.||new||||||for correctness I want to call this group artshow, but these function will only really be used by dealers den&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_confirmed||useful for a true false for flagging dealer badges.||new||||||these three are listed as options&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_assistant||useful for a true false for flagging dealer assistant badges.||new||||||these three are listed as options &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ udf&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_title||Will display the title of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_title.||Badgecode||||$udf_title||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_value||Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.||Badgecode||||$udf_value||&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;||Returns True is the UDF has been answered||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_type||returns the udf type||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_udf_response_list||Will display the UDF questions if relevent||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_purchased_&amp;lt;num&amp;gt;||returns true if the customer has purchased the product||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_incart_||returns true if the customer has the product in their cart||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_info||displays product description||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_price||displays product price||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_sold||displays how many have been sold||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_remaining||displays how many are remaining (cart+purchased-inventory)||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ system&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| cm_version||displays CM version string||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| db_version||displays db db version int||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| copyright||displays cm copyright statement||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_expiration||displays license expiration date||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_valid_events||displays list of valid events||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_dev_license||returns true if dev license||new||||||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=463</id>
		<title>Proposed Universal Substitution System</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=463"/>
		<updated>2021-07-22T03:42:04Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== General Idea ===&lt;br /&gt;
CM has a bunch of variable lookup systems, it would be helpful to combine these into one system.&lt;br /&gt;
&lt;br /&gt;
This article is still a stub.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ registrant&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| uid||outputs the registrant uid.||Tag Replacements||reg_uid||$uid|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_first||outputs registrant first name.   ||Tag Replacements||reg_rl_first||$registrant_rl_first|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_last||outputs registrant last name.  ||Tag Replacements||reg_rl_last||$registrant_rl_last|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_name||outputs registrant &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.  ||Tag Replacements||reg_full_name||||&lt;br /&gt;
|-&lt;br /&gt;
| common_name||outputs registrant badge name if not empty - otherwise thier  &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.   ||Tag Replacements||reg_badge_name||$registrant_fan_name|||&lt;br /&gt;
|-&lt;br /&gt;
| badge_name||outputs registrant badge name.  ||Tag Replacements||reg_birthday||$registrant_birthday|||&lt;br /&gt;
|-&lt;br /&gt;
| birthday||outputs registrant birthdate.  ||Tag Replacements||reg_first_created||||&lt;br /&gt;
|-&lt;br /&gt;
| first_created||outputs registrant account creation date from database.  ||Tag Replacements||reg_common_name||$registrant_common_name|||&lt;br /&gt;
|-&lt;br /&gt;
| address_ship_to_name||outputs registrant ship to name.   ||Tag Replacements||reg_address_ship_to_name||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_1||outputs registrant address line 1.  ||Tag Replacements||reg_address_line_1||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_2||outputs registrant address line 2.  ||Tag Replacements||reg_address_line_2||||&lt;br /&gt;
|-&lt;br /&gt;
| address_city||outputs registrant address city.  ||Tag Replacements||reg_address_city||||&lt;br /&gt;
|-&lt;br /&gt;
| address_state||outputs registrant address state. ||Tag Replacements||reg_address_state||||&lt;br /&gt;
|-&lt;br /&gt;
| address_country||outputs registrant address country.   ||Tag Replacements||reg_address_country||||&lt;br /&gt;
|-&lt;br /&gt;
| address_postcode||outputs registrant address zip/postcode.   ||Tag Replacements||reg_address_zip||||&lt;br /&gt;
|-&lt;br /&gt;
| address_full||outputs registrant address with all fields combined.   ||Tag Replacements||reg_address_full||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_type||outputs registrant phone type.  ||Tag Replacements||reg_phone_type||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_number||outputs registrant phone number.  ||Tag Replacements||reg_phone_number||||&lt;br /&gt;
|-&lt;br /&gt;
| email||outputs registrant email.  ||Tag Replacements||reg_email||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_created||outputs date payment hold was created for current registrant and event.  ||Tag Replacements||reg_payment_hold_created||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry||outputs date payment hold will expire for current registrant and event. ex: 2020-01-22 18:30:15   ||Tag Replacements||reg_payment_hold_expiry||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_extendable_to||outputs latest date payment hold can be extended up to for current registrant and event.  ||Tag Replacements||reg_payment_hold_extendable_to||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_payment_type||outputs most recent payment type selected for current registrant and event  ||Tag Replacements||reg_payment_hold_payment_type||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry_long||outputs long date payment hold will expire for current registrant and event. ex: Wednesday, January 22, 2020, @ 6:30 PM ||Tag Replacements||reg_payment_hold_expiry_long||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_marked_deceased||Returns True if the user is marked deceased||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_ConsoleUser||Returns True if the user has an active console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| consoleUserExpiryDate||Displays expiration date for console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| CompMoneyRemaining||Displays the remaining comp money||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ events&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| event_id||outputs the Event Id. Example: &amp;quot;DEMO_1&amp;quot;||Tag Replacements||event_id||$event_id||&lt;br /&gt;
|-&lt;br /&gt;
| event_title||outputs the Event Title. Example: &amp;quot;Demo Event&amp;quot;  ||Tag Replacements||event_title||$events_event_title||&lt;br /&gt;
|-&lt;br /&gt;
| event_start_date||outputs event start date from event settings.  ||Tag Replacements||event_start_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_end_date||outputs event end date from event settings.||Tag Replacements||event_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_age_of_maturity||outputs event age of maturity from event settings. ||Tag Replacements||event_age_of_maturity||||&lt;br /&gt;
|-&lt;br /&gt;
| event_pre_reg_end_date||outputs event pre-reg end date from event settings. ||Tag Replacements||event_pre_reg_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_1||outputs address line 1 from event settings.  ||Tag Replacements||event_address_1||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_2||outputs address line 2 from event settings. ||Tag Replacements||event_address_2||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_3||outputs address line 3 from event settings.  ||Tag Replacements||event_address_3||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_4||outputs address line 4 from event settings.||Tag Replacements||event_address_4||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_full||outputs event address with all fields combined.   ||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultFromEmail||outputs default from email address in event settings.  ||Tag Replacements||event_defaultFromEmail||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultReplyTo||outputs default reply to: in event settings.  ||Tag Replacements||event_defaultReplyTo||||&lt;br /&gt;
|-&lt;br /&gt;
| event_chequeToName||outputs cheque to name in event settings.  ||Tag Replacements||event_chequeToName||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ attendee&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_underage||true if below age of maturity set for event from birthdate and stored event age of maturity||badgecode||||$underage||&lt;br /&gt;
|-&lt;br /&gt;
| num||registration sequence number for that particular event||Tag Replacements||reg_reg_num||$events_attended_reg_num||&lt;br /&gt;
|-&lt;br /&gt;
| badge_display_code||outputs registrant badge layout code. Example: FNOT||Tag Replacements||reg_badge_display_code||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_name||outputs membership name. (setting: Group Name)||Tag Replacements||reg_membership_name||$event_membership_types_name||&lt;br /&gt;
|-&lt;br /&gt;
| membership_long_name||outputs membership long name. (setting: Membership Type as printed on badge)  ||Tag Replacements||reg_membership_long_name||$event_membership_types_long_name||&lt;br /&gt;
|-&lt;br /&gt;
| membership_full_desc||outputs membership description. (setting: Sales pitch description:) ||Tag Replacements||reg_membership_full_desc||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_rules||outputs membership rules. (setting: Rules For this membership)  ||Tag Replacements||reg_membership_rules||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_type||outputs registrant membership code for current event. Example SPON_0||Tag Replacements||reg_membership_type||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_last_updated||outputs membership last modified date for current event.  ||Tag Replacements||reg_membership_last_updated||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_price||outputs membership price.  ||Tag Replacements||reg_membership_price||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_from||outputs membership available from date. ||Tag Replacements||reg_membership_avail_from||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_to||outputs membership available to date.   ||Tag Replacements||reg_membership_avail_to||||&lt;br /&gt;
|-&lt;br /&gt;
| staff||if attendee_membership_name contains the word 'staff' this will equal true, this is not case sensitive.||badgecode||||$staff||if retained, maybe this should also check membership_long_name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ panelist&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_has_confirmed_activity||useful for a true false for flagging panelist badges.||new||||||This is highly speculative, however I'm presuming this would work something like AS/DD in that the application would be tied to the UID of the person who applied, so we could pick it up that way, it could go into the attendee group&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_host||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_assistant||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_is_panelist||true if uid matches to either activity host or assistant - useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| activity_schedule||displays a formatted list of activities a panelist is assigned/confirmed to||new|||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ dealers&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_application_state||useful for doing a strcmp in badgecode to automatically tag dealers on approved dealers/artists.||new||||||for correctness I want to call this group artshow, but these function will only really be used by dealers den&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_confirmed||useful for a true false for flagging dealer badges.||new||||||these three are listed as options&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_assistant||useful for a true false for flagging dealer assistant badges.||new||||||these three are listed as options &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ udf&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_title||Will display the title of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_title.||Badgecode||||$udf_title||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_value||Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.||Badgecode||||$udf_value||&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;||Returns True is the UDF has been answered||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_type||returns the udf type||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_udf_response_list||Will display the UDF questions if relevent||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_purchased_&amp;lt;num&amp;gt;||returns true if the customer has purchased the product||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_incart_||returns true if the customer has the product in their cart||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_info||displays product description||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_price||displays product price||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_sold||displays how many have been sold||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_remaining||displays how many are remaining (cart+purchased-inventory)||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ system&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| cm_version||displays CM version string||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| db_version||displays db db version int||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| copyright||displays cm copyright statement||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_expiration||displays license expiration date||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_valid_events||displays list of valid events||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_dev_license||returns true if dev license||new||||||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=462</id>
		<title>Proposed Universal Substitution System</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=462"/>
		<updated>2021-07-22T03:31:14Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ registrant&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| uid||outputs the registrant uid.||Tag Replacements||reg_uid||$uid|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_first||outputs registrant first name.   ||Tag Replacements||reg_rl_first||$registrant_rl_first|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_last||outputs registrant last name.  ||Tag Replacements||reg_rl_last||$registrant_rl_last|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_name||outputs registrant &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.  ||Tag Replacements||reg_full_name||||&lt;br /&gt;
|-&lt;br /&gt;
| common_name||outputs registrant badge name if not empty - otherwise thier  &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.   ||Tag Replacements||reg_badge_name||$registrant_fan_name|||&lt;br /&gt;
|-&lt;br /&gt;
| badge_name||outputs registrant badge name.  ||Tag Replacements||reg_birthday||$registrant_birthday|||&lt;br /&gt;
|-&lt;br /&gt;
| birthday||outputs registrant birthdate.  ||Tag Replacements||reg_first_created||||&lt;br /&gt;
|-&lt;br /&gt;
| first_created||outputs registrant account creation date from database.  ||Tag Replacements||reg_common_name||$registrant_common_name|||&lt;br /&gt;
|-&lt;br /&gt;
| address_ship_to_name||outputs registrant ship to name.   ||Tag Replacements||reg_address_ship_to_name||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_1||outputs registrant address line 1.  ||Tag Replacements||reg_address_line_1||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_2||outputs registrant address line 2.  ||Tag Replacements||reg_address_line_2||||&lt;br /&gt;
|-&lt;br /&gt;
| address_city||outputs registrant address city.  ||Tag Replacements||reg_address_city||||&lt;br /&gt;
|-&lt;br /&gt;
| address_state||outputs registrant address state. ||Tag Replacements||reg_address_state||||&lt;br /&gt;
|-&lt;br /&gt;
| address_country||outputs registrant address country.   ||Tag Replacements||reg_address_country||||&lt;br /&gt;
|-&lt;br /&gt;
| address_zip||outputs registrant address zip.   ||Tag Replacements||reg_address_zip||||&lt;br /&gt;
|-&lt;br /&gt;
| address_full||outputs registrant address with all fields combined.   ||Tag Replacements||reg_address_full||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_type||outputs registrant phone type.  ||Tag Replacements||reg_phone_type||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_number||outputs registrant phone number.  ||Tag Replacements||reg_phone_number||||&lt;br /&gt;
|-&lt;br /&gt;
| email||outputs registrant email.  ||Tag Replacements||reg_email||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_created||outputs date payment hold was created for current registrant and event.  ||Tag Replacements||reg_payment_hold_created||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry||outputs date payment hold will expire for current registrant and event. ex: 2020-01-22 18:30:15   ||Tag Replacements||reg_payment_hold_expiry||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_extendable_to||outputs latest date payment hold can be extended up to for current registrant and event.  ||Tag Replacements||reg_payment_hold_extendable_to||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_payment_type||outputs most recent payment type selected for current registrant and event  ||Tag Replacements||reg_payment_hold_payment_type||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry_long||outputs long date payment hold will expire for current registrant and event. ex: Wednesday, January 22, 2020, @ 6:30 PM ||Tag Replacements||reg_payment_hold_expiry_long||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_marked_deceased||Returns True if the user is marked deceased||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_ConsoleUser||Returns True if the user has an active console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| consoleUserExpiryDate||Displays expiration date for console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| CompMoneyRemaining||Displays the remaining comp money||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ events&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| event_id||outputs the Event Id. Example: &amp;quot;DEMO_1&amp;quot;||Tag Replacements||event_id||$event_id||&lt;br /&gt;
|-&lt;br /&gt;
| event_title||outputs the Event Title. Example: &amp;quot;Demo Event&amp;quot;  ||Tag Replacements||event_title||$events_event_title||&lt;br /&gt;
|-&lt;br /&gt;
| event_start_date||outputs event start date from event settings.  ||Tag Replacements||event_start_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_end_date||outputs event end date from event settings.||Tag Replacements||event_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_age_of_maturity||outputs event age of maturity from event settings. ||Tag Replacements||event_age_of_maturity||||&lt;br /&gt;
|-&lt;br /&gt;
| event_pre_reg_end_date||outputs event pre-reg end date from event settings. ||Tag Replacements||event_pre_reg_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_1||outputs address line 1 from event settings.  ||Tag Replacements||event_address_1||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_2||outputs address line 2 from event settings. ||Tag Replacements||event_address_2||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_3||outputs address line 3 from event settings.  ||Tag Replacements||event_address_3||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_4||outputs address line 4 from event settings.||Tag Replacements||event_address_4||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_full||outputs event address with all fields combined.   ||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultFromEmail||outputs default from email address in event settings.  ||Tag Replacements||event_defaultFromEmail||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultReplyTo||outputs default reply to: in event settings.  ||Tag Replacements||event_defaultReplyTo||||&lt;br /&gt;
|-&lt;br /&gt;
| event_chequeToName||outputs cheque to name in event settings.  ||Tag Replacements||event_chequeToName||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ attendee&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_underage||true if below age of maturity set for event from birthdate and stored event age of maturity||badgecode||||$underage||&lt;br /&gt;
|-&lt;br /&gt;
| num||registration sequence number for that particular event||Tag Replacements||reg_reg_num||$events_attended_reg_num||&lt;br /&gt;
|-&lt;br /&gt;
| badge_display_code||outputs registrant badge layout code. Example: FNOT||Tag Replacements||reg_badge_display_code||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_name||outputs membership name. (setting: Group Name)||Tag Replacements||reg_membership_name||$event_membership_types_name||&lt;br /&gt;
|-&lt;br /&gt;
| membership_long_name||outputs membership long name. (setting: Membership Type as printed on badge)  ||Tag Replacements||reg_membership_long_name||$event_membership_types_long_name||&lt;br /&gt;
|-&lt;br /&gt;
| membership_full_desc||outputs membership description. (setting: Sales pitch description:) ||Tag Replacements||reg_membership_full_desc||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_rules||outputs membership rules. (setting: Rules For this membership)  ||Tag Replacements||reg_membership_rules||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_type||outputs registrant membership code for current event. Example SPON_0||Tag Replacements||reg_membership_type||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_last_updated||outputs membership last modified date for current event.  ||Tag Replacements||reg_membership_last_updated||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_price||outputs membership price.  ||Tag Replacements||reg_membership_price||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_from||outputs membership available from date. ||Tag Replacements||reg_membership_avail_from||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_to||outputs membership available to date.   ||Tag Replacements||reg_membership_avail_to||||&lt;br /&gt;
|-&lt;br /&gt;
| staff||if attendee_membership_name contains the word 'staff' this will equal true, this is not case sensitive.||badgecode||||$staff||if retained, maybe this should also check membership_long_name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ panelist&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_has_confirmed_activity||useful for a true false for flagging panelist badges.||new||||||This is highly speculative, however I'm presuming this would work something like AS/DD in that the application would be tied to the UID of the person who applied, so we could pick it up that way, it could go into the attendee group&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_host||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_assistant||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_is_panelist||true if uid matches to either activity host or assistant - useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| activity_schedule||displays a formatted list of activities a panelist is assigned/confirmed to||new|||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ dealers&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_application_state||useful for doing a strcmp in badgecode to automatically tag dealers on approved dealers/artists.||new||||||for correctness I want to call this group artshow, but these function will only really be used by dealers den&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_confirmed||useful for a true false for flagging dealer badges.||new||||||these three are listed as options&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_assistant||useful for a true false for flagging dealer assistant badges.||new||||||these three are listed as options &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ udf&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_title||Will display the title of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_title.||Badgecode||||$udf_title||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_value||Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.||Badgecode||||$udf_value||&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;||Returns True is the UDF has been answered||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_type||returns the udf type||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_udf_response_list||Will display the UDF questions if relevent||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_purchased_&amp;lt;num&amp;gt;||returns true if the customer has purchased the product||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_incart_||returns true if the customer has the product in their cart||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_info||displays product description||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_price||displays product price||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_sold||displays how many have been sold||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_remaining||displays how many are remaining (cart+purchased-inventory)||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ system&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| cm_version||displays CM version string||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| db_version||displays db db version int||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| copyright||displays cm copyright statement||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_expiration||displays license expiration date||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_valid_events||displays list of valid events||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_dev_license||returns true if dev license||new||||||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=461</id>
		<title>Proposed Universal Substitution System</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=461"/>
		<updated>2021-07-22T03:29:57Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ registrant&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| uid||outputs the registrant uid.||Tag Replacements||reg_uid||$uid|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_first||outputs registrant first name.   ||Tag Replacements||reg_rl_first||$registrant_rl_first|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_last||outputs registrant last name.  ||Tag Replacements||reg_rl_last||$registrant_rl_last|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_name||outputs registrant &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.  ||Tag Replacements||reg_full_name||||&lt;br /&gt;
|-&lt;br /&gt;
| common_name||outputs registrant badge name if not empty - otherwise thier  &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.   ||Tag Replacements||reg_badge_name||$registrant_fan_name|||&lt;br /&gt;
|-&lt;br /&gt;
| badge_name||outputs registrant badge name.  ||Tag Replacements||reg_birthday||$registrant_birthday|||&lt;br /&gt;
|-&lt;br /&gt;
| birthday||outputs registrant birthdate.  ||Tag Replacements||reg_first_created||||&lt;br /&gt;
|-&lt;br /&gt;
| first_created||outputs registrant account creation date from database.  ||Tag Replacements||reg_common_name||$registrant_common_name|||&lt;br /&gt;
|-&lt;br /&gt;
| address_ship_to_name||outputs registrant ship to name.   ||Tag Replacements||reg_address_ship_to_name||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_1||outputs registrant address line 1.  ||Tag Replacements||reg_address_line_1||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_2||outputs registrant address line 2.  ||Tag Replacements||reg_address_line_2||||&lt;br /&gt;
|-&lt;br /&gt;
| address_city||outputs registrant address city.  ||Tag Replacements||reg_address_city||||&lt;br /&gt;
|-&lt;br /&gt;
| address_state||outputs registrant address state. ||Tag Replacements||reg_address_state||||&lt;br /&gt;
|-&lt;br /&gt;
| address_country||outputs registrant address country.   ||Tag Replacements||reg_address_country||||&lt;br /&gt;
|-&lt;br /&gt;
| address_zip||outputs registrant address zip.   ||Tag Replacements||reg_address_zip||||&lt;br /&gt;
|-&lt;br /&gt;
| address_full||outputs registrant address with all fields combined.   ||Tag Replacements||reg_address_full||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_type||outputs registrant phone type.  ||Tag Replacements||reg_phone_type||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_number||outputs registrant phone number.  ||Tag Replacements||reg_phone_number||||&lt;br /&gt;
|-&lt;br /&gt;
| email||outputs registrant email.  ||Tag Replacements||reg_email||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_created||outputs date payment hold was created for current registrant and event.  ||Tag Replacements||reg_payment_hold_created||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry||outputs date payment hold will expire for current registrant and event. ex: 2020-01-22 18:30:15   ||Tag Replacements||reg_payment_hold_expiry||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_extendable_to||outputs latest date payment hold can be extended up to for current registrant and event.  ||Tag Replacements||reg_payment_hold_extendable_to||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_payment_type||outputs most recent payment type selected for current registrant and event  ||Tag Replacements||reg_payment_hold_payment_type||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry_long||outputs long date payment hold will expire for current registrant and event. ex: Wednesday, January 22, 2020, @ 6:30 PM ||Tag Replacements||reg_payment_hold_expiry_long||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_marked_deceased||Returns True if the user is marked deceased||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_ConsoleUser||Returns True if the user has an active console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| consoleUserExpiryDate||Displays expiration date for console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| CompMoneyRemaining||Displays the remaining comp money||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ events&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| event_id||outputs the Event Id. Example: &amp;quot;DEMO_1&amp;quot;||Tag Replacements||event_id||$event_id||&lt;br /&gt;
|-&lt;br /&gt;
| event_title||outputs the Event Title. Example: &amp;quot;Demo Event&amp;quot;  ||Tag Replacements||event_title||$events_event_title||&lt;br /&gt;
|-&lt;br /&gt;
| event_start_date||outputs event start date from event settings.  ||Tag Replacements||event_start_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_end_date||outputs event end date from event settings.||Tag Replacements||event_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_age_of_maturity||outputs event age of maturity from event settings. ||Tag Replacements||event_age_of_maturity||||&lt;br /&gt;
|-&lt;br /&gt;
| event_pre_reg_end_date||outputs event pre-reg end date from event settings. ||Tag Replacements||event_pre_reg_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_1||outputs address line 1 from event settings.  ||Tag Replacements||event_address_1||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_2||outputs address line 2 from event settings. ||Tag Replacements||event_address_2||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_3||outputs address line 3 from event settings.  ||Tag Replacements||event_address_3||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_4||outputs address line 4 from event settings.||Tag Replacements||event_address_4||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_full||outputs event address with all fields combined.   ||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultFromEmail||outputs default from email address in event settings.  ||Tag Replacements||event_defaultFromEmail||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultReplyTo||outputs default reply to: in event settings.  ||Tag Replacements||event_defaultReplyTo||||&lt;br /&gt;
|-&lt;br /&gt;
| event_chequeToName||outputs cheque to name in event settings.  ||Tag Replacements||event_chequeToName||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ attendee&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_underage||true if below age of maturity set for event from birthdate and stored event age of maturity||badgecode||||$underage||&lt;br /&gt;
|-&lt;br /&gt;
| num||registration sequence number for that particular event||Tag Replacements||reg_reg_num||$events_attended_reg_num||&lt;br /&gt;
|-&lt;br /&gt;
| badge_display_code||outputs registrant badge layout code. Example: FNOT||Tag Replacements||reg_badge_display_code||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_name||outputs membership name. (setting: Group Name)||Tag Replacements||reg_membership_name||$event_membership_types_name||&lt;br /&gt;
|-&lt;br /&gt;
| membership_long_name||outputs membership long name. (setting: Membership Type as printed on badge)  ||Tag Replacements||reg_membership_long_name||$event_membership_types_long_name||&lt;br /&gt;
|-&lt;br /&gt;
| membership_full_desc||outputs membership description. (setting: Sales pitch description:) ||Tag Replacements||reg_membership_full_desc||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_rules||outputs membership rules. (setting: Rules For this membership)  ||Tag Replacements||reg_membership_rules||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_type||outputs registrant membership code for current event. Example SPON_0||Tag Replacements||reg_membership_type||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_last_updated||outputs membership last modified date for current event.  ||Tag Replacements||reg_membership_last_updated||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_price||outputs membership price.  ||Tag Replacements||reg_membership_price||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_from||outputs membership available from date. ||Tag Replacements||reg_membership_avail_from||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_to||outputs membership available to date.   ||Tag Replacements||reg_membership_avail_to||||&lt;br /&gt;
|-&lt;br /&gt;
| staff||if attendee_membership_name contains the word 'staff' this will equal true, this is not case sensitive.||badgecode||||$staff||if retained, maybe this should also check membership_long_name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ panelist&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_has_confirmed_activity||useful for a true false for flagging panelist badges.||new||||||This is highly speculative, however I'm presuming this would work something like AS/DD in that the application would be tied to the UID of the person who applied, so we could pick it up that way, it could go into the attendee group&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_host||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_assistant||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_is_panelist||true if uid matches to either activity host or assistant - useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| activity_schedule||displays a formatted list of activities a panelist is assigned/confirmed to||new|||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ dealers&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_application_state||useful for doing a strcmp in badgecode to automatically tag dealers on approved dealers/artists.||new||||||for correctness I want to call this group artshow, but these function will only really be used by dealers den&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_confirmed||useful for a true false for flagging dealer badges.||new||||||these three are listed as options&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_assistant||useful for a true false for flagging dealer assistant badges.||new||||||these three are listed as options &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ udf&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_title||Will display the title of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_title.||Badgecode||||$udf_title||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_value||Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.||Badgecode||||$udf_value||&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;||Returns True is the UDF has been answered||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_type||returns the udf type||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_udf_response_list||Will display the UDF questions if relevent||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_purchased_&amp;lt;num&amp;gt;||returns true if the customer has purchased the product||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_incart_||returns true if the customer has the product in their cart||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_info||displays product description||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_price||displays product price||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_sold||displays how many have been sold||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_remaining||displays how many are remaining (cart+purchased-inventory)||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| cm_version||displays CM version string||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| db_version||displays db db version int||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_expiration||displays license expiration date||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_valid_events||displays list of valid events||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_dev_license||returns true if dev license||new||||||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=460</id>
		<title>Proposed Universal Substitution System</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=460"/>
		<updated>2021-07-22T03:27:26Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ registrant&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| uid||outputs the registrant uid.||Tag Replacements||reg_uid||$uid|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_first||outputs registrant first name.   ||Tag Replacements||reg_rl_first||$registrant_rl_first|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_last||outputs registrant last name.  ||Tag Replacements||reg_rl_last||$registrant_rl_last|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_name||outputs registrant &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.  ||Tag Replacements||reg_full_name||||&lt;br /&gt;
|-&lt;br /&gt;
| common_name||outputs registrant badge name if not empty - otherwise thier  &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.   ||Tag Replacements||reg_badge_name||$registrant_fan_name|||&lt;br /&gt;
|-&lt;br /&gt;
| badge_name||outputs registrant badge name.  ||Tag Replacements||reg_birthday||$registrant_birthday|||&lt;br /&gt;
|-&lt;br /&gt;
| birthday||outputs registrant birthdate.  ||Tag Replacements||reg_first_created||||&lt;br /&gt;
|-&lt;br /&gt;
| first_created||outputs registrant account creation date from database.  ||Tag Replacements||reg_common_name||$registrant_common_name|||&lt;br /&gt;
|-&lt;br /&gt;
| address_ship_to_name||outputs registrant ship to name.   ||Tag Replacements||reg_address_ship_to_name||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_1||outputs registrant address line 1.  ||Tag Replacements||reg_address_line_1||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_2||outputs registrant address line 2.  ||Tag Replacements||reg_address_line_2||||&lt;br /&gt;
|-&lt;br /&gt;
| address_city||outputs registrant address city.  ||Tag Replacements||reg_address_city||||&lt;br /&gt;
|-&lt;br /&gt;
| address_state||outputs registrant address state. ||Tag Replacements||reg_address_state||||&lt;br /&gt;
|-&lt;br /&gt;
| address_country||outputs registrant address country.   ||Tag Replacements||reg_address_country||||&lt;br /&gt;
|-&lt;br /&gt;
| address_zip||outputs registrant address zip.   ||Tag Replacements||reg_address_zip||||&lt;br /&gt;
|-&lt;br /&gt;
| address_full||outputs registrant address with all fields combined.   ||Tag Replacements||reg_address_full||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_type||outputs registrant phone type.  ||Tag Replacements||reg_phone_type||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_number||outputs registrant phone number.  ||Tag Replacements||reg_phone_number||||&lt;br /&gt;
|-&lt;br /&gt;
| email||outputs registrant email.  ||Tag Replacements||reg_email||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_created||outputs date payment hold was created for current registrant and event.  ||Tag Replacements||reg_payment_hold_created||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry||outputs date payment hold will expire for current registrant and event. ex: 2020-01-22 18:30:15   ||Tag Replacements||reg_payment_hold_expiry||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_extendable_to||outputs latest date payment hold can be extended up to for current registrant and event.  ||Tag Replacements||reg_payment_hold_extendable_to||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_payment_type||outputs most recent payment type selected for current registrant and event  ||Tag Replacements||reg_payment_hold_payment_type||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry_long||outputs long date payment hold will expire for current registrant and event. ex: Wednesday, January 22, 2020, @ 6:30 PM ||Tag Replacements||reg_payment_hold_expiry_long||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_marked_deceased||Returns True if the user is marked deceased||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_ConsoleUser||Returns True if the user has an active console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| consoleUserExpiryDate||Displays expiration date for console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| CompMoneyRemaining||Displays the remaining comp money||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ events&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| event_id||outputs the Event Id. Example: &amp;quot;DEMO_1&amp;quot;||Tag Replacements||event_id||$event_id||&lt;br /&gt;
|-&lt;br /&gt;
| event_title||outputs the Event Title. Example: &amp;quot;Demo Event&amp;quot;  ||Tag Replacements||event_title||$events_event_title||&lt;br /&gt;
|-&lt;br /&gt;
| event_start_date||outputs event start date from event settings.  ||Tag Replacements||event_start_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_end_date||outputs event end date from event settings.||Tag Replacements||event_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_age_of_maturity||outputs event age of maturity from event settings. ||Tag Replacements||event_age_of_maturity||||&lt;br /&gt;
|-&lt;br /&gt;
| event_pre_reg_end_date||outputs event pre-reg end date from event settings. ||Tag Replacements||event_pre_reg_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_1||outputs address line 1 from event settings.  ||Tag Replacements||event_address_1||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_2||outputs address line 2 from event settings. ||Tag Replacements||event_address_2||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_3||outputs address line 3 from event settings.  ||Tag Replacements||event_address_3||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_4||outputs address line 4 from event settings.||Tag Replacements||event_address_4||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_full||outputs event address with all fields combined.   ||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultFromEmail||outputs default from email address in event settings.  ||Tag Replacements||event_defaultFromEmail||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultReplyTo||outputs default reply to: in event settings.  ||Tag Replacements||event_defaultReplyTo||||&lt;br /&gt;
|-&lt;br /&gt;
| event_chequeToName||outputs cheque to name in event settings.  ||Tag Replacements||event_chequeToName||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ attendee&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_underage||true if below age of maturity set for event from birthdate and stored event age of maturity||badgecode||||$underage||&lt;br /&gt;
|-&lt;br /&gt;
| num||registration sequence number for that particular event||Tag Replacements||reg_reg_num||$events_attended_reg_num||&lt;br /&gt;
|-&lt;br /&gt;
| badge_display_code||outputs registrant badge layout code. Example: FNOT||Tag Replacements||reg_badge_display_code||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_name||outputs membership name. (setting: Group Name)||Tag Replacements||reg_membership_name||$event_membership_types_name||&lt;br /&gt;
|-&lt;br /&gt;
| membership_long_name||outputs membership long name. (setting: Membership Type as printed on badge)  ||Tag Replacements||reg_membership_long_name||$event_membership_types_long_name||&lt;br /&gt;
|-&lt;br /&gt;
| membership_full_desc||outputs membership description. (setting: Sales pitch description:) ||Tag Replacements||reg_membership_full_desc||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_rules||outputs membership rules. (setting: Rules For this membership)  ||Tag Replacements||reg_membership_rules||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_type||outputs registrant membership code for current event. Example SPON_0||Tag Replacements||reg_membership_type||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_last_updated||outputs membership last modified date for current event.  ||Tag Replacements||reg_membership_last_updated||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_price||outputs membership price.  ||Tag Replacements||reg_membership_price||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_from||outputs membership available from date. ||Tag Replacements||reg_membership_avail_from||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_to||outputs membership available to date.   ||Tag Replacements||reg_membership_avail_to||||&lt;br /&gt;
|-&lt;br /&gt;
| staff||if attendee_membership_name contains the word 'staff' this will equal true, this is not case sensitive.||badgecode||||$staff||if retained, maybe this should also check membership_long_name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ panelist&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_has_confirmed_activity||useful for a true false for flagging panelist badges.||new||||||This is highly speculative, however I'm presuming this would work something like AS/DD in that the application would be tied to the UID of the person who applied, so we could pick it up that way, it could go into the attendee group&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_host||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_assistant||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_is_true if uid matches to either activity host or assistant - useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| activity_schedule||displays a formatted list of activities a panelist is assigned/confirmed to||new|||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ dealers&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_application_state||useful for doing a strcmp in badgecode to automatically tag dealers on approved dealers/artists.||new||||||for correctness I want to call this group artshow, but these function will only really be used by dealers den&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_confirmed||useful for a true false for flagging dealer badges.||new||||||these three are listed as options&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_assistant||useful for a true false for flagging dealer assistant badges.||new||||||these three are listed as options &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ udf&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_title||Will display the title of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_title.||Badgecode||||$udf_title||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_value||Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.||Badgecode||||$udf_value||&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;||Returns True is the UDF has been answered||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_type||returns the udf type||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_udf_response_list||Will display the UDF questions if relevent||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_purchased_&amp;lt;num&amp;gt;||returns true if the customer has purchased the product||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_incart_||returns true if the customer has the product in their cart||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_info||displays product description||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_price||displays product price||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_sold||displays how many have been sold||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_remaining||displays how many are remaining (cart+purchased-inventory)||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| cm_version||displays CM version string||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| db_version||displays db db version int||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_expiration||displays license expiration date||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_valid_events||displays list of valid events||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_dev_license||returns true if dev license||new||||||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=459</id>
		<title>Proposed Universal Substitution System</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=459"/>
		<updated>2021-07-22T03:26:35Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ registrant&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| uid||outputs the registrant uid.||Tag Replacements||reg_uid||$uid|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_first||outputs registrant first name.   ||Tag Replacements||reg_rl_first||$registrant_rl_first|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_last||outputs registrant last name.  ||Tag Replacements||reg_rl_last||$registrant_rl_last|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_name||outputs registrant &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.  ||Tag Replacements||reg_full_name||||&lt;br /&gt;
|-&lt;br /&gt;
| common_name||outputs registrant badge name if not empty - otherwise thier  &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.   ||Tag Replacements||reg_badge_name||$registrant_fan_name|||&lt;br /&gt;
|-&lt;br /&gt;
| badge_name||outputs registrant badge name.  ||Tag Replacements||reg_birthday||$registrant_birthday|||&lt;br /&gt;
|-&lt;br /&gt;
| birthday||outputs registrant birthdate.  ||Tag Replacements||reg_first_created||||&lt;br /&gt;
|-&lt;br /&gt;
| first_created||outputs registrant account creation date from database.  ||Tag Replacements||reg_common_name||$registrant_common_name|||&lt;br /&gt;
|-&lt;br /&gt;
| address_ship_to_name||outputs registrant ship to name.   ||Tag Replacements||reg_address_ship_to_name||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_1||outputs registrant address line 1.  ||Tag Replacements||reg_address_line_1||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_2||outputs registrant address line 2.  ||Tag Replacements||reg_address_line_2||||&lt;br /&gt;
|-&lt;br /&gt;
| address_city||outputs registrant address city.  ||Tag Replacements||reg_address_city||||&lt;br /&gt;
|-&lt;br /&gt;
| address_state||outputs registrant address state. ||Tag Replacements||reg_address_state||||&lt;br /&gt;
|-&lt;br /&gt;
| address_country||outputs registrant address country.   ||Tag Replacements||reg_address_country||||&lt;br /&gt;
|-&lt;br /&gt;
| address_zip||outputs registrant address zip.   ||Tag Replacements||reg_address_zip||||&lt;br /&gt;
|-&lt;br /&gt;
| address_full||outputs registrant address with all fields combined.   ||Tag Replacements||reg_address_full||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_type||outputs registrant phone type.  ||Tag Replacements||reg_phone_type||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_number||outputs registrant phone number.  ||Tag Replacements||reg_phone_number||||&lt;br /&gt;
|-&lt;br /&gt;
| email||outputs registrant email.  ||Tag Replacements||reg_email||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_created||outputs date payment hold was created for current registrant and event.  ||Tag Replacements||reg_payment_hold_created||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry||outputs date payment hold will expire for current registrant and event. ex: 2020-01-22 18:30:15   ||Tag Replacements||reg_payment_hold_expiry||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_extendable_to||outputs latest date payment hold can be extended up to for current registrant and event.  ||Tag Replacements||reg_payment_hold_extendable_to||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_payment_type||outputs most recent payment type selected for current registrant and event  ||Tag Replacements||reg_payment_hold_payment_type||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry_long||outputs long date payment hold will expire for current registrant and event. ex: Wednesday, January 22, 2020, @ 6:30 PM ||Tag Replacements||reg_payment_hold_expiry_long||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_marked_deceased||Returns True if the user is marked deceased||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_ConsoleUser||Returns True if the user has an active console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| consoleUserExpiryDate||Displays expiration date for console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| CompMoneyRemaining||Displays the remaining comp money||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ events&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| event_id||outputs the Event Id. Example: &amp;quot;DEMO_1&amp;quot;||Tag Replacements||event_id||$event_id||&lt;br /&gt;
|-&lt;br /&gt;
| event_title||outputs the Event Title. Example: &amp;quot;Demo Event&amp;quot;  ||Tag Replacements||event_title||$events_event_title||&lt;br /&gt;
|-&lt;br /&gt;
| event_start_date||outputs event start date from event settings.  ||Tag Replacements||event_start_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_end_date||outputs event end date from event settings.||Tag Replacements||event_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_age_of_maturity||outputs event age of maturity from event settings. ||Tag Replacements||event_age_of_maturity||||&lt;br /&gt;
|-&lt;br /&gt;
| event_pre_reg_end_date||outputs event pre-reg end date from event settings. ||Tag Replacements||event_pre_reg_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_1||outputs address line 1 from event settings.  ||Tag Replacements||event_address_1||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_2||outputs address line 2 from event settings. ||Tag Replacements||event_address_2||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_3||outputs address line 3 from event settings.  ||Tag Replacements||event_address_3||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_4||outputs address line 4 from event settings.||Tag Replacements||event_address_4||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_full||outputs event address with all fields combined.   ||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultFromEmail||outputs default from email address in event settings.  ||Tag Replacements||event_defaultFromEmail||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultReplyTo||outputs default reply to: in event settings.  ||Tag Replacements||event_defaultReplyTo||||&lt;br /&gt;
|-&lt;br /&gt;
| event_chequeToName||outputs cheque to name in event settings.  ||Tag Replacements||event_chequeToName||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ attendee&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_underage||true if below age of maturity set for event from birthdate and stored event age of maturity||badgecode||||$underage||||&lt;br /&gt;
|-&lt;br /&gt;
| num||registration sequence number for that particular event||Tag Replacements||reg_reg_num||$events_attended_reg_num||||&lt;br /&gt;
|-&lt;br /&gt;
| badge_display_code||outputs registrant badge layout code. Example: FNOT||Tag Replacements||reg_badge_display_code||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_name||outputs membership name. (setting: Group Name)||Tag Replacements||reg_membership_name||$event_membership_types_name||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_long_name||outputs membership long name. (setting: Membership Type as printed on badge)  ||Tag Replacements||reg_membership_long_name||$event_membership_types_long_name||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_full_desc||outputs membership description. (setting: Sales pitch description:) ||Tag Replacements||reg_membership_full_desc||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_rules||outputs membership rules. (setting: Rules For this membership)  ||Tag Replacements||reg_membership_rules||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_type||outputs registrant membership code for current event. Example SPON_0||Tag Replacements||reg_membership_type||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_last_updated||outputs membership last modified date for current event.  ||Tag Replacements||reg_membership_last_updated||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_price||outputs membership price.  ||Tag Replacements||reg_membership_price||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_from||outputs membership available from date. ||Tag Replacements||reg_membership_avail_from||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_to||outputs membership available to date.   ||Tag Replacements||reg_membership_avail_to||||&lt;br /&gt;
|-&lt;br /&gt;
| staff||if attendee_membership_name contains the word 'staff' this will equal true, this is not case sensitive.||badgecode||||$staff||if retained, maybe this should also check membership_long_name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ panelist&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_has_confirmed_activity||useful for a true false for flagging panelist badges.||new||||||This is highly speculative, however I'm presuming this would work something like AS/DD in that the application would be tied to the UID of the person who applied, so we could pick it up that way, it could go into the attendee group&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_host||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_assistant||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_is_true if uid matches to either activity host or assistant - useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| activity_schedule||displays a formatted list of activities a panelist is assigned/confirmed to||new|||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ dealers&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_application_state||useful for doing a strcmp in badgecode to automatically tag dealers on approved dealers/artists.||new||||||for correctness I want to call this group artshow, but these function will only really be used by dealers den&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_confirmed||useful for a true false for flagging dealer badges.||new||||||these three are listed as options&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_assistant||useful for a true false for flagging dealer assistant badges.||new||||||these three are listed as options &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ udf&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_title||Will display the title of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_title.||Badgecode||||$udf_title||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_value||Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.||Badgecode||||$udf_value||&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;||Returns True is the UDF has been answered||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_type||returns the udf type||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_udf_response_list||Will display the UDF questions if relevent||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_purchased_&amp;lt;num&amp;gt;||returns true if the customer has purchased the product||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_incart_||returns true if the customer has the product in their cart||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_info||displays product description||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_price||displays product price||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_sold||displays how many have been sold||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_remaining||displays how many are remaining (cart+purchased-inventory)||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| cm_version||displays CM version string||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| db_version||displays db db version int||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_expiration||displays license expiration date||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_valid_events||displays list of valid events||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_dev_license||returns true if dev license||new||||||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=458</id>
		<title>Proposed Universal Substitution System</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=458"/>
		<updated>2021-07-22T03:26:09Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ registrant&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| uid||outputs the registrant uid.||Tag Replacements||reg_uid||$uid|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_first||outputs registrant first name.   ||Tag Replacements||reg_rl_first||$registrant_rl_first|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_last||outputs registrant last name.  ||Tag Replacements||reg_rl_last||$registrant_rl_last|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_name||outputs registrant &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.  ||Tag Replacements||reg_full_name||||&lt;br /&gt;
|-&lt;br /&gt;
| common_name||outputs registrant badge name if not empty - otherwise thier  &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.   ||Tag Replacements||reg_badge_name||$registrant_fan_name|||&lt;br /&gt;
|-&lt;br /&gt;
| badge_name||outputs registrant badge name.  ||Tag Replacements||reg_birthday||$registrant_birthday|||&lt;br /&gt;
|-&lt;br /&gt;
| birthday||outputs registrant birthdate.  ||Tag Replacements||reg_first_created||||&lt;br /&gt;
|-&lt;br /&gt;
| first_created||outputs registrant account creation date from database.  ||Tag Replacements||reg_common_name||$registrant_common_name|||&lt;br /&gt;
|-&lt;br /&gt;
| address_ship_to_name||outputs registrant ship to name.   ||Tag Replacements||reg_address_ship_to_name||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_1||outputs registrant address line 1.  ||Tag Replacements||reg_address_line_1||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_2||outputs registrant address line 2.  ||Tag Replacements||reg_address_line_2||||&lt;br /&gt;
|-&lt;br /&gt;
| address_city||outputs registrant address city.  ||Tag Replacements||reg_address_city||||&lt;br /&gt;
|-&lt;br /&gt;
| address_state||outputs registrant address state. ||Tag Replacements||reg_address_state||||&lt;br /&gt;
|-&lt;br /&gt;
| address_country||outputs registrant address country.   ||Tag Replacements||reg_address_country||||&lt;br /&gt;
|-&lt;br /&gt;
| address_zip||outputs registrant address zip.   ||Tag Replacements||reg_address_zip||||&lt;br /&gt;
|-&lt;br /&gt;
| address_full||outputs registrant address with all fields combined.   ||Tag Replacements||reg_address_full||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_type||outputs registrant phone type.  ||Tag Replacements||reg_phone_type||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_number||outputs registrant phone number.  ||Tag Replacements||reg_phone_number||||&lt;br /&gt;
|-&lt;br /&gt;
| email||outputs registrant email.  ||Tag Replacements||reg_email||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_created||outputs date payment hold was created for current registrant and event.  ||Tag Replacements||reg_payment_hold_created||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry||outputs date payment hold will expire for current registrant and event. ex: 2020-01-22 18:30:15   ||Tag Replacements||reg_payment_hold_expiry||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_extendable_to||outputs latest date payment hold can be extended up to for current registrant and event.  ||Tag Replacements||reg_payment_hold_extendable_to||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_payment_type||outputs most recent payment type selected for current registrant and event  ||Tag Replacements||reg_payment_hold_payment_type||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry_long||outputs long date payment hold will expire for current registrant and event. ex: Wednesday, January 22, 2020, @ 6:30 PM ||Tag Replacements||reg_payment_hold_expiry_long||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_marked_deceased||Returns True if the user is marked deceased||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_ConsoleUser||Returns True if the user has an active console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| consoleUserExpiryDate||Displays expiration date for console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| CompMoneyRemaining||Displays the remaining comp money||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ events&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| event_id||outputs the Event Id. Example: &amp;quot;DEMO_1&amp;quot;||Tag Replacements||event_id||$event_id||||&lt;br /&gt;
|-&lt;br /&gt;
| event_title||outputs the Event Title. Example: &amp;quot;Demo Event&amp;quot;  ||Tag Replacements||event_title||$events_event_title||||&lt;br /&gt;
|-&lt;br /&gt;
| event_start_date||outputs event start date from event settings.  ||Tag Replacements||event_start_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_end_date||outputs event end date from event settings.||Tag Replacements||event_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_age_of_maturity||outputs event age of maturity from event settings. ||Tag Replacements||event_age_of_maturity||||&lt;br /&gt;
|-&lt;br /&gt;
| event_pre_reg_end_date||outputs event pre-reg end date from event settings. ||Tag Replacements||event_pre_reg_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_1||outputs address line 1 from event settings.  ||Tag Replacements||event_address_1||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_2||outputs address line 2 from event settings. ||Tag Replacements||event_address_2||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_3||outputs address line 3 from event settings.  ||Tag Replacements||event_address_3||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_4||outputs address line 4 from event settings.||Tag Replacements||event_address_4||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_full||outputs event address with all fields combined.   ||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultFromEmail||outputs default from email address in event settings.  ||Tag Replacements||event_defaultFromEmail||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultReplyTo||outputs default reply to: in event settings.  ||Tag Replacements||event_defaultReplyTo||||&lt;br /&gt;
|-&lt;br /&gt;
| event_chequeToName||outputs cheque to name in event settings.  ||Tag Replacements||event_chequeToName||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ attendee&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_underage||true if below age of maturity set for event from birthdate and stored event age of maturity||badgecode||||$underage||||&lt;br /&gt;
|-&lt;br /&gt;
| num||registration sequence number for that particular event||Tag Replacements||reg_reg_num||$events_attended_reg_num||||&lt;br /&gt;
|-&lt;br /&gt;
| badge_display_code||outputs registrant badge layout code. Example: FNOT||Tag Replacements||reg_badge_display_code||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_name||outputs membership name. (setting: Group Name)||Tag Replacements||reg_membership_name||$event_membership_types_name||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_long_name||outputs membership long name. (setting: Membership Type as printed on badge)  ||Tag Replacements||reg_membership_long_name||$event_membership_types_long_name||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_full_desc||outputs membership description. (setting: Sales pitch description:) ||Tag Replacements||reg_membership_full_desc||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_rules||outputs membership rules. (setting: Rules For this membership)  ||Tag Replacements||reg_membership_rules||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_type||outputs registrant membership code for current event. Example SPON_0||Tag Replacements||reg_membership_type||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_last_updated||outputs membership last modified date for current event.  ||Tag Replacements||reg_membership_last_updated||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_price||outputs membership price.  ||Tag Replacements||reg_membership_price||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_from||outputs membership available from date. ||Tag Replacements||reg_membership_avail_from||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_to||outputs membership available to date.   ||Tag Replacements||reg_membership_avail_to||||&lt;br /&gt;
|-&lt;br /&gt;
| staff||if attendee_membership_name contains the word 'staff' this will equal true, this is not case sensitive.||badgecode||||$staff||if retained, maybe this should also check membership_long_name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ panelist&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_has_confirmed_activity||useful for a true false for flagging panelist badges.||new||||||This is highly speculative, however I'm presuming this would work something like AS/DD in that the application would be tied to the UID of the person who applied, so we could pick it up that way, it could go into the attendee group&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_host||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_assistant||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_is_true if uid matches to either activity host or assistant - useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| activity_schedule||displays a formatted list of activities a panelist is assigned/confirmed to||new|||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ dealers&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_application_state||useful for doing a strcmp in badgecode to automatically tag dealers on approved dealers/artists.||new||||||for correctness I want to call this group artshow, but these function will only really be used by dealers den&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_confirmed||useful for a true false for flagging dealer badges.||new||||||these three are listed as options&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_assistant||useful for a true false for flagging dealer assistant badges.||new||||||these three are listed as options &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ udf&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_title||Will display the title of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_title.||Badgecode||||$udf_title||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_value||Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.||Badgecode||||$udf_value||&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;||Returns True is the UDF has been answered||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_type||returns the udf type||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_udf_response_list||Will display the UDF questions if relevent||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_purchased_&amp;lt;num&amp;gt;||returns true if the customer has purchased the product||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_incart_||returns true if the customer has the product in their cart||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_info||displays product description||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_price||displays product price||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_sold||displays how many have been sold||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_remaining||displays how many are remaining (cart+purchased-inventory)||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| cm_version||displays CM version string||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| db_version||displays db db version int||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_expiration||displays license expiration date||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_valid_events||displays list of valid events||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_dev_license||returns true if dev license||new||||||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=457</id>
		<title>Proposed Universal Substitution System</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=457"/>
		<updated>2021-07-22T03:25:54Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ registrant&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| uid||outputs the registrant uid.||Tag Replacements||reg_uid||$uid|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_first||outputs registrant first name.   ||Tag Replacements||reg_rl_first||$registrant_rl_first|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_last||outputs registrant last name.  ||Tag Replacements||reg_rl_last||$registrant_rl_last|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_name||outputs registrant &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.  ||Tag Replacements||reg_full_name||||&lt;br /&gt;
|-&lt;br /&gt;
| common_name||outputs registrant badge name if not empty - otherwise thier  &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.   ||Tag Replacements||reg_badge_name||$registrant_fan_name|||&lt;br /&gt;
|-&lt;br /&gt;
| badge_name||outputs registrant badge name.  ||Tag Replacements||reg_birthday||$registrant_birthday|||&lt;br /&gt;
|-&lt;br /&gt;
| birthday||outputs registrant birthdate.  ||Tag Replacements||reg_first_created||||&lt;br /&gt;
|-&lt;br /&gt;
| first_created||outputs registrant account creation date from database.  ||Tag Replacements||reg_common_name||$registrant_common_name|||&lt;br /&gt;
|-&lt;br /&gt;
| address_ship_to_name||outputs registrant ship to name.   ||Tag Replacements||reg_address_ship_to_name||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_1||outputs registrant address line 1.  ||Tag Replacements||reg_address_line_1||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_2||outputs registrant address line 2.  ||Tag Replacements||reg_address_line_2||||&lt;br /&gt;
|-&lt;br /&gt;
| address_city||outputs registrant address city.  ||Tag Replacements||reg_address_city||||&lt;br /&gt;
|-&lt;br /&gt;
| address_state||outputs registrant address state. ||Tag Replacements||reg_address_state||||&lt;br /&gt;
|-&lt;br /&gt;
| address_country||outputs registrant address country.   ||Tag Replacements||reg_address_country||||&lt;br /&gt;
|-&lt;br /&gt;
| address_zip||outputs registrant address zip.   ||Tag Replacements||reg_address_zip||||&lt;br /&gt;
|-&lt;br /&gt;
| address_full||outputs registrant address with all fields combined.   ||Tag Replacements||reg_address_full||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_type||outputs registrant phone type.  ||Tag Replacements||reg_phone_type||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_number||outputs registrant phone number.  ||Tag Replacements||reg_phone_number||||&lt;br /&gt;
|-&lt;br /&gt;
| email||outputs registrant email.  ||Tag Replacements||reg_email||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_created||outputs date payment hold was created for current registrant and event.  ||Tag Replacements||reg_payment_hold_created||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry||outputs date payment hold will expire for current registrant and event. ex: 2020-01-22 18:30:15   ||Tag Replacements||reg_payment_hold_expiry||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_extendable_to||outputs latest date payment hold can be extended up to for current registrant and event.  ||Tag Replacements||reg_payment_hold_extendable_to||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_payment_type||outputs most recent payment type selected for current registrant and event  ||Tag Replacements||reg_payment_hold_payment_type||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry_long||outputs long date payment hold will expire for current registrant and event. ex: Wednesday, January 22, 2020, @ 6:30 PM ||Tag Replacements||reg_payment_hold_expiry_long||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_marked_deceased||Returns True if the user is marked deceased||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_ConsoleUser||Returns True if the user has an active console login||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| consoleUserExpiryDate||Displays expiration date for console login||new|||||&lt;br /&gt;
|-&lt;br /&gt;
| CompMoneyRemaining||Displays the remaining comp money||new|||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ events&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| event_id||outputs the Event Id. Example: &amp;quot;DEMO_1&amp;quot;||Tag Replacements||event_id||$event_id||||&lt;br /&gt;
|-&lt;br /&gt;
| event_title||outputs the Event Title. Example: &amp;quot;Demo Event&amp;quot;  ||Tag Replacements||event_title||$events_event_title||||&lt;br /&gt;
|-&lt;br /&gt;
| event_start_date||outputs event start date from event settings.  ||Tag Replacements||event_start_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_end_date||outputs event end date from event settings.||Tag Replacements||event_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_age_of_maturity||outputs event age of maturity from event settings. ||Tag Replacements||event_age_of_maturity||||&lt;br /&gt;
|-&lt;br /&gt;
| event_pre_reg_end_date||outputs event pre-reg end date from event settings. ||Tag Replacements||event_pre_reg_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_1||outputs address line 1 from event settings.  ||Tag Replacements||event_address_1||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_2||outputs address line 2 from event settings. ||Tag Replacements||event_address_2||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_3||outputs address line 3 from event settings.  ||Tag Replacements||event_address_3||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_4||outputs address line 4 from event settings.||Tag Replacements||event_address_4||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_full||outputs event address with all fields combined.   ||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultFromEmail||outputs default from email address in event settings.  ||Tag Replacements||event_defaultFromEmail||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultReplyTo||outputs default reply to: in event settings.  ||Tag Replacements||event_defaultReplyTo||||&lt;br /&gt;
|-&lt;br /&gt;
| event_chequeToName||outputs cheque to name in event settings.  ||Tag Replacements||event_chequeToName||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ attendee&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_underage||true if below age of maturity set for event from birthdate and stored event age of maturity||badgecode||||$underage||||&lt;br /&gt;
|-&lt;br /&gt;
| num||registration sequence number for that particular event||Tag Replacements||reg_reg_num||$events_attended_reg_num||||&lt;br /&gt;
|-&lt;br /&gt;
| badge_display_code||outputs registrant badge layout code. Example: FNOT||Tag Replacements||reg_badge_display_code||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_name||outputs membership name. (setting: Group Name)||Tag Replacements||reg_membership_name||$event_membership_types_name||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_long_name||outputs membership long name. (setting: Membership Type as printed on badge)  ||Tag Replacements||reg_membership_long_name||$event_membership_types_long_name||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_full_desc||outputs membership description. (setting: Sales pitch description:) ||Tag Replacements||reg_membership_full_desc||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_rules||outputs membership rules. (setting: Rules For this membership)  ||Tag Replacements||reg_membership_rules||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_type||outputs registrant membership code for current event. Example SPON_0||Tag Replacements||reg_membership_type||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_last_updated||outputs membership last modified date for current event.  ||Tag Replacements||reg_membership_last_updated||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_price||outputs membership price.  ||Tag Replacements||reg_membership_price||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_from||outputs membership available from date. ||Tag Replacements||reg_membership_avail_from||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_to||outputs membership available to date.   ||Tag Replacements||reg_membership_avail_to||||&lt;br /&gt;
|-&lt;br /&gt;
| staff||if attendee_membership_name contains the word 'staff' this will equal true, this is not case sensitive.||badgecode||||$staff||if retained, maybe this should also check membership_long_name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ panelist&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_has_confirmed_activity||useful for a true false for flagging panelist badges.||new||||||This is highly speculative, however I'm presuming this would work something like AS/DD in that the application would be tied to the UID of the person who applied, so we could pick it up that way, it could go into the attendee group&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_host||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_assistant||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_is_true if uid matches to either activity host or assistant - useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| activity_schedule||displays a formatted list of activities a panelist is assigned/confirmed to||new|||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ dealers&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_application_state||useful for doing a strcmp in badgecode to automatically tag dealers on approved dealers/artists.||new||||||for correctness I want to call this group artshow, but these function will only really be used by dealers den&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_confirmed||useful for a true false for flagging dealer badges.||new||||||these three are listed as options&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_assistant||useful for a true false for flagging dealer assistant badges.||new||||||these three are listed as options &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ udf&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_title||Will display the title of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_title.||Badgecode||||$udf_title||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_value||Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.||Badgecode||||$udf_value||&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;||Returns True is the UDF has been answered||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_type||returns the udf type||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_udf_response_list||Will display the UDF questions if relevent||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_purchased_&amp;lt;num&amp;gt;||returns true if the customer has purchased the product||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_incart_||returns true if the customer has the product in their cart||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_info||displays product description||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_price||displays product price||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_sold||displays how many have been sold||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_remaining||displays how many are remaining (cart+purchased-inventory)||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| cm_version||displays CM version string||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| db_version||displays db db version int||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_expiration||displays license expiration date||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_valid_events||displays list of valid events||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_dev_license||returns true if dev license||new||||||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=456</id>
		<title>Proposed Universal Substitution System</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=456"/>
		<updated>2021-07-22T03:25:18Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ registrant&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| uid||outputs the registrant uid.||Tag Replacements||reg_uid||$uid|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_first||outputs registrant first name.   ||Tag Replacements||reg_rl_first||$registrant_rl_first|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_last||outputs registrant last name.  ||Tag Replacements||reg_rl_last||$registrant_rl_last|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_name||outputs registrant &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.  ||Tag Replacements||reg_full_name||||&lt;br /&gt;
|-&lt;br /&gt;
| common_name||outputs registrant badge name if not empty - otherwise thier  &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.   ||Tag Replacements||reg_badge_name||$registrant_fan_name|||&lt;br /&gt;
|-&lt;br /&gt;
| badge_name||outputs registrant badge name.  ||Tag Replacements||reg_birthday||$registrant_birthday|||&lt;br /&gt;
|-&lt;br /&gt;
| birthday||outputs registrant birthdate.  ||Tag Replacements||reg_first_created||||&lt;br /&gt;
|-&lt;br /&gt;
| first_created||outputs registrant account creation date from database.  ||Tag Replacements||reg_common_name||$registrant_common_name|||&lt;br /&gt;
|-&lt;br /&gt;
| address_ship_to_name||outputs registrant ship to name.   ||Tag Replacements||reg_address_ship_to_name||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_1||outputs registrant address line 1.  ||Tag Replacements||reg_address_line_1||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_2||outputs registrant address line 2.  ||Tag Replacements||reg_address_line_2||||&lt;br /&gt;
|-&lt;br /&gt;
| address_city||outputs registrant address city.  ||Tag Replacements||reg_address_city||||&lt;br /&gt;
|-&lt;br /&gt;
| address_state||outputs registrant address state. ||Tag Replacements||reg_address_state||||&lt;br /&gt;
|-&lt;br /&gt;
| address_country||outputs registrant address country.   ||Tag Replacements||reg_address_country||||&lt;br /&gt;
|-&lt;br /&gt;
| address_zip||outputs registrant address zip.   ||Tag Replacements||reg_address_zip||||&lt;br /&gt;
|-&lt;br /&gt;
| address_full||outputs registrant address with all fields combined.   ||Tag Replacements||reg_address_full||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_type||outputs registrant phone type.  ||Tag Replacements||reg_phone_type||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_number||outputs registrant phone number.  ||Tag Replacements||reg_phone_number||||&lt;br /&gt;
|-&lt;br /&gt;
| email||outputs registrant email.  ||Tag Replacements||reg_email||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_created||outputs date payment hold was created for current registrant and event.  ||Tag Replacements||reg_payment_hold_created||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry||outputs date payment hold will expire for current registrant and event. ex: 2020-01-22 18:30:15   ||Tag Replacements||reg_payment_hold_expiry||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_extendable_to||outputs latest date payment hold can be extended up to for current registrant and event.  ||Tag Replacements||reg_payment_hold_extendable_to||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_payment_type||outputs most recent payment type selected for current registrant and event  ||Tag Replacements||reg_payment_hold_payment_type||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry_long||outputs long date payment hold will expire for current registrant and event. ex: Wednesday, January 22, 2020, @ 6:30 PM ||Tag Replacements||reg_payment_hold_expiry_long||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_marked_deceased||Returns True if the user is marked deceased||new|||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_ConsoleUser||Returns True if the user has an active console login||new|||||&lt;br /&gt;
|-&lt;br /&gt;
| consoleUserExpiryDate||Displays expiration date for console login||new|||||&lt;br /&gt;
|-&lt;br /&gt;
| CompMoneyRemaining||Displays the remaining comp money||new|||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ events&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| event_id||outputs the Event Id. Example: &amp;quot;DEMO_1&amp;quot;||Tag Replacements||event_id||$event_id||||&lt;br /&gt;
|-&lt;br /&gt;
| event_title||outputs the Event Title. Example: &amp;quot;Demo Event&amp;quot;  ||Tag Replacements||event_title||$events_event_title||||&lt;br /&gt;
|-&lt;br /&gt;
| event_start_date||outputs event start date from event settings.  ||Tag Replacements||event_start_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_end_date||outputs event end date from event settings.||Tag Replacements||event_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_age_of_maturity||outputs event age of maturity from event settings. ||Tag Replacements||event_age_of_maturity||||&lt;br /&gt;
|-&lt;br /&gt;
| event_pre_reg_end_date||outputs event pre-reg end date from event settings. ||Tag Replacements||event_pre_reg_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_1||outputs address line 1 from event settings.  ||Tag Replacements||event_address_1||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_2||outputs address line 2 from event settings. ||Tag Replacements||event_address_2||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_3||outputs address line 3 from event settings.  ||Tag Replacements||event_address_3||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_4||outputs address line 4 from event settings.||Tag Replacements||event_address_4||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_full||outputs event address with all fields combined.   ||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultFromEmail||outputs default from email address in event settings.  ||Tag Replacements||event_defaultFromEmail||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultReplyTo||outputs default reply to: in event settings.  ||Tag Replacements||event_defaultReplyTo||||&lt;br /&gt;
|-&lt;br /&gt;
| event_chequeToName||outputs cheque to name in event settings.  ||Tag Replacements||event_chequeToName||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ attendee&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_underage||true if below age of maturity set for event from birthdate and stored event age of maturity||badgecode||||$underage||||&lt;br /&gt;
|-&lt;br /&gt;
| num||registration sequence number for that particular event||Tag Replacements||reg_reg_num||$events_attended_reg_num||||&lt;br /&gt;
|-&lt;br /&gt;
| badge_display_code||outputs registrant badge layout code. Example: FNOT||Tag Replacements||reg_badge_display_code||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_name||outputs membership name. (setting: Group Name)||Tag Replacements||reg_membership_name||$event_membership_types_name||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_long_name||outputs membership long name. (setting: Membership Type as printed on badge)  ||Tag Replacements||reg_membership_long_name||$event_membership_types_long_name||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_full_desc||outputs membership description. (setting: Sales pitch description:) ||Tag Replacements||reg_membership_full_desc||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_rules||outputs membership rules. (setting: Rules For this membership)  ||Tag Replacements||reg_membership_rules||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_type||outputs registrant membership code for current event. Example SPON_0||Tag Replacements||reg_membership_type||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_last_updated||outputs membership last modified date for current event.  ||Tag Replacements||reg_membership_last_updated||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_price||outputs membership price.  ||Tag Replacements||reg_membership_price||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_from||outputs membership available from date. ||Tag Replacements||reg_membership_avail_from||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_to||outputs membership available to date.   ||Tag Replacements||reg_membership_avail_to||||&lt;br /&gt;
|-&lt;br /&gt;
| staff||if attendee_membership_name contains the word 'staff' this will equal true, this is not case sensitive.||badgecode||||$staff||if retained, maybe this should also check membership_long_name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ panelist&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_has_confirmed_activity||useful for a true false for flagging panelist badges.||new||||||This is highly speculative, however I'm presuming this would work something like AS/DD in that the application would be tied to the UID of the person who applied, so we could pick it up that way, it could go into the attendee group&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_host||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_assistant||useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_is_true if uid matches to either activity host or assistant - useful for a true false for flagging panelist badges.||new|||||||&lt;br /&gt;
|-&lt;br /&gt;
| activity_schedule||displays a formatted list of activities a panelist is assigned/confirmed to||new|||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ dealers&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_application_state||useful for doing a strcmp in badgecode to automatically tag dealers on approved dealers/artists.||new||||||for correctness I want to call this group artshow, but these function will only really be used by dealers den&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_confirmed||useful for a true false for flagging dealer badges.||new||||||these three are listed as options&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_assistant||useful for a true false for flagging dealer assistant badges.||new||||||these three are listed as options &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ udf&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_title||Will display the title of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_title.||Badgecode||||$udf_title||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_value||Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.||Badgecode||||$udf_value||&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;||Returns True is the UDF has been answered||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_type||returns the udf type||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_udf_response_list||Will display the UDF questions if relevent||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_purchased_&amp;lt;num&amp;gt;||returns true if the customer has purchased the product||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_incart_||returns true if the customer has the product in their cart||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_info||displays product description||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_price||displays product price||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_sold||displays how many have been sold||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_remaining||displays how many are remaining (cart+purchased-inventory)||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| cm_version||displays CM version string||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| db_version||displays db db version int||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_expiration||displays license expiration date||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_valid_events||displays list of valid events||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_dev_license||returns true if dev license||new||||||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=455</id>
		<title>Proposed Universal Substitution System</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=455"/>
		<updated>2021-07-22T03:24:51Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ registrant&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| uid||outputs the registrant uid.||Tag Replacements||reg_uid||$uid|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_first||outputs registrant first name.   ||Tag Replacements||reg_rl_first||$registrant_rl_first|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_last||outputs registrant last name.  ||Tag Replacements||reg_rl_last||$registrant_rl_last|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_name||outputs registrant &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.  ||Tag Replacements||reg_full_name||||&lt;br /&gt;
|-&lt;br /&gt;
| common_name||outputs registrant badge name if not empty - otherwise thier  &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.   ||Tag Replacements||reg_badge_name||$registrant_fan_name|||&lt;br /&gt;
|-&lt;br /&gt;
| badge_name||outputs registrant badge name.  ||Tag Replacements||reg_birthday||$registrant_birthday|||&lt;br /&gt;
|-&lt;br /&gt;
| birthday||outputs registrant birthdate.  ||Tag Replacements||reg_first_created||||&lt;br /&gt;
|-&lt;br /&gt;
| first_created||outputs registrant account creation date from database.  ||Tag Replacements||reg_common_name||$registrant_common_name|||&lt;br /&gt;
|-&lt;br /&gt;
| address_ship_to_name||outputs registrant ship to name.   ||Tag Replacements||reg_address_ship_to_name||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_1||outputs registrant address line 1.  ||Tag Replacements||reg_address_line_1||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_2||outputs registrant address line 2.  ||Tag Replacements||reg_address_line_2||||&lt;br /&gt;
|-&lt;br /&gt;
| address_city||outputs registrant address city.  ||Tag Replacements||reg_address_city||||&lt;br /&gt;
|-&lt;br /&gt;
| address_state||outputs registrant address state. ||Tag Replacements||reg_address_state||||&lt;br /&gt;
|-&lt;br /&gt;
| address_country||outputs registrant address country.   ||Tag Replacements||reg_address_country||||&lt;br /&gt;
|-&lt;br /&gt;
| address_zip||outputs registrant address zip.   ||Tag Replacements||reg_address_zip||||&lt;br /&gt;
|-&lt;br /&gt;
| address_full||outputs registrant address with all fields combined.   ||Tag Replacements||reg_address_full||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_type||outputs registrant phone type.  ||Tag Replacements||reg_phone_type||||&lt;br /&gt;
|-&lt;br /&gt;
| phone_number||outputs registrant phone number.  ||Tag Replacements||reg_phone_number||||&lt;br /&gt;
|-&lt;br /&gt;
| email||outputs registrant email.  ||Tag Replacements||reg_email||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_created||outputs date payment hold was created for current registrant and event.  ||Tag Replacements||reg_payment_hold_created||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry||outputs date payment hold will expire for current registrant and event. ex: 2020-01-22 18:30:15   ||Tag Replacements||reg_payment_hold_expiry||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_extendable_to||outputs latest date payment hold can be extended up to for current registrant and event.  ||Tag Replacements||reg_payment_hold_extendable_to||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_payment_type||outputs most recent payment type selected for current registrant and event  ||Tag Replacements||reg_payment_hold_payment_type||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry_long||outputs long date payment hold will expire for current registrant and event. ex: Wednesday, January 22, 2020, @ 6:30 PM ||Tag Replacements||reg_payment_hold_expiry_long||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_marked_deceased||Returns True if the user is marked deceased||new|||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_ConsoleUser||Returns True if the user has an active console login||new|||||&lt;br /&gt;
|-&lt;br /&gt;
| consoleUserExpiryDate||Displays expiration date for console login||new|||||&lt;br /&gt;
|-&lt;br /&gt;
| CompMoneyRemaining||Displays the remaining comp money||new|||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ events&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| event_id||outputs the Event Id. Example: &amp;quot;DEMO_1&amp;quot;||Tag Replacements||event_id||$event_id||||&lt;br /&gt;
|-&lt;br /&gt;
| event_title||outputs the Event Title. Example: &amp;quot;Demo Event&amp;quot;  ||Tag Replacements||event_title||$events_event_title||||&lt;br /&gt;
|-&lt;br /&gt;
| event_start_date||outputs event start date from event settings.  ||Tag Replacements||event_start_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_end_date||outputs event end date from event settings.||Tag Replacements||event_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_age_of_maturity||outputs event age of maturity from event settings. ||Tag Replacements||event_age_of_maturity||||&lt;br /&gt;
|-&lt;br /&gt;
| event_pre_reg_end_date||outputs event pre-reg end date from event settings. ||Tag Replacements||event_pre_reg_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_1||outputs address line 1 from event settings.  ||Tag Replacements||event_address_1||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_2||outputs address line 2 from event settings. ||Tag Replacements||event_address_2||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_3||outputs address line 3 from event settings.  ||Tag Replacements||event_address_3||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_4||outputs address line 4 from event settings.||Tag Replacements||event_address_4||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_full||outputs event address with all fields combined.   ||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultFromEmail||outputs default from email address in event settings.  ||Tag Replacements||event_defaultFromEmail||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultReplyTo||outputs default reply to: in event settings.  ||Tag Replacements||event_defaultReplyTo||||&lt;br /&gt;
|-&lt;br /&gt;
| event_chequeToName||outputs cheque to name in event settings.  ||Tag Replacements||event_chequeToName||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ attendee&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_underage||true if below age of maturity set for event from birthdate and stored event age of maturity||badgecode||||$underage||||&lt;br /&gt;
|-&lt;br /&gt;
| num||registration sequence number for that particular event||Tag Replacements||reg_reg_num||$events_attended_reg_num||||&lt;br /&gt;
|-&lt;br /&gt;
| badge_display_code||outputs registrant badge layout code. Example: FNOT||Tag Replacements||reg_badge_display_code||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_name||outputs membership name. (setting: Group Name)||Tag Replacements||reg_membership_name||$event_membership_types_name||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_long_name||outputs membership long name. (setting: Membership Type as printed on badge)  ||Tag Replacements||reg_membership_long_name||$event_membership_types_long_name||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_full_desc||outputs membership description. (setting: Sales pitch description:) ||Tag Replacements||reg_membership_full_desc||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_rules||outputs membership rules. (setting: Rules For this membership)  ||Tag Replacements||reg_membership_rules||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_type||outputs registrant membership code for current event. Example SPON_0||Tag Replacements||reg_membership_type||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_last_updated||outputs membership last modified date for current event.  ||Tag Replacements||reg_membership_last_updated||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_price||outputs membership price.  ||Tag Replacements||reg_membership_price||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_from||outputs membership available from date. ||Tag Replacements||reg_membership_avail_from||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_to||outputs membership available to date.   ||Tag Replacements||reg_membership_avail_to||||&lt;br /&gt;
|-&lt;br /&gt;
| staff||if attendee_membership_name contains the word 'staff' this will equal true, this is not case sensitive.||badgecode||||$staff||if retained, maybe this should also check membership_long_name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ panelist&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_has_confirmed_activity||useful for a true false for flagging panelist badges.||new||||||This is highly speculative, however I'm presuming this would work something like AS/DD in that the application would be tied to the UID of the person who applied, so we could pick it up that way, it could go into the attendee group&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_host||useful for a true false for flagging panelist badges.||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_assistant||useful for a true false for flagging panelist badges.||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_is_true if uid matches to either activity host or assistant - useful for a true false for flagging panelist badges.||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| activity_schedule||displays a formatted list of activities a panelist is assigned/confirmed to||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ dealers&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_application_state||useful for doing a strcmp in badgecode to automatically tag dealers on approved dealers/artists.||new||||||for correctness I want to call this group artshow, but these function will only really be used by dealers den&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_confirmed||useful for a true false for flagging dealer badges.||new||||||these three are listed as options&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_assistant||useful for a true false for flagging dealer assistant badges.||new||||||these three are listed as options &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ udf&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_title||Will display the title of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_title.||Badgecode||||$udf_title||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_value||Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.||Badgecode||||$udf_value||&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;||Returns True is the UDF has been answered||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_type||returns the udf type||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_udf_response_list||Will display the UDF questions if relevent||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_purchased_&amp;lt;num&amp;gt;||returns true if the customer has purchased the product||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_incart_||returns true if the customer has the product in their cart||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_info||displays product description||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_price||displays product price||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_sold||displays how many have been sold||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_remaining||displays how many are remaining (cart+purchased-inventory)||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| cm_version||displays CM version string||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| db_version||displays db db version int||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_expiration||displays license expiration date||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_valid_events||displays list of valid events||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_dev_license||returns true if dev license||new||||||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=454</id>
		<title>Proposed Universal Substitution System</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=454"/>
		<updated>2021-07-22T03:23:52Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ registrant&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| uid||outputs the registrant uid.||Tag Replacements||reg_uid||$uid|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_first||outputs registrant first name.   ||Tag Replacements||reg_rl_first||$registrant_rl_first|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_last||outputs registrant last name.  ||Tag Replacements||reg_rl_last||$registrant_rl_last|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_name||outputs registrant &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.  ||Tag Replacements||reg_full_name||||&lt;br /&gt;
|-&lt;br /&gt;
| common_name||outputs registrant badge name if not empty - otherwise thier  &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.   ||Tag Replacements||reg_badge_name||$registrant_fan_name|||&lt;br /&gt;
|-&lt;br /&gt;
| badge_name||outputs registrant badge name.  ||Tag Replacements||reg_birthday||$registrant_birthday|||&lt;br /&gt;
|-&lt;br /&gt;
| birthday||outputs registrant birthdate.  ||Tag Replacements||reg_first_created||||&lt;br /&gt;
|-&lt;br /&gt;
| first_created||outputs registrant account creation date from database.  ||Tag Replacements||reg_common_name||$registrant_common_name|||&lt;br /&gt;
|-&lt;br /&gt;
| address_ship_to_name||outputs registrant ship to name.   ||Tag Replacements||reg_address_ship_to_name||||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_1||outputs registrant address line 1.  ||Tag Replacements||reg_address_line_1|||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_2||outputs registrant address line 2.  ||Tag Replacements||reg_address_line_2|||&lt;br /&gt;
|-&lt;br /&gt;
| address_city||outputs registrant address city.  ||Tag Replacements||reg_address_city|||&lt;br /&gt;
|-&lt;br /&gt;
| address_state||outputs registrant address state. ||Tag Replacements||reg_address_state|||&lt;br /&gt;
|-&lt;br /&gt;
| address_country||outputs registrant address country.   ||Tag Replacements||reg_address_country|||&lt;br /&gt;
|-&lt;br /&gt;
| address_zip||outputs registrant address zip.   ||Tag Replacements||reg_address_zip|||&lt;br /&gt;
|-&lt;br /&gt;
| address_full||outputs registrant address with all fields combined.   ||Tag Replacements||reg_address_full|||&lt;br /&gt;
|-&lt;br /&gt;
| phone_type||outputs registrant phone type.  ||Tag Replacements||reg_phone_type|||&lt;br /&gt;
|-&lt;br /&gt;
| phone_number||outputs registrant phone number.  ||Tag Replacements||reg_phone_number|||&lt;br /&gt;
|-&lt;br /&gt;
| email||outputs registrant email.  ||Tag Replacements||reg_email|||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_created||outputs date payment hold was created for current registrant and event.  ||Tag Replacements||reg_payment_hold_created||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry||outputs date payment hold will expire for current registrant and event. ex: 2020-01-22 18:30:15   ||Tag Replacements||reg_payment_hold_expiry||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_extendable_to||outputs latest date payment hold can be extended up to for current registrant and event.  ||Tag Replacements||reg_payment_hold_extendable_to||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_payment_type||outputs most recent payment type selected for current registrant and event  ||Tag Replacements||reg_payment_hold_payment_type||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry_long||outputs long date payment hold will expire for current registrant and event. ex: Wednesday, January 22, 2020, @ 6:30 PM ||Tag Replacements||reg_payment_hold_expiry_long||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_marked_deceased||Returns True if the user is marked deceased||new||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_ConsoleUser||Returns True if the user has an active console login||new||||&lt;br /&gt;
|-&lt;br /&gt;
| consoleUserExpiryDate||Displays expiration date for console login||new||||&lt;br /&gt;
|-&lt;br /&gt;
| CompMoneyRemaining||Displays the remaining comp money||new||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ events&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| event_id||outputs the Event Id. Example: &amp;quot;DEMO_1&amp;quot;||Tag Replacements||event_id||$event_id||||&lt;br /&gt;
|-&lt;br /&gt;
| event_title||outputs the Event Title. Example: &amp;quot;Demo Event&amp;quot;  ||Tag Replacements||event_title||$events_event_title||||&lt;br /&gt;
|-&lt;br /&gt;
| event_start_date||outputs event start date from event settings.  ||Tag Replacements||event_start_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_end_date||outputs event end date from event settings.||Tag Replacements||event_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_age_of_maturity||outputs event age of maturity from event settings. ||Tag Replacements||event_age_of_maturity||||&lt;br /&gt;
|-&lt;br /&gt;
| event_pre_reg_end_date||outputs event pre-reg end date from event settings. ||Tag Replacements||event_pre_reg_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_1||outputs address line 1 from event settings.  ||Tag Replacements||event_address_1||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_2||outputs address line 2 from event settings. ||Tag Replacements||event_address_2||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_3||outputs address line 3 from event settings.  ||Tag Replacements||event_address_3||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_4||outputs address line 4 from event settings.||Tag Replacements||event_address_4||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_full||outputs event address with all fields combined.   ||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultFromEmail||outputs default from email address in event settings.  ||Tag Replacements||event_defaultFromEmail||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultReplyTo||outputs default reply to: in event settings.  ||Tag Replacements||event_defaultReplyTo||||&lt;br /&gt;
|-&lt;br /&gt;
| event_chequeToName||outputs cheque to name in event settings.  ||Tag Replacements||event_chequeToName||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ attendee&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_underage||true if below age of maturity set for event from birthdate and stored event age of maturity||badgecode||||$underage||||&lt;br /&gt;
|-&lt;br /&gt;
| num||registration sequence number for that particular event||Tag Replacements||reg_reg_num||$events_attended_reg_num||||&lt;br /&gt;
|-&lt;br /&gt;
| badge_display_code||outputs registrant badge layout code. Example: FNOT||Tag Replacements||reg_badge_display_code||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_name||outputs membership name. (setting: Group Name)||Tag Replacements||reg_membership_name||$event_membership_types_name||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_long_name||outputs membership long name. (setting: Membership Type as printed on badge)  ||Tag Replacements||reg_membership_long_name||$event_membership_types_long_name||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_full_desc||outputs membership description. (setting: Sales pitch description:) ||Tag Replacements||reg_membership_full_desc||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_rules||outputs membership rules. (setting: Rules For this membership)  ||Tag Replacements||reg_membership_rules||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_type||outputs registrant membership code for current event. Example SPON_0||Tag Replacements||reg_membership_type||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_last_updated||outputs membership last modified date for current event.  ||Tag Replacements||reg_membership_last_updated||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_price||outputs membership price.  ||Tag Replacements||reg_membership_price||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_from||outputs membership available from date. ||Tag Replacements||reg_membership_avail_from||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_to||outputs membership available to date.   ||Tag Replacements||reg_membership_avail_to||||&lt;br /&gt;
|-&lt;br /&gt;
| staff||if attendee_membership_name contains the word 'staff' this will equal true, this is not case sensitive.||badgecode||||$staff||if retained, maybe this should also check membership_long_name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ panelist&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_has_confirmed_activity||useful for a true false for flagging panelist badges.||new||||||This is highly speculative, however I'm presuming this would work something like AS/DD in that the application would be tied to the UID of the person who applied, so we could pick it up that way, it could go into the attendee group&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_host||useful for a true false for flagging panelist badges.||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_assistant||useful for a true false for flagging panelist badges.||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_is_true if uid matches to either activity host or assistant - useful for a true false for flagging panelist badges.||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| activity_schedule||displays a formatted list of activities a panelist is assigned/confirmed to||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ dealers&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_application_state||useful for doing a strcmp in badgecode to automatically tag dealers on approved dealers/artists.||new||||||for correctness I want to call this group artshow, but these function will only really be used by dealers den&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_confirmed||useful for a true false for flagging dealer badges.||new||||||these three are listed as options&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_assistant||useful for a true false for flagging dealer assistant badges.||new||||||these three are listed as options &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ udf&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_title||Will display the title of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_title.||Badgecode||||$udf_title||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_value||Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.||Badgecode||||$udf_value||&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;||Returns True is the UDF has been answered||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_type||returns the udf type||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_udf_response_list||Will display the UDF questions if relevent||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_purchased_&amp;lt;num&amp;gt;||returns true if the customer has purchased the product||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_incart_||returns true if the customer has the product in their cart||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_info||displays product description||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_price||displays product price||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_sold||displays how many have been sold||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_remaining||displays how many are remaining (cart+purchased-inventory)||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| cm_version||displays CM version string||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| db_version||displays db db version int||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_expiration||displays license expiration date||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_valid_events||displays list of valid events||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_dev_license||returns true if dev license||new||||||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
	<entry>
		<id>https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=453</id>
		<title>Proposed Universal Substitution System</title>
		<link rel="alternate" type="text/html" href="https://docs.civetsolutions.com/index.php?title=Proposed_Universal_Substitution_System&amp;diff=453"/>
		<updated>2021-07-22T03:23:18Z</updated>

		<summary type="html">&lt;p&gt;Aloha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ registrant&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| uid||outputs the registrant uid.||Tag Replacements||reg_uid||$uid|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_first||outputs registrant first name.   ||Tag Replacements||reg_rl_first||$registrant_rl_first|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_last||outputs registrant last name.  ||Tag Replacements||reg_rl_last||$registrant_rl_last|||&lt;br /&gt;
|-&lt;br /&gt;
| legal_name||outputs registrant &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.  ||Tag Replacements||reg_full_name||||&lt;br /&gt;
|-&lt;br /&gt;
| common_name||outputs registrant badge name if not empty - otherwise thier  &amp;quot;first&amp;quot; + &amp;quot;last&amp;quot; name.   ||Tag Replacements||reg_badge_name||$registrant_fan_name|||&lt;br /&gt;
|-&lt;br /&gt;
| badge_name||outputs registrant badge name.  ||Tag Replacements||reg_birthday||$registrant_birthday|||&lt;br /&gt;
|-&lt;br /&gt;
| birthday||outputs registrant birthdate.  ||Tag Replacements||reg_first_created|||&lt;br /&gt;
|-&lt;br /&gt;
| first_created||outputs registrant account creation date from database.  ||Tag Replacements||reg_common_name||$registrant_common_name|||&lt;br /&gt;
|-&lt;br /&gt;
| address_ship_to_name||outputs registrant ship to name.   ||Tag Replacements||reg_address_ship_to_name|||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_1||outputs registrant address line 1.  ||Tag Replacements||reg_address_line_1|||&lt;br /&gt;
|-&lt;br /&gt;
| address_line_2||outputs registrant address line 2.  ||Tag Replacements||reg_address_line_2|||&lt;br /&gt;
|-&lt;br /&gt;
| address_city||outputs registrant address city.  ||Tag Replacements||reg_address_city|||&lt;br /&gt;
|-&lt;br /&gt;
| address_state||outputs registrant address state. ||Tag Replacements||reg_address_state|||&lt;br /&gt;
|-&lt;br /&gt;
| address_country||outputs registrant address country.   ||Tag Replacements||reg_address_country|||&lt;br /&gt;
|-&lt;br /&gt;
| address_zip||outputs registrant address zip.   ||Tag Replacements||reg_address_zip|||&lt;br /&gt;
|-&lt;br /&gt;
| address_full||outputs registrant address with all fields combined.   ||Tag Replacements||reg_address_full|||&lt;br /&gt;
|-&lt;br /&gt;
| phone_type||outputs registrant phone type.  ||Tag Replacements||reg_phone_type|||&lt;br /&gt;
|-&lt;br /&gt;
| phone_number||outputs registrant phone number.  ||Tag Replacements||reg_phone_number|||&lt;br /&gt;
|-&lt;br /&gt;
| email||outputs registrant email.  ||Tag Replacements||reg_email|||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_created||outputs date payment hold was created for current registrant and event.  ||Tag Replacements||reg_payment_hold_created||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry||outputs date payment hold will expire for current registrant and event. ex: 2020-01-22 18:30:15   ||Tag Replacements||reg_payment_hold_expiry||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_extendable_to||outputs latest date payment hold can be extended up to for current registrant and event.  ||Tag Replacements||reg_payment_hold_extendable_to||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_payment_type||outputs most recent payment type selected for current registrant and event  ||Tag Replacements||reg_payment_hold_payment_type||||&lt;br /&gt;
|-&lt;br /&gt;
| payment_hold_expiry_long||outputs long date payment hold will expire for current registrant and event. ex: Wednesday, January 22, 2020, @ 6:30 PM ||Tag Replacements||reg_payment_hold_expiry_long||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_marked_deceased||Returns True if the user is marked deceased||new||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_ConsoleUser||Returns True if the user has an active console login||new||||&lt;br /&gt;
|-&lt;br /&gt;
| consoleUserExpiryDate||Displays expiration date for console login||new||||&lt;br /&gt;
|-&lt;br /&gt;
| CompMoneyRemaining||Displays the remaining comp money||new||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ events&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| event_id||outputs the Event Id. Example: &amp;quot;DEMO_1&amp;quot;||Tag Replacements||event_id||$event_id||||&lt;br /&gt;
|-&lt;br /&gt;
| event_title||outputs the Event Title. Example: &amp;quot;Demo Event&amp;quot;  ||Tag Replacements||event_title||$events_event_title||||&lt;br /&gt;
|-&lt;br /&gt;
| event_start_date||outputs event start date from event settings.  ||Tag Replacements||event_start_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_end_date||outputs event end date from event settings.||Tag Replacements||event_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_age_of_maturity||outputs event age of maturity from event settings. ||Tag Replacements||event_age_of_maturity||||&lt;br /&gt;
|-&lt;br /&gt;
| event_pre_reg_end_date||outputs event pre-reg end date from event settings. ||Tag Replacements||event_pre_reg_end_date||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_1||outputs address line 1 from event settings.  ||Tag Replacements||event_address_1||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_2||outputs address line 2 from event settings. ||Tag Replacements||event_address_2||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_3||outputs address line 3 from event settings.  ||Tag Replacements||event_address_3||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_4||outputs address line 4 from event settings.||Tag Replacements||event_address_4||||&lt;br /&gt;
|-&lt;br /&gt;
| event_address_full||outputs event address with all fields combined.   ||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultFromEmail||outputs default from email address in event settings.  ||Tag Replacements||event_defaultFromEmail||||&lt;br /&gt;
|-&lt;br /&gt;
| event_defaultReplyTo||outputs default reply to: in event settings.  ||Tag Replacements||event_defaultReplyTo||||&lt;br /&gt;
|-&lt;br /&gt;
| event_chequeToName||outputs cheque to name in event settings.  ||Tag Replacements||event_chequeToName||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ attendee&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_underage||true if below age of maturity set for event from birthdate and stored event age of maturity||badgecode||||$underage||||&lt;br /&gt;
|-&lt;br /&gt;
| num||registration sequence number for that particular event||Tag Replacements||reg_reg_num||$events_attended_reg_num||||&lt;br /&gt;
|-&lt;br /&gt;
| badge_display_code||outputs registrant badge layout code. Example: FNOT||Tag Replacements||reg_badge_display_code||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_name||outputs membership name. (setting: Group Name)||Tag Replacements||reg_membership_name||$event_membership_types_name||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_long_name||outputs membership long name. (setting: Membership Type as printed on badge)  ||Tag Replacements||reg_membership_long_name||$event_membership_types_long_name||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_full_desc||outputs membership description. (setting: Sales pitch description:) ||Tag Replacements||reg_membership_full_desc||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_rules||outputs membership rules. (setting: Rules For this membership)  ||Tag Replacements||reg_membership_rules||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_type||outputs registrant membership code for current event. Example SPON_0||Tag Replacements||reg_membership_type||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_last_updated||outputs membership last modified date for current event.  ||Tag Replacements||reg_membership_last_updated||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_price||outputs membership price.  ||Tag Replacements||reg_membership_price||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_from||outputs membership available from date. ||Tag Replacements||reg_membership_avail_from||||&lt;br /&gt;
|-&lt;br /&gt;
| membership_avail_to||outputs membership available to date.   ||Tag Replacements||reg_membership_avail_to||||&lt;br /&gt;
|-&lt;br /&gt;
| staff||if attendee_membership_name contains the word 'staff' this will equal true, this is not case sensitive.||badgecode||||$staff||if retained, maybe this should also check membership_long_name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ panelist&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_has_confirmed_activity||useful for a true false for flagging panelist badges.||new||||||This is highly speculative, however I'm presuming this would work something like AS/DD in that the application would be tied to the UID of the person who applied, so we could pick it up that way, it could go into the attendee group&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_host||useful for a true false for flagging panelist badges.||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_activity_assistant||useful for a true false for flagging panelist badges.||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_is_true if uid matches to either activity host or assistant - useful for a true false for flagging panelist badges.||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| activity_schedule||displays a formatted list of activities a panelist is assigned/confirmed to||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ dealers&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_application_state||useful for doing a strcmp in badgecode to automatically tag dealers on approved dealers/artists.||new||||||for correctness I want to call this group artshow, but these function will only really be used by dealers den&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_confirmed||useful for a true false for flagging dealer badges.||new||||||these three are listed as options&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;_assistant||useful for a true false for flagging dealer assistant badges.||new||||||these three are listed as options &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ udf&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_title||Will display the title of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_title.||Badgecode||||$udf_title||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_value||Will display the value of the user defined field. (If the customer has it applied to them) Ex: $UDF_12_value.||Badgecode||||$udf_value||&lt;br /&gt;
|-&lt;br /&gt;
| bool_&amp;lt;num&amp;gt;||Returns True is the UDF has been answered||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_type||returns the udf type||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_udf_response_list||Will display the UDF questions if relevent||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| bool_purchased_&amp;lt;num&amp;gt;||returns true if the customer has purchased the product||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_incart_||returns true if the customer has the product in their cart||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_info||displays product description||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_price||displays product price||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_sold||displays how many have been sold||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;num&amp;gt;_items_remaining||displays how many are remaining (cart+purchased-inventory)||new||||||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ product&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Substitution'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Description'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Source'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Tag Replacement'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''badgecode'''&lt;br /&gt;
| align=&amp;quot;center&amp;quot; style=&amp;quot;background:#f0f0f0;&amp;quot;|'''Notes'''&lt;br /&gt;
|-&lt;br /&gt;
| cm_version||displays CM version string||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| db_version||displays db db version int||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_expiration||displays license expiration date||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| license_valid_events||displays list of valid events||new||||||&lt;br /&gt;
|-&lt;br /&gt;
| bool_dev_license||returns true if dev license||new||||||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aloha</name></author>
	</entry>
</feed>