/** Define any javascript needed @return A javascript string function javascript_content(){ $js =""; return $js; } */ function body_content() { global $FANNIE_AUTH_ENABLED; include '../config.php'; ob_start(); echo showInstallTabs('Authentication'); ?> <form action=InstallAuthenticationPage.php method=post> <h1 class="install"> <?php if (!$this->themed) { echo "<h1 class='install'>{$this->header}</h1>"; } ?> </h1> <?php if (is_writable('../config.php')) { echo "<div class=\"alert alert-success\"><i>config.php</i> is writeable</div>"; } else { echo "<div class=\"alert alert-danger;\"><b>Error</b>: config.php is not writeable</div>"; } ?> <hr /> <p class="ichunk" style="margin-top: 1.0em;"> <b>Authentication enabled</b> <?php echo installSelectField('FANNIE_AUTH_ENABLED', $FANNIE_AUTH_ENABLED, array(1 => 'Yes', 0 => 'No'), false, false); ?> </p><!-- /.ichunk --> <?php // Default to Authenticate ("Authenticate Everything") or not. if ($FANNIE_AUTH_ENABLED) { echo "<p class='ichunk'>"; echo "<b>Authenticate by default </b>"; echo installSelectField('FANNIE_AUTH_DEFAULT', $FANNIE_AUTH_DEFAULT, array(1 => 'Yes', 0 => 'No'), false, false); echo "If 'Yes' all Admin utilities will require Login<br />"; echo "If 'No' only those utilities coded for it will require Login"; echo "</p><!-- /.ichunk -->"; } if ($FANNIE_AUTH_ENABLED) { if (!function_exists("login")) { include $FANNIE_ROOT . 'auth/login.php'; } // if no users exist, offer to create one if (getNumUsers() == 0) { $success = False; if (isset($_REQUEST['newuser']) && isset($_REQUEST['newpass'])) { $FANNIE_AUTH_ENABLED = False; // toggle to bypass user checking $newUser = $_REQUEST['newuser']; $success = createLogin($_REQUEST['newuser'], $_REQUEST['newpass']); if ($success) { echo "<i>User " . $_REQUEST['newuser'] . " created</i><br />"; $FANNIE_AUTH_ENABLED = True; // toggle enforce error checking $success = addAuth($_REQUEST['newuser'], 'admin'); if ($success) { echo "<i>User " . $_REQUEST['newuser'] . " is an admin</i><br />"; echo "You can use these credentials at the <a href='../auth/ui/' target='_aui'>Authentication Interface</a></br />"; echo " Other protected pages may require different credentials.<br />"; $success = addAuth($_REQUEST['newuser'], 'sysadmin'); if ($success) { echo "<i>User " . $_REQUEST['newuser'] . " is a sysadmin</i><br />"; echo "You can use these credentials at the Installation and Configuration Interface (these pages)</br />"; // populate known privileges table automatically $db = FannieDB::get($FANNIE_OP_DB); ob_start(); // don't care about primary key errors \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'userKnownPrivs'); ob_end_clean(); // loaddata() has no return value; success assumed. echo "Table {$FANNIE_OP_DB}.userKnownPrivs has been populated with the standard privilege set.<br />"; } else { echo "<b>Error making user {$newUser} a sysadmin</b><br />"; } } else { echo "<b>Error making user {$newUser} an admin</b><br />"; } } else { echo "<b>Error creating initial user</b><br />"; } $FANNIE_AUTH_ENABLED = True; // toggle enforce error checking } if (!$success) { echo "<br /><i>No users defined. To create an initial admin user,\n enter a username and password below</i><br />"; echo 'Username: <input type="text" name="newuser" /><br />'; echo 'Password: <input type="password" name="newpass" /><br />'; } } else { echo "<p class='ichunk'>You can manage Login users and groups via the <a href='../auth/ui/' target='_aui'>Authentication Interface</a>"; echo "</p><!-- /.ichunk -->"; } echo "<p class='ichunk'><a href='../../documentation/Fannie/developer/auth.html' target='_audoc'>How Authentication Works</a>"; echo "</p><!-- /.ichunk -->"; } ?> <hr /> <b>Allow shadow logins</b> <?php echo installSelectField('FANNIE_AUTH_SHADOW', $FANNIE_AUTH_SHADOW, array(1 => 'Yes', 0 => 'No'), false, false); if (!file_exists("../auth/shadowread/shadowread")) { echo "<div class=\"alert alert-danger\"><b>Error</b>: shadowread utility does not exist</div>"; echo "<div class=\"well\">"; echo "shadowread lets Fannie authenticate users agaist /etc/shadow. To create it:"; echo "<pre>\ncd " . realpath('../auth/shadowread') . "\nmake\n </pre>"; echo "</div>"; } else { $perms = fileperms("../auth/shadowread/shadowread"); if ($perms == 0104755) { echo "<div class=\"alert alert-success\">shadowread utility has proper permissions</div>"; } else { echo "<div class=\"alert alert-danger\"><b>Warning</b>: shadowread utility has incorrect permissions</div>"; echo "<div class=\"well\">"; echo "shadowread needs setuid permission. To fix it: "; echo "<pre>\ncd " . realpath('../auth/shadowread') . "\nsudo make install\n </pre>"; echo "</div>"; } } ?> <hr /> <b>Allow LDAP logins</b> <?php echo installSelectField('FANNIE_AUTH_LDAP', $FANNIE_AUTH_LDAP, array(1 => 'Yes', 0 => 'No'), false, false); if (!function_exists("ldap_connect")) { echo "<div class=\"alert alert-danger\"><b>Warning</b>: PHP install does not have LDAP support enabled</div>"; } else { echo "<div class=\"alert alert-success\">PHP has LDAP support enabled</div>"; } ?> <br /> <label>LDAP Server Host</label> <?php echo installTextField('FANNIE_LDAP_SERVER', $FANNIE_LDAP_SERVER, '127.0.0.1'); ?> <label>LDAP Port</label> <?php echo installTextField('FANNIE_LDAP_PORT', $FANNIE_LDAP_PORT, '389'); ?> <label>LDAP Domain (DN)</label> <?php echo installTextField('FANNIE_LDAP_DN', $FANNIE_LDAP_DN, 'ou=People,dc=example,dc=org'); ?> <label>LDAP Username Field</label> <?php echo installTextField('FANNIE_LDAP_SEARCH_FIELD', $FANNIE_LDAP_SEARCH_FIELD, 'uid'); ?> <label>LDAP User ID# Field</label> <?php echo installTextField('FANNIE_LDAP_UID_FIELD', $FANNIE_LDAP_UID_FIELD, 'uidnumber'); ?> <label>LDAP Real Name Field</label> <?php echo installTextField('FANNIE_LDAP_RN_FIELD', $FANNIE_LDAP_RN_FIELD, 'cn'); ?> <hr /> <p> <button type=submit class="btn btn-default">Save Configuration</button> </p> </form> <?php return ob_get_clean(); // body_content }
/** Define any javascript needed @return A javascript string function javascript_content(){ } */ function body_content() { //Should this really be done with global? //global $FANNIE_URL, $FANNIE_EQUITY_DEPARTMENTS; include '../../config.php'; ob_start(); echo showInstallTabs("Sample Data", '../'); ?> <form action=InstallSampleDataPage.php method=post> <h1 class="install"> <?php if (!$this->themed) { echo "<h1 class='install'>{$this->header}</h1>"; } ?> </h1> <?php if (is_writable('../../config.php')) { echo "<div class=\"alert alert-success\"><i>config.php</i> is writeable</div>"; } else { echo "<div class=\"alert alert-danger\"><b>Error</b>: config.php is not writeable</div>"; } ?> <hr /> <div class="well"><em> <?php /* First, if this is a request to load a file, do that. */ $db = new SQLManager($FANNIE_SERVER, $FANNIE_SERVER_DBMS, $FANNIE_OP_DB, $FANNIE_SERVER_USER, $FANNIE_SERVER_PW); if (isset($_REQUEST['employees'])) { echo "Loading employees"; $db->query("TRUNCATE TABLE employees"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'employees'); } elseif (isset($_REQUEST['custdata'])) { echo "Loading custdata"; $backup1 = $db->query('TRUNCATE TABLE custdataBackup'); $backup2 = $db->query('INSERT INTO custdataBackup SELECT * FROM custdata'); if ($backup1 === false || $backup2 === false) { echo _(' - failed to backup current data. Sample data not loaded.'); } else { $db->query("TRUNCATE TABLE custdata"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'custdata'); } } elseif (isset($_REQUEST['memtype'])) { echo "Loading memtype"; $db->query("TRUNCATE TABLE memtype"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'memtype'); } elseif (isset($_REQUEST['products'])) { echo "Loading products"; $backup1 = $db->query('TRUNCATE TABLE productBackup'); $backup2 = $db->query('INSERT INTO productBackup SELECT * FROM products'); if ($backup1 === false || $backup2 === false) { echo _(' - failed to backup current data. Sample data not loaded.'); } else { $db->query("TRUNCATE TABLE products"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'products'); } } elseif (isset($_REQUEST['prod-flags'])) { echo "Loading product flags"; $db->query("TRUNCATE TABLE prodFlags"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'prodFlags'); } elseif (isset($_REQUEST['batchType'])) { echo "Loading batchn types"; $db->query("TRUNCATE TABLE batchType"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'batchType'); } elseif (isset($_REQUEST['depts'])) { echo "Loading departments"; $db->query("TRUNCATE TABLE departments"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'departments'); /* subdepts sample data is of questionable use echo "<br />Loading subdepts"; $db->query("TRUNCATE TABLE subdepts"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db,'subdepts'); */ } elseif (isset($_REQUEST['superdepts'])) { echo "Loading super departments"; $db->query("TRUNCATE TABLE superdepts"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'superdepts'); $db->query("TRUNCATE TABLE superDeptNames"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'superDeptNames'); } elseif (isset($_REQUEST['tenders'])) { echo "Loading tenders"; $db->query("TRUNCATE TABLE tenders"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'tenders'); } elseif (isset($_REQUEST['authentication'])) { echo "Loading authentication info"; $db->query("TRUNCATE TABLE userKnownPrivs"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'userKnownPrivs'); } elseif (isset($_REQUEST['origin'])) { echo "Loading country info"; $db->query("TRUNCATE TABLE originCountry"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'originCountry'); echo "<br />Loading state/province info"; $db->query("TRUNCATE TABLE originStateProv"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'originStateProv'); } else { if (isset($_REQUEST['authGroups'])) { echo "Loading authentication groups"; $db->query("TRUNCATE TABLE userGroups"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'userGroups'); $db->query("TRUNCATE TABLE userGroupPrivs"); \COREPOS\Fannie\API\data\DataLoad::loadSampleData($db, 'userGroupPrivs'); // give "Administrators" group all permissions $db->query("INSERT userGroupPrivs SELECT \n 1, auth_class, 'all', 'all'\n FROM userKnownPrivs"); } } ?> </em></div> <?php /* Display a list of data that can be loaded. */ ?> <p class="ichunk"> Some sample data is available to get a test lane up and running quickly and to try Fannie functions. <h3>Keep in mind this data overwrites whatever is currently in the table.</h3> <br />These utilities populate the server tables. Then use the <a href="../../sync/SyncIndexPage.php" target="_sync"><u>Synchronize</u></a> utilities to populate the lane tables. </p> <hr /> <h4 class="install"><?php echo _('Cashiers'); ?> </h4> This table contains login information for cashiers. The two included logins are '56' and '7000'.<br /> <?php echo $this->loadButton('employees', 'employees', _('Load sample cashiers')); ?> <hr /> <h4 class="install">Customer Data</h4> Customer data is the membership information. Sample data includes a bunch of members and default non-member 11.<br /> <?php echo $this->loadButton('custdata', 'custdata', _('Load sample customers')); ?> <br /> <br /> Customers are classified into different membership types.<br /> <?php echo $this->loadButton('memtype', 'memtype', _('Load sample member types')); ?> <hr /> <h4 class="install">Products</h4> Stuff to sell. There's a lot of sample data. I think this might be the Wedge's or at least a snapshot of it.<br /> <?php echo $this->loadButton('products', 'products', _('Load sample products')); ?> <hr /> <h4 class="install">Product Flags</h4> Product Flags are a flexible method for identifying custom attributes of items. CORE includes a default set of some more common flags.<br /> <?php echo $this->loadButton('prodFlags', 'prod-flags', _('Load sample product flags')); ?> <hr /> <h4 class="install">Batch Types</h4> Batches are used for temporary promotional pricing as well as scheduling changes in regular retail price. Batches may be organized by type. Sample data includes a couple common options. <?php echo $this->loadButton('batchType', 'batchType', _('Load sample batch types')); ?> <hr /> <h4 class="install">Departments</h4> Products get categorized into departments . You can also ring amounts directly to a department. Not needed, strictly speaking, for a basic lane (Ring up items, total, accept tender, provide change).<br /> <?php echo $this->loadButton('departments', 'depts', _('Load sample departments')); ?> <hr /> <h4 class="install">Super-Department Names <span style="font-weight:400;">and</span> Super-Department Links</h4> Super Departments are tags for grouping Departments. A Department can have more than one, that is, belong to more than one Super-Department. This rudimentary set agrees with the Products sample data. Super-Departments can also be used to group the domains of Buyers. Use them with e.g. the <a href="../../fannie/item/productList.php">Product List report/tool</a> They are also used for grouping shelftags for printing and for grouping data in reports. <?php echo $this->loadButton('superdepts', 'superdepts', _('Load sample super departments')); ?> <hr /> <h4 class="install">Tenders</h4> Load all the default tenders into the tenders table.<br /> <?php echo $this->loadButton('tenders', 'tenders', _('Load sample tenders')); ?> <hr /> <h4 class="install">Authentication</h4> Load information about currently defined authorization classes<br /> <?php echo $this->loadButton('userKnownPrivs', 'authentication', _('Load auth classes')); ?> <br /><br /> Load default groups<br /> <?php echo $this->loadButton('userGroups', 'authGroups', _('Load auth groups')); ?> <hr /> <h4 class="install">Countries, States, and Provinces</h4> Load default place-of-origin information<br /> <?php echo $this->loadButton('originCountry', 'origin', _('Load origin info')); ?> <hr /> </form> <?php return ob_get_clean(); // body_content }
public function testSampleData() { $op_db = FannieConfig::config('OP_DB'); $con = FannieDB::get($op_db); $samples = array('batchType', 'custdata', 'departments', 'employees', 'memtype', 'originCountry', 'originStateProv', 'products', 'superdepts', 'superDeptNames', 'tenders'); foreach ($samples as $sample) { $con->query('TRUNCATE TABLE ' . $con->identifierEscape($sample)); ob_start(); $loaded = \COREPOS\Fannie\API\data\DataLoad::loadSampleData($con, $sample); $output = ob_get_clean(); $this->assertEquals(true, $loaded, 'Error loading ' . $sample . ' (' . $output . ')'); } }