tblExtraField = Database::get_main_table(TABLE_EXTRA_FIELD); $this->tblExtraFieldOption = Database::get_main_table(TABLE_EXTRA_FIELD_OPTIONS); $field = new ExtraField('user'); $companyField = $field->get_handler_field_info_by_field_variable('company'); $this->companyExists = false; if (!empty($companyField)) { $this->companyExists = true; $this->companyField = $companyField; } else { $this->companyField = [ 'field_type' => ExtraField::FIELD_TYPE_RADIO, 'variable' => 'company', 'display_text' => 'Company', 'default_value' => '', 'field_order' => 0, 'visible_to_self' => 0, 'visible_to_others' => 0, 'changeable' => 1, 'filter' => 1, ]; } $field = new ExtraField('lp'); $authorsField = $field->get_handler_field_info_by_field_variable('authors'); $this->authorsExists = false; if (empty($authorsField)) { $this->authorsExists = true; $this->authorsField = $authorsField; } } /** * Create a new instance of CheckExtraFieldAuthorsCompanyPlugin. * * @return CheckExtraFieldAuthorsCompanyPlugin */ public static function create() { static $result = null; return $result ? $result : $result = new self(); } /** * Perform the plugin installation. */ public function install() { $this->saveCompanyField(); $this->setCompanyExtrafieldData(); $this->saveAuthorsField(); $this->savePrice(); $this->saveAuthorLPItem(); $this->saveAuthorLp(); } /** * Save the arrangement for company, it is adjusted internally so that the values match the necessary ones. */ public function saveCompanyField() { $data = $this->companyField; if (!empty($data)) { $data['field_type'] = (int) $data['field_type']; $data['field_order'] = (int) $data['field_order']; $data['visible_to_self'] = (int) $data['visible_to_self']; $data['visible_to_others'] = (int) $data['visible_to_others']; $data['changeable'] = (int) $data['changeable']; $data['filter'] = (int) $data['filter']; $data['default_value'] = ''; $data['variable'] = 'company'; $data['visible'] = 1; $data['display_text'] = strtolower(Database::escape_string($data['display_text'])); $schedule = new ExtraField('user'); $this->companyField['id'] = $schedule->save($data); } } /** * Insert the option fields for company with the generic values Company 1, company 2 and company 3. */ public function setCompanyExtrafieldData() { $companies = [ 0 => 'Company 1', 1 => 'Company 2', 2 => 'Company 3', ]; $companyId = (int) $this->companyField['id']; if ($companyId != 0) { for ($i = 0; $i < count($companies); $i++) { $order = $i + 1; $extraFieldOptionValue = $companies[$i]; if ($companyId != null) { $query = "SELECT * FROM ".$this->tblExtraFieldOption." WHERE option_value = '$extraFieldOptionValue' AND field_id = $companyId"; $extraFieldOption = Database::fetch_assoc(Database::query($query)); if (isset($extraFieldOption['id']) && $extraFieldOption['id'] && $extraFieldOption['field_id'] == $companyId) { // Update? } else { $query = " INSERT INTO ".$this->tblExtraFieldOption." (`field_id`, `option_value`, `display_text`, `priority`, `priority_message`, `option_order`) VALUES ( '$companyId', '$extraFieldOptionValue', '$extraFieldOptionValue', NULL, NULL, '$order'); "; Database::query($query); } } } } } /** * Save the arrangement for authors, it is adjusted internally so that the values match the necessary ones. */ public function saveAuthorsField() { $data = [ 'field_type' => ExtraField::FIELD_TYPE_SELECT_MULTIPLE, 'variable' => 'authors', 'display_text' => 'Authors', 'default_value' => '', 'field_order' => 0, 'visible_to_self' => 1, 'visible_to_others' => 0, 'changeable' => 1, 'filter' => 1, ]; $schedule = new ExtraField('lp'); $schedule->save($data); } /** * Save the arrangement for price, it is adjusted internally so that the values match the necessary ones. */ public function savePrice() { $schedule = new ExtraField('lp_item'); $data = []; $data['visible_to_self'] = 1; $data['visible_to_others'] = 1; $data['changeable'] = 1; $data['filter'] = 0; $data['variable'] = 'price'; $data['display_text'] = 'SalePrice'; $data['field_type'] = ExtraField::FIELD_TYPE_INTEGER; $schedule->save($data); } /** * Save the arrangement for AuthorLPItem, it is adjusted internally so that the values match the necessary ones. */ public function saveAuthorLPItem() { $schedule = new ExtraField('lp_item'); $data = []; $data['visible_to_self'] = 1; $data['visible_to_others'] = 0; $data['changeable'] = 1; $data['filter'] = 0; $data['variable'] = 'authorlpitem'; $data['display_text'] = 'LearningPathItemByAuthor'; $data['field_type'] = ExtraField::FIELD_TYPE_SELECT_MULTIPLE; $schedule->save($data); } /** * Save the arrangement for authorlp, it is adjusted internally so that the values match the necessary ones. */ public function saveAuthorLp() { $schedule = new ExtraField('user'); $data = []; $data['variable'] = 'authorlp'; $data['display_text'] = 'authors'; $data['changeable'] = 1; $data['visible_to_self'] = 1; $data['visible_to_others'] = 0; $data['filter'] = 0; $data['field_type'] = ExtraField::FIELD_TYPE_CHECKBOX; $schedule->save($data); } /** * Remove the extra fields set by the plugin. */ public function uninstall() { $companyExists = $this->companyFieldExists(); if ($companyExists == true) { // $this->removeCompanyField(); } $authorsExists = $this->authorsFieldExists(); if ($authorsExists == true) { // $this->removeAuthorsField(); } $priceExists = $this->priceFieldExists(); if ($priceExists == true) { // $this->>removePriceField(); } $authorLpItemExists = $this->authorLpItemFieldExists(); if ($authorLpItemExists == true) { // $this->removeAuthorLpItemField(); } $authorLpExists = $this->authorLpFieldExists(); if ($authorLpExists == true) { // $this->removeAuthorLpField(); } } /** * Verify that the "company" field exists in the database. */ public function companyFieldExists(): bool { $this->getCompanyField(); $this->companyExists = (isset($this->companyField['id'])) ? true : false; return $this->companyExists; } /** * Returns the content of the extra field "company" if it exists in the database, if not, it returns an arrangement * with the basic elements for its operation. * * @return array */ public function getCompanyField() { $companyField = $this->getInfoExtrafield('company'); if (count($companyField) > 1) { $this->companyField = $companyField; } else { $companyField = $this->companyField; } return $companyField; } /** * Verify that the "authors" field exists in the database. */ public function authorsFieldExists(): bool { $this->getAuthorsField(); $this->authorsExists = (isset($this->authorsField['id'])) ? true : false; return $this->authorsExists; } /** * Returns the content of the extra field "authors" if it exists in the database, if not, it returns an arrangement * with the basic elements for its operation. * * @return array */ public function getAuthorsField() { $schedule = new ExtraField('lp'); $data = $schedule->get_handler_field_info_by_field_variable('authors'); if (empty($data)) { $this->authorsField = $data; } else { $data = $this->authorsField; } return $data; } /** * Verify that the "price" field exists in the database. */ public function priceFieldExists(): bool { $this->getPriceField(); $this->priceExists = (isset($this->priceField['id'])) ? true : false; return $this->priceExists; } /** * Returns the content of the extra field "price" if it exists in the database, if not, it returns an arrangement * with the basic elements for its operation. * * @return array */ public function getPriceField() { $schedule = new ExtraField('lp_item'); $data = $schedule->get_handler_field_info_by_field_variable('price'); if (empty($data)) { $this->priceField = $data; } else { $data = $this->priceField; } return $data; } /** * Verify that the "authorlpitem" field exists in the database. */ public function authorLpItemFieldExists(): bool { $this->getAuthorLpItemField(); $this->authorLpItemExists = (isset($this->authorLpItemField['id'])) ? true : false; return $this->authorLpItemExists; } /** * Returns the content of the extra field "authorlpitem" if it exists in the database, if not, it returns an arrangement * with the basic elements for its operation. * * @return array */ public function getAuthorLpItemField() { $schedule = new ExtraField('lp_item'); $data = $schedule->get_handler_field_info_by_field_variable('authorlpitem'); if (empty($data)) { $this->authorLpItemField = $data; } else { $data = $this->authorLpItemField; } return $data; } /** * Verify that the "authorlp" field exists in the database. */ public function authorLpFieldExists(): bool { $this->getAuthorLpField(); $this->authorLpExists = (isset($this->authorLpField['id'])) ? true : false; return $this->authorLpExists; } /** * Returns the content of the extra field "authorlp" if it exists in the database, if not, it returns an arrangement * with the basic elements for its operation. * * @return array */ public function getAuthorLpField() { $field = new ExtraField('user'); $data = $field->get_handler_field_info_by_field_variable('authorlp'); if (empty($data)) { $this->authorLpField = $data; } else { $data = $this->authorLpField; } return $data; } /** * Remove the extra fields "company". */ public function removeCompanyField() { $data = $this->getCompanyField(); // $this->deleteQuery($data); } /** * Remove the extra fields "authors". */ public function removeAuthorsField() { $data = $this->getAuthorsField(); // $this->deleteQuery($data); } /** * Remove the extra fields "price". */ public function removePriceField() { $data = $this->getPriceField(); // $this->deleteQuery($data); } /** * Remove the extra fields "authorlpitem". */ public function removeAuthorLpItemField() { $data = $this->getAuthorLpItemField(); // $this->deleteQuery($data); } /** * Remove the extra fields "authorlp". */ public function removeAuthorLpField() { $data = $this->getAuthorLpField(); // $this->deleteQuery($data); } /** * Executes fix removal for authors or company. * * @param $data */ protected function deleteQuery($data) { $validVariable = false; $variable = $data['variable']; $extraFieldTypeInt = (int) $data['extra_field_type']; $FieldType = (int) $data['field_type']; $id = (int) $data['id']; $extraFieldType = null; switch ($variable) { case 'company': case 'authorlp': $validVariable = true; $extraFieldType = 'user'; break; case 'authors': $validVariable = true; $extraFieldType = 'lp'; break; case 'price': case 'authorlpitem': $validVariable = true; $extraFieldType = 'lp_item'; break; } if ($variable === 'company') { } elseif ($variable === 'authors') { } if ($validVariable == true && $id != 0 && !empty($extraFieldType)) { $query = "SELECT id FROM ".$this->tblExtraField." WHERE id = $id AND variable = '$variable' AND extra_field_type = $extraFieldTypeInt AND field_type = $FieldType "; $data = Database::fetch_assoc(Database::query($query)); if (isset($data['id'])) { $obj = new ExtraField($extraFieldType); $obj->delete($data['id']); } } } /** * Returns the array of an element in the database that matches the variable. * * @param string $variableName * * @return array */ protected function getInfoExtrafield($variableName = null) { if ($variableName == null) { return []; } $variableName = strtolower(Database::escape_string($variableName)); $tblExtraField = $this->tblExtraField; $query = "SELECT * FROM $tblExtraField WHERE variable = '$variableName'"; $data = Database::fetch_assoc(Database::query($query)); if ($data == false || !isset($data['display_text'])) { return []; } return $data; } }